From 983b5fda8bde8794b9e2555b4f89f6b6a2f36c6c Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 25 Apr 2022 11:48:58 -0400 Subject: [PATCH 001/448] copy rfc over (#114) --- polygon/rest/__init__.py | 7 +- polygon/rest/aggs.py | 39 + polygon/rest/base.py | 90 + polygon/rest/client.py | 253 -- polygon/rest/models/__init__.py | 229 +- polygon/rest/models/aggs.py | 26 + polygon/rest/models/definitions.py | 4180 ---------------------------- polygon/rest/models/trades.py | 23 + polygon/rest/models/unmarshal.py | 9 - polygon/rest/trades.py | 41 + rest-example.py | 31 +- 11 files changed, 242 insertions(+), 4686 deletions(-) create mode 100644 polygon/rest/aggs.py create mode 100644 polygon/rest/base.py delete mode 100644 polygon/rest/client.py create mode 100644 polygon/rest/models/aggs.py delete mode 100644 polygon/rest/models/definitions.py create mode 100644 polygon/rest/models/trades.py delete mode 100644 polygon/rest/models/unmarshal.py create mode 100644 polygon/rest/trades.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index fb5d2b40..89861e3a 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1 +1,6 @@ -from .client import RESTClient +from .aggs import AggsClient +from .trades import TradesClient + +class RESTClient(AggsClient, TradesClient): + pass + diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py new file mode 100644 index 00000000..b345d0e1 --- /dev/null +++ b/polygon/rest/aggs.py @@ -0,0 +1,39 @@ +from .base import BaseClient +from typing import Optional, Any, Dict, List, Union +from .models import Agg, Sort + +# https://polygon.io/docs/stocks +class AggsClient(BaseClient): + def get_aggs(self, + ticker: str, + multiplier: int, + timespan: str, + # "from" is a keyword in python https://www.w3schools.com/python/python_ref_keywords.asp + from_: str, + to: str, + adjusted: Optional[bool]=None, + sort: Optional[Union[str, Sort]]=None, + limit: Optional[int]=None, + params: Optional[Dict[str, Any]]=None, + raw: bool=False + ) -> List[Agg]: + """ + Get aggregate bars for a ticker over a given date range in custom time window sizes. + + :param ticker: The ticker symbol. + :param multiplier: The size of the timespan multiplier. + :param timespan: The size of the time window. + :param _from: The start of the aggregate time window. + :param to: The end of the aggregate time window. + :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. + :param sort: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window. + :param limit: Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements. + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: List of aggregates + :rtype: List[Agg] + """ + url = f"/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" + + return self._get(path=url, params=self._get_params(self.get_aggs, locals()), resultKey="results", deserializer=Agg.from_dict, raw=raw) + diff --git a/polygon/rest/base.py b/polygon/rest/base.py new file mode 100644 index 00000000..2cbd985d --- /dev/null +++ b/polygon/rest/base.py @@ -0,0 +1,90 @@ +import os +import json +import urllib3 +import inspect +from enum import Enum +from typing import Optional, Any + +base = 'https://api.polygon.io' +env_key = "POLYGON_API_KEY" + +# https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html +class BaseClient: + def __init__( + self, + api_key: Optional[str] = os.getenv(env_key), + connect_timeout: float = 10.0, + read_timeout: float = 10.0, + num_pools: int = 10, + retries = 3, + base: str = base + ): + if api_key is None: + raise Exception(f"Must specify env var {env_key} or pass api_key in constructor") + self.API_KEY = api_key + self.BASE = base + + # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool + self.client = urllib3.PoolManager(num_pools=num_pools, headers={ + 'Authorization': 'Bearer ' + self.API_KEY + }) + self.timeout=urllib3.Timeout(connect=connect_timeout, read=read_timeout) + self.retries = retries + + def _decode(self, resp): + return json.loads(resp.data.decode('utf-8')) + + def _get(self, path: str, params: Optional[dict] = None, resultKey: Optional[str] = None, deserializer = None, raw: bool = False) -> Any: + if params is None: + params = {} + params = {str(k): str(v) for k, v in params.items() if v is not None} + resp = self.client.request('GET', self.BASE + path, fields=params, retries=self.retries) + + if resp.status != 200: + raise Exception(resp.data.decode('utf-8')) + + if raw: + return resp + + obj = self._decode(resp) + + if resultKey: + obj = obj[resultKey] + + if deserializer: + obj = [deserializer(o) for o in obj] + + return obj + + def _get_params(self, fn, caller_locals): + params = caller_locals["params"] + if params is None: + params = {} + # https://docs.python.org/3.7/library/inspect.html#inspect.Signature + for argname, v in inspect.signature(fn).parameters.items(): + # https://docs.python.org/3.7/library/inspect.html#inspect.Parameter + if argname in ['params', 'raw']: + continue + if v.default != v.empty: + # timestamp_lt -> timestamp.lt + val = caller_locals.get(argname, v.default) + if isinstance(val, Enum): + val = val.value + if val is not None: + params[argname.replace("_", ".")] = val + + return params + + def _paginate(self, path: str, params: dict, raw: bool, deserializer): + while True: + resp = self._get(path=path, params=params, deserializer=deserializer, raw=True) + if raw: + return resp + decoded = self._decode(resp) + for t in decoded["results"]: + yield deserializer(t) + if "next_url" in decoded: + path = decoded["next_url"].replace(self.BASE, '') + params = {} + else: + return diff --git a/polygon/rest/client.py b/polygon/rest/client.py deleted file mode 100644 index 3b05fd75..00000000 --- a/polygon/rest/client.py +++ /dev/null @@ -1,253 +0,0 @@ -from typing import Dict, Type - -import requests - -from polygon.rest import models -from polygon.rest.models import unmarshal - - -class RESTClient: - """ This is a custom generated class """ - DEFAULT_HOST = "api.polygon.io" - - def __init__(self, auth_key: str, timeout: int=None): - self.auth_key = auth_key - self.url = "https://" + self.DEFAULT_HOST - - self._session = requests.Session() - self._session.params["apiKey"] = self.auth_key - self.timeout = timeout - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def close(self): - self._session.close() - - def _handle_response(self, response_type: str, endpoint: str, params: Dict[str, str]) -> Type[models.AnyDefinition]: - resp: requests.Response = self._session.get(endpoint, params=params, timeout=self.timeout) - if resp.status_code == 200: - return unmarshal.unmarshal_json(response_type, resp.json()) - else: - resp.raise_for_status() - - def reference_tickers(self, **query_params) -> models.ReferenceTickersApiResponse: - endpoint = f"{self.url}/v2/reference/tickers" - return self._handle_response("ReferenceTickersApiResponse", endpoint, query_params) - - def reference_tickers_v3(self, next_url=None, **query_params) -> models.ReferenceTickersV3ApiResponse: - endpoint = f"{self.url}/v3/reference/tickers" if not next_url else next_url - return self._handle_response("ReferenceTickersV3ApiResponse", endpoint, query_params) - - def reference_ticker_types(self, **query_params) -> models.ReferenceTickerTypesApiResponse: - endpoint = f"{self.url}/v2/reference/types" - return self._handle_response("ReferenceTickerTypesApiResponse", endpoint, query_params) - - def reference_ticker_details(self, symbol, **query_params) -> models.ReferenceTickerDetailsApiResponse: - endpoint = f"{self.url}/v1/meta/symbols/{symbol}/company" - return self._handle_response("ReferenceTickerDetailsApiResponse", endpoint, query_params) - - def reference_ticker_details_vx(self, symbol, **query_params) -> models.ReferenceTickerDetailsV3ApiResponse: - endpoint = f"{self.url}/vX/reference/tickers/{symbol}" - return self._handle_response("ReferenceTickerDetailsV3ApiResponse", endpoint, query_params) - - def reference_ticker_news(self, symbol, **query_params) -> models.ReferenceTickerNewsApiResponse: - endpoint = f"{self.url}/v1/meta/symbols/{symbol}/news" - return self._handle_response("ReferenceTickerNewsApiResponse", endpoint, query_params) - - def reference_ticker_news_v2(self, **query_params) -> models.ReferenceTickerNewsV2ApiResponse: - endpoint = f"{self.url}/v2/reference/news" - return self._handle_response("ReferenceTickerNewsV2ApiResponse", endpoint, query_params) - - def reference_markets(self, **query_params) -> models.ReferenceMarketsApiResponse: - endpoint = f"{self.url}/v2/reference/markets" - return self._handle_response("ReferenceMarketsApiResponse", endpoint, query_params) - - def reference_locales(self, **query_params) -> models.ReferenceLocalesApiResponse: - endpoint = f"{self.url}/v2/reference/locales" - return self._handle_response("ReferenceLocalesApiResponse", endpoint, query_params) - - def reference_stock_splits(self, symbol, **query_params) -> models.ReferenceStockSplitsApiResponse: - endpoint = f"{self.url}/v2/reference/splits/{symbol}" - return self._handle_response("ReferenceStockSplitsApiResponse", endpoint, query_params) - - def reference_stock_dividends(self, symbol, **query_params) -> models.ReferenceStockDividendsApiResponse: - endpoint = f"{self.url}/v2/reference/dividends/{symbol}" - return self._handle_response("ReferenceStockDividendsApiResponse", endpoint, query_params) - - def reference_stock_financials(self, symbol, **query_params) -> models.ReferenceStockFinancialsApiResponse: - endpoint = f"{self.url}/v2/reference/financials/{symbol}" - return self._handle_response("ReferenceStockFinancialsApiResponse", endpoint, query_params) - - def reference_market_status(self, **query_params) -> models.ReferenceMarketStatusApiResponse: - endpoint = f"{self.url}/v1/marketstatus/now" - return self._handle_response("ReferenceMarketStatusApiResponse", endpoint, query_params) - - def reference_market_holidays(self, **query_params) -> models.ReferenceMarketHolidaysApiResponse: - endpoint = f"{self.url}/v1/marketstatus/upcoming" - return self._handle_response("ReferenceMarketHolidaysApiResponse", endpoint, query_params) - - def stocks_equities_exchanges(self, **query_params) -> models.StocksEquitiesExchangesApiResponse: - endpoint = f"{self.url}/v1/meta/exchanges" - return self._handle_response("StocksEquitiesExchangesApiResponse", endpoint, query_params) - - def stocks_equities_historic_trades(self, symbol, date, - **query_params) -> models.StocksEquitiesHistoricTradesApiResponse: - endpoint = f"{self.url}/v1/historic/trades/{symbol}/{date}" - return self._handle_response("StocksEquitiesHistoricTradesApiResponse", endpoint, query_params) - - def historic_trades_v2(self, ticker, date, **query_params) -> models.HistoricTradesV2ApiResponse: - endpoint = f"{self.url}/v2/ticks/stocks/trades/{ticker}/{date}" - return self._handle_response("HistoricTradesV2ApiResponse", endpoint, query_params) - - def stocks_equities_historic_quotes(self, symbol, date, - **query_params) -> models.StocksEquitiesHistoricQuotesApiResponse: - endpoint = f"{self.url}/v1/historic/quotes/{symbol}/{date}" - return self._handle_response("StocksEquitiesHistoricQuotesApiResponse", endpoint, query_params) - - def historic_n___bbo_quotes_v2(self, ticker, date, **query_params) -> models.HistoricNBboQuotesV2ApiResponse: - endpoint = f"{self.url}/v2/ticks/stocks/nbbo/{ticker}/{date}" - return self._handle_response("HistoricNBboQuotesV2ApiResponse", endpoint, query_params) - - def stocks_equities_last_trade_for_a_symbol(self, symbol, - **query_params) -> models.StocksEquitiesLastTradeForASymbolApiResponse: - endpoint = f"{self.url}/v1/last/stocks/{symbol}" - return self._handle_response("StocksEquitiesLastTradeForASymbolApiResponse", endpoint, query_params) - - def stocks_equities_last_quote_for_a_symbol(self, symbol, - **query_params) -> models.StocksEquitiesLastQuoteForASymbolApiResponse: - endpoint = f"{self.url}/v1/last_quote/stocks/{symbol}" - return self._handle_response("StocksEquitiesLastQuoteForASymbolApiResponse", endpoint, query_params) - - def stocks_equities_daily_open_close(self, symbol, date, - **query_params) -> models.StocksEquitiesDailyOpenCloseApiResponse: - endpoint = f"{self.url}/v1/open-close/{symbol}/{date}" - return self._handle_response("StocksEquitiesDailyOpenCloseApiResponse", endpoint, query_params) - - def stocks_equities_condition_mappings(self, ticktype, - **query_params) -> models.StocksEquitiesConditionMappingsApiResponse: - endpoint = f"{self.url}/v1/meta/conditions/{ticktype}" - return self._handle_response("StocksEquitiesConditionMappingsApiResponse", endpoint, query_params) - - def stocks_equities_snapshot_all_tickers(self, - **query_params) -> models.StocksEquitiesSnapshotAllTickersApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/us/markets/stocks/tickers" - return self._handle_response("StocksEquitiesSnapshotAllTickersApiResponse", endpoint, query_params) - - def stocks_equities_snapshot_single_ticker(self, ticker, - **query_params) -> models.StocksEquitiesSnapshotSingleTickerApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/us/markets/stocks/tickers/{ticker}" - return self._handle_response("StocksEquitiesSnapshotSingleTickerApiResponse", endpoint, query_params) - - def stocks_equities_snapshot_gainers_losers(self, direction, - **query_params) -> models.StocksEquitiesSnapshotGainersLosersApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/us/markets/stocks/{direction}" - return self._handle_response("StocksEquitiesSnapshotGainersLosersApiResponse", endpoint, query_params) - - def stocks_equities_previous_close(self, ticker, **query_params) -> models.StocksEquitiesPreviousCloseApiResponse: - endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/prev" - return self._handle_response("StocksEquitiesPreviousCloseApiResponse", endpoint, query_params) - - def stocks_equities_aggregates(self, ticker, multiplier, timespan, from_, to, - **query_params) -> models.StocksEquitiesAggregatesApiResponse: - endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" - return self._handle_response("StocksEquitiesAggregatesApiResponse", endpoint, query_params) - - def stocks_equities_grouped_daily(self, locale, market, date, - **query_params) -> models.StocksEquitiesGroupedDailyApiResponse: - endpoint = f"{self.url}/v2/aggs/grouped/locale/{locale}/market/{market}/{date}" - return self._handle_response("StocksEquitiesGroupedDailyApiResponse", endpoint, query_params) - - def forex_currencies_historic_forex_ticks(self, from_, to, date, - **query_params) -> models.ForexCurrenciesHistoricForexTicksApiResponse: - endpoint = f"{self.url}/v1/historic/forex/{from_}/{to}/{date}" - return self._handle_response("ForexCurrenciesHistoricForexTicksApiResponse", endpoint, query_params) - - def forex_currencies_real_time_currency_conversion(self, from_, to, - **query_params) -> models.ForexCurrenciesRealTimeCurrencyConversionApiResponse: - endpoint = f"{self.url}/v1/conversion/{from_}/{to}" - return self._handle_response("ForexCurrenciesRealTimeCurrencyConversionApiResponse", endpoint, query_params) - - def forex_currencies_last_quote_for_a_currency_pair(self, from_, to, - **query_params) -> models.ForexCurrenciesLastQuoteForACurrencyPairApiResponse: - endpoint = f"{self.url}/v1/last_quote/currencies/{from_}/{to}" - return self._handle_response("ForexCurrenciesLastQuoteForACurrencyPairApiResponse", endpoint, query_params) - - def forex_currencies_grouped_daily(self, date, **query_params) -> models.ForexCurrenciesGroupedDailyApiResponse: - endpoint = f"{self.url}/v2/aggs/grouped/locale/global/market/fx/{date}" - return self._handle_response("ForexCurrenciesGroupedDailyApiResponse", endpoint, query_params) - - def forex_currencies_previous_close(self, ticker, **query_params) -> models.ForexCurrenciesGroupedDailyApiResponse: - endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/prev" - return self._handle_response("ForexCurrenciesPreviousCloseApiResponse", endpoint, query_params) - - def forex_currencies_snapshot_all_tickers(self, - **query_params) -> models.ForexCurrenciesSnapshotAllTickersApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/global/markets/forex/tickers" - return self._handle_response("ForexCurrenciesSnapshotAllTickersApiResponse", endpoint, query_params) - - def forex_currencies_snapshot_single_ticker(self, ticker, **query_params) -> models.ForexCurrenciesSnapshotSingleTickerApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" - return self._handle_response("ForexCurrenciesSnapshotSingleTickerApiResponse", endpoint, query_params) - - def forex_currencies_snapshot_gainers_losers(self, direction, - **query_params) -> models.ForexCurrenciesSnapshotGainersLosersApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/global/markets/forex/{direction}" - return self._handle_response("ForexCurrenciesSnapshotGainersLosersApiResponse", endpoint, query_params) - - def forex_currencies_aggregates(self, ticker, multiplier, timespan, from_, to, - **query_params) -> models.CurrenciesAggregatesApiResponse: - endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" - return self._handle_response("CurrenciesAggregatesApiResponse", endpoint, query_params) - - def crypto_crypto_exchanges(self, **query_params) -> models.CryptoCryptoExchangesApiResponse: - endpoint = f"{self.url}/v1/meta/crypto-exchanges" - return self._handle_response("CryptoCryptoExchangesApiResponse", endpoint, query_params) - - def crypto_last_trade_for_a_crypto_pair(self, from_, to, - **query_params) -> models.CryptoLastTradeForACryptoPairApiResponse: - endpoint = f"{self.url}/v1/last/crypto/{from_}/{to}" - return self._handle_response("CryptoLastTradeForACryptoPairApiResponse", endpoint, query_params) - - def crypto_daily_open_close(self, from_, to, date, **query_params) -> models.CryptoDailyOpenCloseApiResponse: - endpoint = f"{self.url}/v1/open-close/crypto/{from_}/{to}/{date}" - return self._handle_response("CryptoDailyOpenCloseApiResponse", endpoint, query_params) - - def crypto_aggregates(self, ticker, multiplier, timespan, from_, to, - **query_params) -> models.CurrenciesAggregatesApiResponse: - endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" - return self._handle_response("CurrenciesAggregatesApiResponse", endpoint, query_params) - - def crypto_historic_crypto_trades(self, from_, to, date, - **query_params) -> models.CryptoHistoricCryptoTradesApiResponse: - endpoint = f"{self.url}/v1/historic/crypto/{from_}/{to}/{date}" - return self._handle_response("CryptoHistoricCryptoTradesApiResponse", endpoint, query_params) - - def crypto_grouped_daily(self, date, **query_params) -> models.CryptoGroupedDailyApiResponse: - endpoint = f"{self.url}/v2/aggs/grouped/locale/global/market/crypto/{date}" - return self._handle_response("CryptoGroupedDailyApiResponse", endpoint, query_params) - - def crypto_previous_close(self, ticker, **query_params) -> models.CryptoPreviousCloseApiResponse: - endpoint = f"{self.url}/v2/aggs/ticker/{ticker}/prev" - return self._handle_response("CryptoPreviousCloseApiResponse", endpoint, query_params) - - def crypto_snapshot_all_tickers(self, **query_params) -> models.CryptoSnapshotAllTickersApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/tickers" - return self._handle_response("CryptoSnapshotAllTickersApiResponse", endpoint, query_params) - - def crypto_snapshot_single_ticker(self, ticker, **query_params) -> models.CryptoSnapshotSingleTickerApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}" - return self._handle_response("CryptoSnapshotSingleTickerApiResponse", endpoint, query_params) - - def crypto_snapshot_single_ticker_full_book(self, ticker, - **query_params) -> models.CryptoSnapshotSingleTickerFullBookApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" - return self._handle_response("CryptoSnapshotSingleTickerFullBookApiResponse", endpoint, query_params) - - def crypto_snapshot_gainers_losers(self, direction, - **query_params) -> models.CryptoSnapshotGainersLosersApiResponse: - endpoint = f"{self.url}/v2/snapshot/locale/global/markets/crypto/{direction}" - return self._handle_response("CryptoSnapshotGainersLosersApiResponse", endpoint, query_params) diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 8afea378..a912d6cc 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -1,223 +1,12 @@ -from .definitions import LastTrade -from .definitions import LastQuote -from .definitions import HistTrade -from .definitions import Quote -from .definitions import Aggregate -from .definitions import Company -from .definitions import CompanyV3 -from .definitions import Address -from .definitions import Symbol -from .definitions import SymbolV3 -from .definitions import Dividend -from .definitions import News -from .definitions import NewsV2 -from .definitions import Publisher -from .definitions import Earning -from .definitions import Financial -from .definitions import Exchange -from .definitions import Error -from .definitions import NotFound -from .definitions import Conflict -from .definitions import Unauthorized -from .definitions import MarketStatus -from .definitions import MarketHoliday -from .definitions import AnalystRatings -from .definitions import RatingSection -from .definitions import CryptoTick -from .definitions import CryptoTickJson -from .definitions import CryptoExchange -from .definitions import CryptoSnapshotTicker -from .definitions import CryptoSnapshotBookItem -from .definitions import CryptoSnapshotTickerBook -from .definitions import CryptoSnapshotAgg -from .definitions import Forex -from .definitions import LastForexTrade -from .definitions import LastForexQuote -from .definitions import ForexAggregate -from .definitions import ForexSnapshotTicker -from .definitions import ForexSnapshotAgg -from .definitions import Ticker -from .definitions import Split -from .definitions import Financials -from .definitions import Trade -from .definitions import StocksSnapshotTicker -from .definitions import StocksSnapshotBookItem -from .definitions import StocksSnapshotTickerBook -from .definitions import StocksV2Trade -from .definitions import StocksV2NBBO -from .definitions import StocksSnapshotAgg -from .definitions import StocksSnapshotQuote -from .definitions import Aggv2 -from .definitions import AggResponse -from .definitions import ReferenceTickersApiResponse -from .definitions import ReferenceTickersV3ApiResponse -from .definitions import ReferenceTickerTypesApiResponse -from .definitions import ReferenceTickerDetailsApiResponse -from .definitions import ReferenceTickerDetailsV3ApiResponse -from .definitions import ReferenceTickerNewsApiResponse -from .definitions import ReferenceTickerNewsV2ApiResponse -from .definitions import ReferenceMarketsApiResponse -from .definitions import ReferenceLocalesApiResponse -from .definitions import ReferenceStockSplitsApiResponse -from .definitions import ReferenceStockDividendsApiResponse -from .definitions import ReferenceStockFinancialsApiResponse -from .definitions import ReferenceMarketStatusApiResponse -from .definitions import ReferenceMarketHolidaysApiResponse -from .definitions import StocksEquitiesExchangesApiResponse -from .definitions import StocksEquitiesHistoricTradesApiResponse -from .definitions import HistoricTradesV2ApiResponse -from .definitions import StocksEquitiesHistoricQuotesApiResponse -from .definitions import HistoricNBboQuotesV2ApiResponse -from .definitions import StocksEquitiesLastTradeForASymbolApiResponse -from .definitions import StocksEquitiesLastQuoteForASymbolApiResponse -from .definitions import StocksEquitiesDailyOpenCloseApiResponse -from .definitions import StocksEquitiesConditionMappingsApiResponse -from .definitions import StocksEquitiesSnapshotAllTickersApiResponse -from .definitions import StocksEquitiesSnapshotSingleTickerApiResponse -from .definitions import StocksEquitiesSnapshotGainersLosersApiResponse -from .definitions import StocksEquitiesPreviousCloseApiResponse -from .definitions import StocksEquitiesAggregatesApiResponse -from .definitions import StocksEquitiesGroupedDailyApiResponse -from .definitions import ForexCurrenciesHistoricForexTicksApiResponse -from .definitions import ForexCurrenciesRealTimeCurrencyConversionApiResponse -from .definitions import ForexCurrenciesLastQuoteForACurrencyPairApiResponse -from. definitions import ForexCurrenciesGroupedDailyApiResponse -from .definitions import ForexCurrenciesPreviousCloseApiResponse -from .definitions import ForexCurrenciesSnapshotAllTickersApiResponse -from .definitions import ForexCurrenciesSnapshotSingleTickerApiResponse -from .definitions import ForexCurrenciesSnapshotGainersLosersApiResponse -from .definitions import CryptoCryptoExchangesApiResponse -from .definitions import CryptoLastTradeForACryptoPairApiResponse -from .definitions import CryptoDailyOpenCloseApiResponse -from .definitions import CryptoHistoricCryptoTradesApiResponse -from .definitions import CryptoGroupedDailyApiResponse -from .definitions import CryptoPreviousCloseApiResponse -from .definitions import CryptoSnapshotAllTickersApiResponse -from .definitions import CryptoSnapshotSingleTickerApiResponse -from .definitions import CryptoSnapshotSingleTickerFullBookApiResponse -from .definitions import CryptoSnapshotGainersLosersApiResponse -from .definitions import CurrenciesAggregatesApiResponse -from .definitions import StockSymbol -from .definitions import ConditionTypeMap -from .definitions import SymbolTypeMap -from .definitions import TickerSymbol +from .aggs import * +from .trades import * +from enum import Enum +class Sort(Enum): + ASC = 'asc' + DESC = 'desc' -import typing +class Order(Enum): + ASC = 'asc' + DESC = 'desc' -from .definitions import Definition - - -AnyDefinition = typing.TypeVar("AnyDefinition", bound=Definition) - -# noinspection SpellCheckingInspection -name_to_class: typing.Dict[str, typing.Callable[[], typing.Type[AnyDefinition]]] = { - "LastTrade": LastTrade, - "LastQuote": LastQuote, - "HistTrade": HistTrade, - "Quote": Quote, - "Aggregate": Aggregate, - "Company": Company, - "CompanyV3": CompanyV3, - "Address": Address, - "Symbol": Symbol, - "Dividend": Dividend, - "News": News, - "NewsV2": NewsV2, - "Publisher": Publisher, - "Earning": Earning, - "Financial": Financial, - "Exchange": Exchange, - "Error": Error, - "NotFound": NotFound, - "Conflict": Conflict, - "Unauthorized": Unauthorized, - "MarketStatus": MarketStatus, - "MarketHoliday": MarketHoliday, - "AnalystRatings": AnalystRatings, - "RatingSection": RatingSection, - "CryptoTick": CryptoTick, - "CryptoTickJson": CryptoTickJson, - "CryptoExchange": CryptoExchange, - "CryptoSnapshotTicker": CryptoSnapshotTicker, - "CryptoSnapshotBookItem": CryptoSnapshotBookItem, - "CryptoSnapshotTickerBook": CryptoSnapshotTickerBook, - "CryptoSnapshotAgg": CryptoSnapshotAgg, - "Forex": Forex, - "LastForexTrade": LastForexTrade, - "LastForexQuote": LastForexQuote, - "ForexAggregate": ForexAggregate, - "ForexSnapshotTicker": ForexSnapshotTicker, - "ForexSnapshotAgg": ForexSnapshotAgg, - "Ticker": Ticker, - "Split": Split, - "Financials": Financials, - "Trade": Trade, - "StocksSnapshotTicker": StocksSnapshotTicker, - "StocksSnapshotBookItem": StocksSnapshotBookItem, - "StocksSnapshotTickerBook": StocksSnapshotTickerBook, - "StocksV2Trade": StocksV2Trade, - "StocksV2NBBO": StocksV2NBBO, - "StocksSnapshotAgg": StocksSnapshotAgg, - "StocksSnapshotQuote": StocksSnapshotQuote, - "Aggv2": Aggv2, - "AggResponse": AggResponse, - "ReferenceTickersApiResponse": ReferenceTickersApiResponse, - "ReferenceTickersV3ApiResponse": ReferenceTickersV3ApiResponse, - "ReferenceTickerTypesApiResponse": ReferenceTickerTypesApiResponse, - "ReferenceTickerDetailsApiResponse": ReferenceTickerDetailsApiResponse, - "ReferenceTickerDetailsV3ApiResponse": ReferenceTickerDetailsV3ApiResponse, - "ReferenceTickerNewsApiResponse": ReferenceTickerNewsApiResponse, - "ReferenceTickerNewsV2ApiResponse": ReferenceTickerNewsV2ApiResponse, - "ReferenceMarketsApiResponse": ReferenceMarketsApiResponse, - "ReferenceLocalesApiResponse": ReferenceLocalesApiResponse, - "ReferenceStockSplitsApiResponse": ReferenceStockSplitsApiResponse, - "ReferenceStockDividendsApiResponse": ReferenceStockDividendsApiResponse, - "ReferenceStockFinancialsApiResponse": ReferenceStockFinancialsApiResponse, - "ReferenceMarketStatusApiResponse": ReferenceMarketStatusApiResponse, - "ReferenceMarketHolidaysApiResponse": ReferenceMarketHolidaysApiResponse, - "StocksEquitiesExchangesApiResponse": StocksEquitiesExchangesApiResponse, - "StocksEquitiesHistoricTradesApiResponse": StocksEquitiesHistoricTradesApiResponse, - "HistoricTradesV2ApiResponse": HistoricTradesV2ApiResponse, - "StocksEquitiesHistoricQuotesApiResponse": StocksEquitiesHistoricQuotesApiResponse, - "HistoricNBboQuotesV2ApiResponse": HistoricNBboQuotesV2ApiResponse, - "StocksEquitiesLastTradeForASymbolApiResponse": StocksEquitiesLastTradeForASymbolApiResponse, - "StocksEquitiesLastQuoteForASymbolApiResponse": StocksEquitiesLastQuoteForASymbolApiResponse, - "StocksEquitiesDailyOpenCloseApiResponse": StocksEquitiesDailyOpenCloseApiResponse, - "StocksEquitiesConditionMappingsApiResponse": StocksEquitiesConditionMappingsApiResponse, - "StocksEquitiesSnapshotAllTickersApiResponse": StocksEquitiesSnapshotAllTickersApiResponse, - "StocksEquitiesSnapshotSingleTickerApiResponse": StocksEquitiesSnapshotSingleTickerApiResponse, - "StocksEquitiesSnapshotGainersLosersApiResponse": StocksEquitiesSnapshotGainersLosersApiResponse, - "StocksEquitiesPreviousCloseApiResponse": StocksEquitiesPreviousCloseApiResponse, - "StocksEquitiesAggregatesApiResponse": StocksEquitiesAggregatesApiResponse, - "StocksEquitiesGroupedDailyApiResponse": StocksEquitiesGroupedDailyApiResponse, - "ForexCurrenciesHistoricForexTicksApiResponse": ForexCurrenciesHistoricForexTicksApiResponse, - "ForexCurrenciesRealTimeCurrencyConversionApiResponse": ForexCurrenciesRealTimeCurrencyConversionApiResponse, - "ForexCurrenciesLastQuoteForACurrencyPairApiResponse": ForexCurrenciesLastQuoteForACurrencyPairApiResponse, - "ForexCurrenciesGroupedDailyApiResponse": ForexCurrenciesGroupedDailyApiResponse, - "ForexCurrenciesPreviousCloseApiResponse": ForexCurrenciesPreviousCloseApiResponse, - "ForexCurrenciesSnapshotAllTickersApiResponse": ForexCurrenciesSnapshotAllTickersApiResponse, - "ForexCurrenciesSnapshotSingleTickerApiResponse": ForexCurrenciesSnapshotSingleTickerApiResponse, - "ForexCurrenciesSnapshotGainersLosersApiResponse": ForexCurrenciesSnapshotGainersLosersApiResponse, - "CryptoCryptoExchangesApiResponse": CryptoCryptoExchangesApiResponse, - "CryptoLastTradeForACryptoPairApiResponse": CryptoLastTradeForACryptoPairApiResponse, - "CryptoDailyOpenCloseApiResponse": CryptoDailyOpenCloseApiResponse, - "CryptoHistoricCryptoTradesApiResponse": CryptoHistoricCryptoTradesApiResponse, - "CryptoGroupedDailyApiResponse": CryptoGroupedDailyApiResponse, - "CryptoPreviousCloseApiResponse": CryptoPreviousCloseApiResponse, - "CryptoSnapshotAllTickersApiResponse": CryptoSnapshotAllTickersApiResponse, - "CryptoSnapshotSingleTickerApiResponse": CryptoSnapshotSingleTickerApiResponse, - "CryptoSnapshotSingleTickerFullBookApiResponse": CryptoSnapshotSingleTickerFullBookApiResponse, - "CryptoSnapshotGainersLosersApiResponse": CryptoSnapshotGainersLosersApiResponse, - "CurrenciesAggregatesApiResponse": CurrenciesAggregatesApiResponse, - -} - -# noinspection SpellCheckingInspection -name_to_type = { - "StockSymbol": StockSymbol, - "ConditionTypeMap": ConditionTypeMap, - "SymbolTypeMap": SymbolTypeMap, - "TickerSymbol": TickerSymbol, - -} \ No newline at end of file diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py new file mode 100644 index 00000000..b303c21d --- /dev/null +++ b/polygon/rest/models/aggs.py @@ -0,0 +1,26 @@ +from dataclasses import dataclass + +@dataclass +class Agg: + open: float + high: float + low: float + close: float + volume: float + vwap: float + timestamp: int + transactions: int + + @staticmethod + def from_dict(d): + return Agg( + d['o'], + d['h'], + d['l'], + d['c'], + d['v'], + d['vw'], + d['t'], + d['n'] + ) + diff --git a/polygon/rest/models/definitions.py b/polygon/rest/models/definitions.py deleted file mode 100644 index c05b7cde..00000000 --- a/polygon/rest/models/definitions.py +++ /dev/null @@ -1,4180 +0,0 @@ -import keyword -from typing import List, Dict, Any - -from polygon.rest import models - - -class Definition: - _swagger_name_to_python: Dict[str, str] - _attribute_is_primitive: Dict[str, bool] - _attributes_to_types: Dict[str, Any] - - def unmarshal_json(self, input_json): - if isinstance(input_json, list): - list_attribute_name = list(self._swagger_name_to_python.values())[0] - if list_attribute_name in self._attributes_to_types: - list_type = self._attributes_to_types[list_attribute_name] - known_type = list_type.split("[")[1][:-1] - list_items = self._unmarshal_json_list(input_json, known_type) - else: - list_items = input_json - self.__setattr__(list_attribute_name, list_items) - return self - elif isinstance(input_json, dict): - self._unmarshal_json_object(input_json) - return self - elif isinstance(input_json, float) or isinstance(input_json, int): - return input_json - - @staticmethod - def _unmarshal_json_list(input_json, known_type): - items = [] - for item in input_json: - new_item = models.name_to_class[known_type]() - items.append(new_item._unmarshal_json_object(item)) - - return items - - def _unmarshal_json_object(self, input_json): - for key, value in input_json.items(): - if key in self._swagger_name_to_python: - attribute_name = self._swagger_name_to_python[key] - if not self._attribute_is_primitive[attribute_name]: - if attribute_name in self._attributes_to_types: - attribute_type = self._attributes_to_types[attribute_name] - if attribute_type in models.name_to_class: - model = models.name_to_class[attribute_type]() - value = model.unmarshal_json(input_json[key]) - else: - attribute_name = key + ('_' if keyword.iskeyword(key) else '') - - self.__setattr__(attribute_name, value) - return self - - -# noinspection SpellCheckingInspection -class LastTrade(Definition): - _swagger_name_to_python = { - "price": "price", - "size": "size", - "exchange": "exchange", - "cond1": "cond1", - "cond2": "cond2", - "cond3": "cond3", - "cond4": "cond4", - "timestamp": "timestamp", - - } - - _attribute_is_primitive = { - "price": True, - "size": True, - "exchange": True, - "cond1": True, - "cond2": True, - "cond3": True, - "cond4": True, - "timestamp": True, - - } - - _attributes_to_types = { - "price": "int", - "size": "int", - "exchange": "int", - "cond1": "int", - "cond2": "int", - "cond3": "int", - "cond4": "int", - "timestamp": "int", - - } - - def __init__(self): - self.price: int - self.size: int - self.exchange: int - self.cond1: int - self.cond2: int - self.cond3: int - self.cond4: int - self.timestamp: int - - -# noinspection SpellCheckingInspection -class LastQuote(Definition): - _swagger_name_to_python = { - "askprice": "askprice", - "asksize": "asksize", - "askexchange": "askexchange", - "bidprice": "bidprice", - "bidsize": "bidsize", - "bidexchange": "bidexchange", - "timestamp": "timestamp", - - } - - _attribute_is_primitive = { - "askprice": True, - "asksize": True, - "askexchange": True, - "bidprice": True, - "bidsize": True, - "bidexchange": True, - "timestamp": True, - - } - - _attributes_to_types = { - "askprice": "int", - "asksize": "int", - "askexchange": "int", - "bidprice": "int", - "bidsize": "int", - "bidexchange": "int", - "timestamp": "int", - - } - - def __init__(self): - self.askprice: int - self.asksize: int - self.askexchange: int - self.bidprice: int - self.bidsize: int - self.bidexchange: int - self.timestamp: int - - -# noinspection SpellCheckingInspection -class HistTrade(Definition): - _swagger_name_to_python = { - "condition1": "condition1", - "condition2": "condition2", - "condition3": "condition3", - "condition4": "condition4", - "exchange": "exchange", - "price": "price", - "size": "size", - "timestamp": "timestamp", - - } - - _attribute_is_primitive = { - "condition1": True, - "condition2": True, - "condition3": True, - "condition4": True, - "exchange": True, - "price": True, - "size": True, - "timestamp": True, - - } - - _attributes_to_types = { - "condition1": "int", - "condition2": "int", - "condition3": "int", - "condition4": "int", - "exchange": "str", - "price": "int", - "size": "int", - "timestamp": "str", - - } - - def __init__(self): - self.condition1: int - self.condition2: int - self.condition3: int - self.condition4: int - self.exchange: str - self.price: int - self.size: int - self.timestamp: str - - -# noinspection SpellCheckingInspection -class Quote(Definition): - _swagger_name_to_python = { - "c": "condition_of_this_quote", - "bE": "bid_exchange", - "aE": "ask_exchange", - "aP": "ask_price", - "bP": "bid_price", - "bS": "bid_size", - "aS": "ask_size", - "t": "timestamp_of_this_trade", - - } - - _attribute_is_primitive = { - "condition_of_this_quote": True, - "bid_exchange": True, - "ask_exchange": True, - "ask_price": True, - "bid_price": True, - "bid_size": True, - "ask_size": True, - "timestamp_of_this_trade": True, - - } - - _attributes_to_types = { - "condition_of_this_quote": "int", - "bid_exchange": "str", - "ask_exchange": "str", - "ask_price": "int", - "bid_price": "int", - "bid_size": "int", - "ask_size": "int", - "timestamp_of_this_trade": "int", - - } - - def __init__(self): - self.condition_of_this_quote: int - self.bid_exchange: str - self.ask_exchange: str - self.ask_price: int - self.bid_price: int - self.bid_size: int - self.ask_size: int - self.timestamp_of_this_trade: int - - -# noinspection SpellCheckingInspection -class Aggregate(Definition): - _swagger_name_to_python = { - "o": "open_price", - "c": "close_price", - "l": "low_price", - "h": "high_price", - "v": "total_volume_of_all_trades", - "k": "transactions", - "t": "timestamp_of_this_aggregation", - - } - - _attribute_is_primitive = { - "open_price": True, - "close_price": True, - "low_price": True, - "high_price": True, - "total_volume_of_all_trades": True, - "transactions": True, - "timestamp_of_this_aggregation": True, - - } - - _attributes_to_types = { - "open_price": "int", - "close_price": "int", - "low_price": "int", - "high_price": "int", - "total_volume_of_all_trades": "int", - "transactions": "int", - "timestamp_of_this_aggregation": "int", - - } - - def __init__(self): - self.open_price: int - self.close_price: int - self.low_price: int - self.high_price: int - self.total_volume_of_all_trades: int - self.transactions: int - self.timestamp_of_this_aggregation: int - - -# noinspection SpellCheckingInspection -class Company(Definition): - _swagger_name_to_python = { - "logo": "logo", - "exchange": "exchange", - "name": "name", - "symbol": "symbol", - "listdate": "listdate", - "cik": "cik", - "bloomberg": "bloomberg", - "figi": "figi", - "lei": "lei", - "sic": "sic", - "country": "country", - "industry": "industry", - "sector": "sector", - "marketcap": "marketcap", - "employees": "employees", - "phone": "phone", - "ceo": "ceo", - "url": "url", - "description": "description", - "similar": "similar", - "tags": "tags", - "updated": "updated", - - } - - _attribute_is_primitive = { - "logo": True, - "exchange": True, - "name": True, - "symbol": False, - "listdate": True, - "cik": True, - "bloomberg": True, - "figi": True, - "lei": True, - "sic": True, - "country": True, - "industry": True, - "sector": True, - "marketcap": True, - "employees": True, - "phone": True, - "ceo": True, - "url": True, - "description": True, - "similar": False, - "tags": False, - "updated": True, - - } - - _attributes_to_types = { - "logo": "str", - "exchange": "str", - "name": "str", - "symbol": "StockSymbol", - "listdate": "str", - "cik": "str", - "bloomberg": "str", - "figi": "str", - "lei": "str", - "sic": "float", - "country": "str", - "industry": "str", - "sector": "str", - "marketcap": "float", - "employees": "float", - "phone": "str", - "ceo": "str", - "url": "str", - "description": "str", - "similar": "List[StockSymbol]", - "tags": "List[str]", - "updated": "str", - - } - - def __init__(self): - self.logo: str - self.exchange: str - self.name: str - self.symbol: StockSymbol - self.listdate: str - self.cik: str - self.bloomberg: str - self.figi: str - self.lei: str - self.sic: float - self.country: str - self.industry: str - self.sector: str - self.marketcap: float - self.employees: float - self.phone: str - self.ceo: str - self.url: str - self.description: str - self.similar: List[StockSymbol] - self.tags: List[str] - self.updated: str - -class Address(Definition): - _swagger_name_to_python = { - "address1": "address1", - "city": "city", - "state": "state", - } - - _attributes_is_primitive = { - "address1": True, - "city": True, - "state": True, - } - - _attributes_to_types = { - "address1": "str", - "city": "str", - "state": "str", - } - - def __init__(self): - self.address1: str - self.city: str - self.state: str - - -# noinspection SpellCheckingInspection -class CompanyV3(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "name": "name", - "market": "market", - "locale": "locale", - "primary_exchange": "primary_exchange", - "type": "type", - "active": "active", - "currency_name": "currency_name", - "cik": "cik", - "composite_figi": "composite_figi", - "share_class_figi": "share_class_figi", - "last_updated_utc": "last_updated_utc", - "outstanding_shares": "outstanding_shares", - "market_cap": "market_cap", - "phone_number": "phone_number", - "address": "address", - "sic_code": "sic_code", - "sic_description": "sic_description", - } - - _attributes_is_primitive = { - "ticker": True, - "name": True, - "market": True, - "primary_exchange": True, - "type": True, - "active": True, - "currency_name": True, - "cik": True, - "composite_figi": True, - "share_class_figi": True, - "last_updated_utc": True, - "outstanding_shares": True, - "market_cap": True, - "phone_number": True, - "address": False, - "sic_code": True, - "sic_description": True, - } - - _attributes_to_types = { - "ticker": "str", - "name": "str", - "market": "str", - "primary_exchange": "str", - "type": "str", - "active": "bool", - "currency_name": "str", - "cik": "str", - "composite_figi": "str", - "share_class_figi": "str", - "last_updated_utc": "str", - "outstanding_shares": "int", - "market_cap": "int", - "phone_number": "str", - "address": "Address", - "sic_code": "str", - "sic_description": "str", - } - - def __init__(self): - self.ticker: str - self.name: str - self.market: str - self.primary_exchange: str - self.type: str - self.active: bool - self.currency_name: str - self.cik: str - self.composite_figi: str - self.share_class_figi: str - self.last_updated_utc: str - self.outstanding_shares: int - self.market_cap: int - self.phone_number: str - self.address: Address - self.sic_code: str - self.sic_description: str - -# noinspection SpellCheckingInspection -class Symbol(Definition): - _swagger_name_to_python = { - "symbol": "symbol", - "name": "name", - "type": "type", - "url": "url", - "updated": "updated", - "isOTC": "is___otc", - - } - - _attribute_is_primitive = { - "symbol": False, - "name": True, - "type": True, - "url": True, - "updated": True, - "is___otc": True, - - } - - _attributes_to_types = { - "symbol": "StockSymbol", - "name": "str", - "type": "str", - "url": "str", - "updated": "str", - "is___otc": "bool", - - } - - def __init__(self): - self.symbol: StockSymbol - self.name: str - self.type: str - self.url: str - self.updated: str - self.is___otc: bool - - -# noinspection SpellCheckingInspection -class SymbolV3(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "name": "name", - "market": "market", - "locale": "locale", - "primary_exchange": "primary_exchange", - "type": "type", - "active": "active", - "currency_name": "currency_name", - "cik": "cik", - "composite_figi": "composite_figi", - "share_class_figi": "share_class_figi", - "last_updated_utc": "last_updated_utc", - "delisted_utc": "delisted_utc", - } - - _attributes_is_primitive = { - "ticker": True, - "name": True, - "market": True, - "primary_exchange": True, - "type": True, - "active": True, - "currency_name": True, - "cik": True, - "composite_figi": True, - "share_class_figi": True, - "last_updated_utc": True, - "delisted_utc": True, - } - - _attributes_to_types = { - "ticker": "str", - "name": "str", - "market": "str", - "primary_exchange": "str", - "type": "str", - "active": "bool", - "currency_name": "str", - "cik": "str", - "composite_figi": "str", - "share_class_figi": "str", - "last_updated_utc": "str", - "delisted_utc": "str", - } - - def __init__(self): - self.ticker: str - self.name: str - self.market: str - self.primary_exchange: str - self.type: str - self.active: bool - self.currency_name: str - self.cik: str - self.composite_figi: str - self.share_class_figi: str - self.last_updated_utc: str - self.delisted_utc: str - -# noinspection SpellCheckingInspection -class Dividend(Definition): - _swagger_name_to_python = { - "symbol": "symbol", - "type": "type", - "exDate": "ex_date", - "paymentDate": "payment_date", - "recordDate": "record_date", - "declaredDate": "declared_date", - "amount": "amount", - "qualified": "qualified", - "flag": "flag", - - } - - _attribute_is_primitive = { - "symbol": False, - "type": True, - "ex_date": True, - "payment_date": True, - "record_date": True, - "declared_date": True, - "amount": True, - "qualified": True, - "flag": True, - - } - - _attributes_to_types = { - "symbol": "StockSymbol", - "type": "str", - "ex_date": "str", - "payment_date": "str", - "record_date": "str", - "declared_date": "str", - "amount": "float", - "qualified": "str", - "flag": "str", - - } - - def __init__(self): - self.symbol: StockSymbol - self.type: str - self.ex_date: str - self.payment_date: str - self.record_date: str - self.declared_date: str - self.amount: float - self.qualified: str - self.flag: str - - -# noinspection SpellCheckingInspection -class News(Definition): - _swagger_name_to_python = { - "symbols": "symbols", - "title": "title", - "url": "url", - "source": "source", - "summary": "summary", - "image": "image", - "timestamp": "timestamp", - "keywords": "keywords", - - } - - _attribute_is_primitive = { - "symbols": False, - "title": True, - "url": True, - "source": True, - "summary": True, - "image": True, - "timestamp": True, - "keywords": False, - - } - - _attributes_to_types = { - "symbols": "List[StockSymbol]", - "title": "str", - "url": "str", - "source": "str", - "summary": "str", - "image": "str", - "timestamp": "str", - "keywords": "List[str]", - - } - - def __init__(self): - self.symbols: List[StockSymbol] - self.title: str - self.url: str - self.source: str - self.summary: str - self.image: str - self.timestamp: str - self.keywords: List[str] - -class Publisher(Definition): - _swagger_name_to_python = { - "name": "name", - "logo_url": "logo_url", - "homepage_url": "homepage_url", - "favicon_url": "favicon_url", - } - - _attribute_is_primitive = { - "name": True, - "logo_url": True, - "homepage_url": True, - "favicon_url": True, - } - - _attributes_to_type = { - "name": "str", - "logo_url": "str", - "homepage_url": "str", - "favicon_url": "str", - } - - def __init__(self): - self.name: str - self.logo_url: str - self.homepage_url: str - self.favicon_url: str - - -# noinspection SpellCheckingInspection -class NewsV2(Definition): - _swagger_name_to_python = { - "id": "id", - "publisher": "publisher", - "title": "title", - "author": "author", - "published_utc": "published_utc", - "tickers": "tickers", - "amp_url": "amp_url", - "image_url": "image_url", - "description": "description", - "keywords": "keywords", - } - - _attribute_is_primitive = { - "id": True, - "publisher": False, - "title": True, - "author": True, - "published_utc": True, - "tickers": True, - "amp_url": True, - "image_url": True, - "description": True, - "keywords": True, - } - - _attributes_to_type = { - "id": "str", - "publisher": "Publisher", - "title": "str", - "author": "str", - "published_utc": "str", - "tickers": "List[str]", - "amp_url": "str", - "image_url": "str", - "description": "str", - "keywords": "str", - } - - def __init__(self): - self.id: str - self.publisher: Publisher - self.title: str - self.author: str - self.published_utc: str - self.tickers: List[str] - self.amp_url: str - self.image_url: str - self.description: str - self.keywords: str - -# noinspection SpellCheckingInspection -class Earning(Definition): - _swagger_name_to_python = { - "symbol": "symbol", - "EPSReportDate": "e___psrep_ortdate", - "EPSReportDateStr": "e___psrep_ort_datestr", - "fiscalPeriod": "fiscal_period", - "fiscalEndDate": "fiscal_en_ddate", - "actualEPS": "actual___eps", - "consensusEPS": "consensus___eps", - "estimatedEPS": "estimated___eps", - "announceTime": "announce_time", - "numberOfEstimates": "number_o_festimates", - "EPSSurpriseDollar": "e___pssurpr_isedollar", - "yearAgo": "year_ago", - "yearAgoChangePercent": "year_ag_ochan_gepercent", - "estimatedChangePercent": "estimated_chang_epercent", - - } - - _attribute_is_primitive = { - "symbol": True, - "e___psrep_ortdate": True, - "e___psrep_ort_datestr": True, - "fiscal_period": True, - "fiscal_en_ddate": True, - "actual___eps": True, - "consensus___eps": True, - "estimated___eps": True, - "announce_time": True, - "number_o_festimates": True, - "e___pssurpr_isedollar": True, - "year_ago": True, - "year_ag_ochan_gepercent": True, - "estimated_chang_epercent": True, - - } - - _attributes_to_types = { - "symbol": "str", - "e___psrep_ortdate": "str", - "e___psrep_ort_datestr": "str", - "fiscal_period": "str", - "fiscal_en_ddate": "str", - "actual___eps": "float", - "consensus___eps": "float", - "estimated___eps": "float", - "announce_time": "str", - "number_o_festimates": "float", - "e___pssurpr_isedollar": "float", - "year_ago": "float", - "year_ag_ochan_gepercent": "float", - "estimated_chang_epercent": "float", - - } - - def __init__(self): - self.symbol: str - self.e___psrep_ortdate: str - self.e___psrep_ort_datestr: str - self.fiscal_period: str - self.fiscal_en_ddate: str - self.actual___eps: float - self.consensus___eps: float - self.estimated___eps: float - self.announce_time: str - self.number_o_festimates: float - self.e___pssurpr_isedollar: float - self.year_ago: float - self.year_ag_ochan_gepercent: float - self.estimated_chang_epercent: float - - -# noinspection SpellCheckingInspection -class Financial(Definition): - _swagger_name_to_python = { - "symbol": "symbol", - "reportDate": "report_date", - "reportDateStr": "report_dat_estr", - "grossProfit": "gross_profit", - "costOfRevenue": "cost_o_frevenue", - "operatingRevenue": "operating_revenue", - "totalRevenue": "total_revenue", - "operatingIncome": "operating_income", - "netIncome": "net_income", - "researchAndDevelopment": "research_an_ddevelopment", - "operatingExpense": "operating_expense", - "currentAssets": "current_assets", - "totalAssets": "total_assets", - "totalLiabilities": "total_liabilities", - "currentCash": "current_cash", - "currentDebt": "current_debt", - "totalCash": "total_cash", - "totalDebt": "total_debt", - "shareholderEquity": "shareholder_equity", - "cashChange": "cash_change", - "cashFlow": "cash_flow", - "operatingGainsLosses": "operating_gain_slosses", - - } - - _attribute_is_primitive = { - "symbol": True, - "report_date": True, - "report_dat_estr": True, - "gross_profit": True, - "cost_o_frevenue": True, - "operating_revenue": True, - "total_revenue": True, - "operating_income": True, - "net_income": True, - "research_an_ddevelopment": True, - "operating_expense": True, - "current_assets": True, - "total_assets": True, - "total_liabilities": True, - "current_cash": True, - "current_debt": True, - "total_cash": True, - "total_debt": True, - "shareholder_equity": True, - "cash_change": True, - "cash_flow": True, - "operating_gain_slosses": True, - - } - - _attributes_to_types = { - "symbol": "str", - "report_date": "str", - "report_dat_estr": "str", - "gross_profit": "float", - "cost_o_frevenue": "float", - "operating_revenue": "float", - "total_revenue": "float", - "operating_income": "float", - "net_income": "float", - "research_an_ddevelopment": "float", - "operating_expense": "float", - "current_assets": "float", - "total_assets": "float", - "total_liabilities": "float", - "current_cash": "float", - "current_debt": "float", - "total_cash": "float", - "total_debt": "float", - "shareholder_equity": "float", - "cash_change": "float", - "cash_flow": "float", - "operating_gain_slosses": "float", - - } - - def __init__(self): - self.symbol: str - self.report_date: str - self.report_dat_estr: str - self.gross_profit: float - self.cost_o_frevenue: float - self.operating_revenue: float - self.total_revenue: float - self.operating_income: float - self.net_income: float - self.research_an_ddevelopment: float - self.operating_expense: float - self.current_assets: float - self.total_assets: float - self.total_liabilities: float - self.current_cash: float - self.current_debt: float - self.total_cash: float - self.total_debt: float - self.shareholder_equity: float - self.cash_change: float - self.cash_flow: float - self.operating_gain_slosses: float - - -# noinspection SpellCheckingInspection -class Exchange(Definition): - _swagger_name_to_python = { - "id": "i_d_of_the_exchange", - "type": "type", - "market": "market", - "mic": "mic", - "name": "name", - "tape": "tape", - - } - - _attribute_is_primitive = { - "i_d_of_the_exchange": True, - "type": True, - "market": True, - "mic": True, - "name": True, - "tape": True, - - } - - _attributes_to_types = { - "i_d_of_the_exchange": "float", - "type": "str", - "market": "str", - "mic": "str", - "name": "str", - "tape": "str", - - } - - def __init__(self): - self.i_d_of_the_exchange: float - self.type: str - self.market: str - self.mic: str - self.name: str - self.tape: str - - -# noinspection SpellCheckingInspection -class Error(Definition): - _swagger_name_to_python = { - "code": "code", - "message": "message", - "fields": "fields", - - } - - _attribute_is_primitive = { - "code": True, - "message": True, - "fields": True, - - } - - _attributes_to_types = { - "code": "int", - "message": "str", - "fields": "str", - - } - - def __init__(self): - self.code: int - self.message: str - self.fields: str - - -# noinspection SpellCheckingInspection -class NotFound(Definition): - _swagger_name_to_python = { - "message": "message", - - } - - _attribute_is_primitive = { - "message": True, - - } - - _attributes_to_types = { - "message": "str", - - } - - def __init__(self): - self.message: str - - -# noinspection SpellCheckingInspection -class Conflict(Definition): - _swagger_name_to_python = { - "message": "message", - - } - - _attribute_is_primitive = { - "message": True, - - } - - _attributes_to_types = { - "message": "str", - - } - - def __init__(self): - self.message: str - - -# noinspection SpellCheckingInspection -class Unauthorized(Definition): - _swagger_name_to_python = { - "message": "message", - - } - - _attribute_is_primitive = { - "message": True, - - } - - _attributes_to_types = { - "message": "str", - - } - - def __init__(self): - self.message: str - - -# noinspection SpellCheckingInspection -class MarketStatus(Definition): - _swagger_name_to_python = { - "market": "market", - "serverTime": "server_time", - "exchanges": "exchanges", - "currencies": "currencies", - - } - - _attribute_is_primitive = { - "market": True, - "server_time": True, - "exchanges": True, - "currencies": True, - - } - - _attributes_to_types = { - "market": "str", - "server_time": "str", - "exchanges": "Dict[str, str]", - "currencies": "Dict[str, str]", - - } - - def __init__(self): - self.market: str - self.server_time: str - self.exchanges: Dict[str, str] - self.currencies: Dict[str, str] - - -# noinspection SpellCheckingInspection -class MarketHoliday(Definition): - _swagger_name_to_python = { - "exchange": "exchange", - "name": "name", - "status": "status", - "date": "date", - "open": "open", - "close": "close", - - } - - _attribute_is_primitive = { - "exchange": True, - "name": True, - "status": True, - "date": True, - "open": True, - "close": True, - - } - - _attributes_to_types = { - "exchange": "str", - "name": "str", - "status": "str", - "date": "str", - "open": "str", - "close": "str", - - } - - def __init__(self): - self.exchange: str - self.name: str - self.status: str - self.date: str - self.open: str - self.close: str - - -# noinspection SpellCheckingInspection -class AnalystRatings(Definition): - _swagger_name_to_python = { - "symbol": "symbol", - "analysts": "analysts", - "change": "change", - "strongBuy": "strong_buy", - "buy": "buy", - "hold": "hold", - "sell": "sell", - "strongSell": "strong_sell", - "updated": "updated", - - } - - _attribute_is_primitive = { - "symbol": True, - "analysts": True, - "change": True, - "strong_buy": False, - "buy": False, - "hold": False, - "sell": False, - "strong_sell": False, - "updated": True, - - } - - _attributes_to_types = { - "symbol": "str", - "analysts": "float", - "change": "float", - "strong_buy": "RatingSection", - "buy": "RatingSection", - "hold": "RatingSection", - "sell": "RatingSection", - "strong_sell": "RatingSection", - "updated": "str", - - } - - def __init__(self): - self.symbol: str - self.analysts: float - self.change: float - self.strong_buy: RatingSection - self.buy: RatingSection - self.hold: RatingSection - self.sell: RatingSection - self.strong_sell: RatingSection - self.updated: str - - -# noinspection SpellCheckingInspection -class RatingSection(Definition): - _swagger_name_to_python = { - "current": "current", - "month1": "month1", - "month2": "month2", - "month3": "month3", - "month4": "month4", - "month5": "month5", - - } - - _attribute_is_primitive = { - "current": True, - "month1": True, - "month2": True, - "month3": True, - "month4": True, - "month5": True, - - } - - _attributes_to_types = { - "current": "float", - "month1": "float", - "month2": "float", - "month3": "float", - "month4": "float", - "month5": "float", - - } - - def __init__(self): - self.current: float - self.month1: float - self.month2: float - self.month3: float - self.month4: float - self.month5: float - - -# noinspection SpellCheckingInspection -class CryptoTick(Definition): - _swagger_name_to_python = { - "price": "price", - "size": "size", - "exchange": "exchange", - "conditions": "conditions", - "timestamp": "timestamp", - - } - - _attribute_is_primitive = { - "price": True, - "size": True, - "exchange": True, - "conditions": False, - "timestamp": True, - - } - - _attributes_to_types = { - "price": "int", - "size": "int", - "exchange": "int", - "conditions": "List[int]", - "timestamp": "int", - - } - - def __init__(self): - self.price: int - self.size: int - self.exchange: int - self.conditions: List[int] - self.timestamp: int - - -# noinspection SpellCheckingInspection -class CryptoTickJson(Definition): - _swagger_name_to_python = { - "p": "trade_price", - "s": "size_of_the_trade", - "x": "exchange_the_trade_occured_on", - "c": "c", - "t": "timestamp_of_this_trade", - - } - - _attribute_is_primitive = { - "trade_price": True, - "size_of_the_trade": True, - "exchange_the_trade_occured_on": True, - "c": False, - "timestamp_of_this_trade": True, - - } - - _attributes_to_types = { - "trade_price": "int", - "size_of_the_trade": "int", - "exchange_the_trade_occured_on": "int", - "c": "List[int]", - "timestamp_of_this_trade": "int", - - } - - def __init__(self): - self.trade_price: int - self.size_of_the_trade: int - self.exchange_the_trade_occured_on: int - self.c: List[int] - self.timestamp_of_this_trade: int - - -# noinspection SpellCheckingInspection -class CryptoExchange(Definition): - _swagger_name_to_python = { - "id": "i_d_of_the_exchange", - "type": "type", - "market": "market", - "name": "name", - "url": "url", - - } - - _attribute_is_primitive = { - "i_d_of_the_exchange": True, - "type": True, - "market": True, - "name": True, - "url": True, - - } - - _attributes_to_types = { - "i_d_of_the_exchange": "float", - "type": "str", - "market": "str", - "name": "str", - "url": "str", - - } - - def __init__(self): - self.i_d_of_the_exchange: float - self.type: str - self.market: str - self.name: str - self.url: str - - -# noinspection SpellCheckingInspection -class CryptoSnapshotTicker(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "day": "day", - "lastTrade": "last_trade", - "min": "min", - "prevDay": "prev_day", - "todaysChange": "todays_change", - "todaysChangePerc": "todays_chang_eperc", - "updated": "updated", - - } - - _attribute_is_primitive = { - "ticker": True, - "day": False, - "last_trade": False, - "min": False, - "prev_day": False, - "todays_change": True, - "todays_chang_eperc": True, - "updated": True, - - } - - _attributes_to_types = { - "ticker": "str", - "day": "CryptoSnapshotAgg", - "last_trade": "CryptoTickJson", - "min": "CryptoSnapshotAgg", - "prev_day": "CryptoSnapshotAgg", - "todays_change": "int", - "todays_chang_eperc": "int", - "updated": "int", - - } - - def __init__(self): - self.ticker: str - self.day: CryptoSnapshotAgg - self.last_trade: CryptoTickJson - self.min: CryptoSnapshotAgg - self.prev_day: CryptoSnapshotAgg - self.todays_change: int - self.todays_chang_eperc: int - self.updated: int - - -# noinspection SpellCheckingInspection -class CryptoSnapshotBookItem(Definition): - _swagger_name_to_python = { - "p": "price_of_this_book_level", - "x": "exchange_to_size_of_this_price_level", - - } - - _attribute_is_primitive = { - "price_of_this_book_level": True, - "exchange_to_size_of_this_price_level": True, - - } - - _attributes_to_types = { - "price_of_this_book_level": "int", - "exchange_to_size_of_this_price_level": "Dict[str, str]", - - } - - def __init__(self): - self.price_of_this_book_level: int - self.exchange_to_size_of_this_price_level: Dict[str, str] - - -# noinspection SpellCheckingInspection -class CryptoSnapshotTickerBook(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "bids": "bids", - "asks": "asks", - "bidCount": "bid_count", - "askCount": "ask_count", - "spread": "spread", - "updated": "updated", - - } - - _attribute_is_primitive = { - "ticker": True, - "bids": False, - "asks": False, - "bid_count": True, - "ask_count": True, - "spread": True, - "updated": True, - - } - - _attributes_to_types = { - "ticker": "str", - "bids": "List[CryptoSnapshotBookItem]", - "asks": "List[CryptoSnapshotBookItem]", - "bid_count": "int", - "ask_count": "int", - "spread": "int", - "updated": "int", - - } - - def __init__(self): - self.ticker: str - self.bids: List[CryptoSnapshotBookItem] - self.asks: List[CryptoSnapshotBookItem] - self.bid_count: int - self.ask_count: int - self.spread: int - self.updated: int - - -# noinspection SpellCheckingInspection -class CryptoSnapshotAgg(Definition): - _swagger_name_to_python = { - "c": "close_price", - "h": "high_price", - "l": "low_price", - "o": "open_price", - "v": "volume", - - } - - _attribute_is_primitive = { - "close_price": True, - "high_price": True, - "low_price": True, - "open_price": True, - "volume": True, - - } - - _attributes_to_types = { - "close_price": "int", - "high_price": "int", - "low_price": "int", - "open_price": "int", - "volume": "int", - - } - - def __init__(self): - self.close_price: int - self.high_price: int - self.low_price: int - self.open_price: int - self.volume: int - - -# noinspection SpellCheckingInspection -class Forex(Definition): - _swagger_name_to_python = { - "a": "ask_price", - "b": "bid_price", - "t": "timestamp_of_this_trade", - - } - - _attribute_is_primitive = { - "ask_price": True, - "bid_price": True, - "timestamp_of_this_trade": True, - - } - - _attributes_to_types = { - "ask_price": "int", - "bid_price": "int", - "timestamp_of_this_trade": "int", - - } - - def __init__(self): - self.ask_price: int - self.bid_price: int - self.timestamp_of_this_trade: int - - -# noinspection SpellCheckingInspection -class LastForexTrade(Definition): - _swagger_name_to_python = { - "price": "price", - "exchange": "exchange", - "timestamp": "timestamp", - - } - - _attribute_is_primitive = { - "price": True, - "exchange": True, - "timestamp": True, - - } - - _attributes_to_types = { - "price": "int", - "exchange": "int", - "timestamp": "int", - - } - - def __init__(self): - self.price: int - self.exchange: int - self.timestamp: int - - -# noinspection SpellCheckingInspection -class LastForexQuote(Definition): - _swagger_name_to_python = { - "ask": "ask", - "bid": "bid", - "exchange": "exchange", - "timestamp": "timestamp", - - } - - _attribute_is_primitive = { - "ask": True, - "bid": True, - "exchange": True, - "timestamp": True, - - } - - _attributes_to_types = { - "ask": "int", - "bid": "int", - "exchange": "int", - "timestamp": "int", - - } - - def __init__(self): - self.ask: int - self.bid: int - self.exchange: int - self.timestamp: int - - -# noinspection SpellCheckingInspection -class ForexAggregate(Definition): - _swagger_name_to_python = { - "o": "open_price", - "c": "close_price", - "l": "low_price", - "h": "high_price", - "v": "volume_of_all_trades", - "t": "timestamp_of_this_aggregation", - - } - - _attribute_is_primitive = { - "open_price": True, - "close_price": True, - "low_price": True, - "high_price": True, - "volume_of_all_trades": True, - "timestamp_of_this_aggregation": True, - - } - - _attributes_to_types = { - "open_price": "int", - "close_price": "int", - "low_price": "int", - "high_price": "int", - "volume_of_all_trades": "int", - "timestamp_of_this_aggregation": "int", - - } - - def __init__(self): - self.open_price: int - self.close_price: int - self.low_price: int - self.high_price: int - self.volume_of_all_trades: int - self.timestamp_of_this_aggregation: int - - -# noinspection SpellCheckingInspection -class ForexSnapshotTicker(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "day": "day", - "lastTrade": "last_trade", - "min": "min", - "prevDay": "prev_day", - "todaysChange": "todays_change", - "todaysChangePerc": "todays_chang_eperc", - "updated": "updated", - - } - - _attribute_is_primitive = { - "ticker": True, - "day": False, - "last_trade": False, - "min": False, - "prev_day": False, - "todays_change": True, - "todays_chang_eperc": True, - "updated": True, - - } - - _attributes_to_types = { - "ticker": "str", - "day": "ForexSnapshotAgg", - "last_trade": "Forex", - "min": "ForexSnapshotAgg", - "prev_day": "ForexSnapshotAgg", - "todays_change": "int", - "todays_chang_eperc": "int", - "updated": "int", - - } - - def __init__(self): - self.ticker: str - self.day: ForexSnapshotAgg - self.last_trade: Forex - self.min: ForexSnapshotAgg - self.prev_day: ForexSnapshotAgg - self.todays_change: int - self.todays_chang_eperc: int - self.updated: int - - -# noinspection SpellCheckingInspection -class ForexSnapshotAgg(Definition): - _swagger_name_to_python = { - "c": "close_price", - "h": "high_price", - "l": "low_price", - "o": "open_price", - "v": "volume", - - } - - _attribute_is_primitive = { - "close_price": True, - "high_price": True, - "low_price": True, - "open_price": True, - "volume": True, - - } - - _attributes_to_types = { - "close_price": "int", - "high_price": "int", - "low_price": "int", - "open_price": "int", - "volume": "int", - - } - - def __init__(self): - self.close_price: int - self.high_price: int - self.low_price: int - self.open_price: int - self.volume: int - - -# noinspection SpellCheckingInspection -class Ticker(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "name": "name", - "market": "market", - "locale": "locale", - "currency": "currency", - "active": "active", - "primaryExch": "primary_exch", - "url": "url", - "updated": "updated", - "attrs": "attrs", - "codes": "codes", - - } - - _attribute_is_primitive = { - "ticker": False, - "name": True, - "market": True, - "locale": True, - "currency": True, - "active": True, - "primary_exch": True, - "url": True, - "updated": True, - "attrs": True, - "codes": True, - - } - - _attributes_to_types = { - "ticker": "StockSymbol", - "name": "str", - "market": "str", - "locale": "str", - "currency": "str", - "active": "bool", - "primary_exch": "str", - "url": "str", - "updated": "str", - "attrs": "Dict[str, str]", - "codes": "Dict[str, str]", - - } - - def __init__(self): - self.ticker: StockSymbol - self.name: str - self.market: str - self.locale: str - self.currency: str - self.active: bool - self.primary_exch: str - self.url: str - self.updated: str - self.attrs: Dict[str, str] - self.codes: Dict[str, str] - - -# noinspection SpellCheckingInspection -class Split(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "exDate": "ex_date", - "paymentDate": "payment_date", - "recordDate": "record_date", - "declaredDate": "declared_date", - "ratio": "ratio", - "tofactor": "tofactor", - "forfactor": "forfactor", - - } - - _attribute_is_primitive = { - "ticker": False, - "ex_date": True, - "payment_date": True, - "record_date": True, - "declared_date": True, - "ratio": True, - "tofactor": True, - "forfactor": True, - - } - - _attributes_to_types = { - "ticker": "TickerSymbol", - "ex_date": "str", - "payment_date": "str", - "record_date": "str", - "declared_date": "str", - "ratio": "float", - "tofactor": "float", - "forfactor": "float", - - } - - def __init__(self): - self.ticker: TickerSymbol - self.ex_date: str - self.payment_date: str - self.record_date: str - self.declared_date: str - self.ratio: float - self.tofactor: float - self.forfactor: float - - -# noinspection SpellCheckingInspection -class Financials(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "period": "period", - "calendarDate": "calendar_date", - "reportPeriod": "report_period", - "updated": "updated", - "accumulatedOtherComprehensiveIncome": "accumulated_othe_rcomprehensi_veincome", - "assets": "assets", - "assetsAverage": "assets_average", - "assetsCurrent": "assets_current", - "assetTurnover": "asset_turnover", - "assetsNonCurrent": "assets_no_ncurrent", - "bookValuePerShare": "book_valu_ep_ershare", - "capitalExpenditure": "capital_expenditure", - "cashAndEquivalents": "cash_an_dequivalents", - "cashAndEquivalentsUSD": "cash_an_dequivalen___tsusd", - "costOfRevenue": "cost_o_frevenue", - "consolidatedIncome": "consolidated_income", - "currentRatio": "current_ratio", - "debtToEquityRatio": "debt_t_oequi_tyratio", - "debt": "debt", - "debtCurrent": "debt_current", - "debtNonCurrent": "debt_no_ncurrent", - "debtUSD": "debt___usd", - "deferredRevenue": "deferred_revenue", - "depreciationAmortizationAndAccretion": "depreciation_amortizatio_na_ndaccretion", - "deposits": "deposits", - "dividendYield": "dividend_yield", - "dividendsPerBasicCommonShare": "dividends_pe_rbas_iccom_monshare", - "earningBeforeInterestTaxes": "earning_befor_eintere_sttaxes", - "earningsBeforeInterestTaxesDepreciationAmortization": "earnings_befor_eintere_stta_xesdeprecia_tionamortization", - "EBITDAMargin": "e______bitdamargin", - "earningsBeforeInterestTaxesDepreciationAmortizationUSD": "earnings_befor_eintere_stta_xesdeprecia_tionamortiz___ationusd", - "earningBeforeInterestTaxesUSD": "earning_befor_eintere_stta___xesusd", - "earningsBeforeTax": "earnings_befor_etax", - "earningsPerBasicShare": "earnings_pe_rbas_icshare", - "earningsPerDilutedShare": "earnings_pe_rdilut_edshare", - "earningsPerBasicShareUSD": "earnings_pe_rbas_icsh___areusd", - "shareholdersEquity": "shareholders_equity", - "averageEquity": "average_equity", - "shareholdersEquityUSD": "shareholders_equit___yusd", - "enterpriseValue": "enterprise_value", - "enterpriseValueOverEBIT": "enterprise_valu_eov____erebit", - "enterpriseValueOverEBITDA": "enterprise_valu_eov______erebitda", - "freeCashFlow": "free_cas_hflow", - "freeCashFlowPerShare": "free_cas_hfl_ow_pershare", - "foreignCurrencyUSDExchangeRate": "foreign_currenc____yusdexc_hangerate", - "grossProfit": "gross_profit", - "grossMargin": "gross_margin", - "goodwillAndIntangibleAssets": "goodwill_an_dintangib_leassets", - "interestExpense": "interest_expense", - "investedCapital": "invested_capital", - "investedCapitalAverage": "invested_capita_laverage", - "inventory": "inventory", - "investments": "investments", - "investmentsCurrent": "investments_current", - "investmentsNonCurrent": "investments_no_ncurrent", - "totalLiabilities": "total_liabilities", - "currentLiabilities": "current_liabilities", - "liabilitiesNonCurrent": "liabilities_no_ncurrent", - "marketCapitalization": "market_capitalization", - "netCashFlow": "net_cas_hflow", - "netCashFlowBusinessAcquisitionsDisposals": "net_cas_hfl_owbusin_essacquisit_ionsdisposals", - "issuanceEquityShares": "issuance_equit_yshares", - "issuanceDebtSecurities": "issuance_deb_tsecurities", - "paymentDividendsOtherCashDistributions": "payment_dividend_soth_erc_ashdistributions", - "netCashFlowFromFinancing": "net_cas_hfl_owf_romfinancing", - "netCashFlowFromInvesting": "net_cas_hfl_owf_rominvesting", - "netCashFlowInvestmentAcquisitionsDisposals": "net_cas_hfl_owinvestm_entacquisit_ionsdisposals", - "netCashFlowFromOperations": "net_cas_hfl_owf_romoperations", - "effectOfExchangeRateChangesOnCash": "effect_o_fexchan_ger_atecha_n_gesoncash", - "netIncome": "net_income", - "netIncomeCommonStock": "net_incom_ecomm_onstock", - "netIncomeCommonStockUSD": "net_incom_ecomm_onst___ockusd", - "netLossIncomeFromDiscontinuedOperations": "net_los_sinco_mef_romdisconti_nuedoperations", - "netIncomeToNonControllingInterests": "net_incom_e_to_noncontrol_linginterests", - "profitMargin": "profit_margin", - "operatingExpenses": "operating_expenses", - "operatingIncome": "operating_income", - "tradeAndNonTradePayables": "trade_an_dn_ontr_adepayables", - "payoutRatio": "payout_ratio", - "priceToBookValue": "price_t_obo_okvalue", - "priceEarnings": "price_earnings", - "priceToEarningsRatio": "price_t_oearnin_gsratio", - "propertyPlantEquipmentNet": "property_plan_tequipme_ntnet", - "preferredDividendsIncomeStatementImpact": "preferred_dividend_sinco_mestatem_entimpact", - "sharePriceAdjustedClose": "share_pric_eadjust_edclose", - "priceSales": "price_sales", - "priceToSalesRatio": "price_t_osal_esratio", - "tradeAndNonTradeReceivables": "trade_an_dn_ontr_adereceivables", - "accumulatedRetainedEarningsDeficit": "accumulated_retaine_dearnin_gsdeficit", - "revenues": "revenues", - "revenuesUSD": "revenues___usd", - "researchAndDevelopmentExpense": "research_an_ddevelopme_ntexpense", - "returnOnAverageAssets": "return_o_navera_geassets", - "returnOnAverageEquity": "return_o_navera_geequity", - "returnOnInvestedCapital": "return_o_ninvest_edcapital", - "returnOnSales": "return_o_nsales", - "shareBasedCompensation": "share_base_dcompensation", - "sellingGeneralAndAdministrativeExpense": "selling_genera_la_ndadministrat_iveexpense", - "shareFactor": "share_factor", - "shares": "shares", - "weightedAverageShares": "weighted_averag_eshares", - "weightedAverageSharesDiluted": "weighted_averag_eshar_esdiluted", - "salesPerShare": "sales_pe_rshare", - "tangibleAssetValue": "tangible_asse_tvalue", - "taxAssets": "tax_assets", - "incomeTaxExpense": "income_ta_xexpense", - "taxLiabilities": "tax_liabilities", - "tangibleAssetsBookValuePerShare": "tangible_asset_sbo_okva_lu_epershare", - "workingCapital": "working_capital", - - } - - _attribute_is_primitive = { - "ticker": False, - "period": True, - "calendar_date": True, - "report_period": True, - "updated": True, - "accumulated_othe_rcomprehensi_veincome": True, - "assets": True, - "assets_average": True, - "assets_current": True, - "asset_turnover": True, - "assets_no_ncurrent": True, - "book_valu_ep_ershare": True, - "capital_expenditure": True, - "cash_an_dequivalents": True, - "cash_an_dequivalen___tsusd": True, - "cost_o_frevenue": True, - "consolidated_income": True, - "current_ratio": True, - "debt_t_oequi_tyratio": True, - "debt": True, - "debt_current": True, - "debt_no_ncurrent": True, - "debt___usd": True, - "deferred_revenue": True, - "depreciation_amortizatio_na_ndaccretion": True, - "deposits": True, - "dividend_yield": True, - "dividends_pe_rbas_iccom_monshare": True, - "earning_befor_eintere_sttaxes": True, - "earnings_befor_eintere_stta_xesdeprecia_tionamortization": True, - "e______bitdamargin": True, - "earnings_befor_eintere_stta_xesdeprecia_tionamortiz___ationusd": True, - "earning_befor_eintere_stta___xesusd": True, - "earnings_befor_etax": True, - "earnings_pe_rbas_icshare": True, - "earnings_pe_rdilut_edshare": True, - "earnings_pe_rbas_icsh___areusd": True, - "shareholders_equity": True, - "average_equity": True, - "shareholders_equit___yusd": True, - "enterprise_value": True, - "enterprise_valu_eov____erebit": True, - "enterprise_valu_eov______erebitda": True, - "free_cas_hflow": True, - "free_cas_hfl_ow_pershare": True, - "foreign_currenc____yusdexc_hangerate": True, - "gross_profit": True, - "gross_margin": True, - "goodwill_an_dintangib_leassets": True, - "interest_expense": True, - "invested_capital": True, - "invested_capita_laverage": True, - "inventory": True, - "investments": True, - "investments_current": True, - "investments_no_ncurrent": True, - "total_liabilities": True, - "current_liabilities": True, - "liabilities_no_ncurrent": True, - "market_capitalization": True, - "net_cas_hflow": True, - "net_cas_hfl_owbusin_essacquisit_ionsdisposals": True, - "issuance_equit_yshares": True, - "issuance_deb_tsecurities": True, - "payment_dividend_soth_erc_ashdistributions": True, - "net_cas_hfl_owf_romfinancing": True, - "net_cas_hfl_owf_rominvesting": True, - "net_cas_hfl_owinvestm_entacquisit_ionsdisposals": True, - "net_cas_hfl_owf_romoperations": True, - "effect_o_fexchan_ger_atecha_n_gesoncash": True, - "net_income": True, - "net_incom_ecomm_onstock": True, - "net_incom_ecomm_onst___ockusd": True, - "net_los_sinco_mef_romdisconti_nuedoperations": True, - "net_incom_e_to_noncontrol_linginterests": True, - "profit_margin": True, - "operating_expenses": True, - "operating_income": True, - "trade_an_dn_ontr_adepayables": True, - "payout_ratio": True, - "price_t_obo_okvalue": True, - "price_earnings": True, - "price_t_oearnin_gsratio": True, - "property_plan_tequipme_ntnet": True, - "preferred_dividend_sinco_mestatem_entimpact": True, - "share_pric_eadjust_edclose": True, - "price_sales": True, - "price_t_osal_esratio": True, - "trade_an_dn_ontr_adereceivables": True, - "accumulated_retaine_dearnin_gsdeficit": True, - "revenues": True, - "revenues___usd": True, - "research_an_ddevelopme_ntexpense": True, - "return_o_navera_geassets": True, - "return_o_navera_geequity": True, - "return_o_ninvest_edcapital": True, - "return_o_nsales": True, - "share_base_dcompensation": True, - "selling_genera_la_ndadministrat_iveexpense": True, - "share_factor": True, - "shares": True, - "weighted_averag_eshares": True, - "weighted_averag_eshar_esdiluted": True, - "sales_pe_rshare": True, - "tangible_asse_tvalue": True, - "tax_assets": True, - "income_ta_xexpense": True, - "tax_liabilities": True, - "tangible_asset_sbo_okva_lu_epershare": True, - "working_capital": True, - - } - - _attributes_to_types = { - "ticker": "TickerSymbol", - "period": "str", - "calendar_date": "str", - "report_period": "str", - "updated": "str", - "accumulated_othe_rcomprehensi_veincome": "int", - "assets": "int", - "assets_average": "int", - "assets_current": "int", - "asset_turnover": "int", - "assets_no_ncurrent": "int", - "book_valu_ep_ershare": "int", - "capital_expenditure": "int", - "cash_an_dequivalents": "int", - "cash_an_dequivalen___tsusd": "int", - "cost_o_frevenue": "int", - "consolidated_income": "int", - "current_ratio": "int", - "debt_t_oequi_tyratio": "int", - "debt": "int", - "debt_current": "int", - "debt_no_ncurrent": "int", - "debt___usd": "int", - "deferred_revenue": "int", - "depreciation_amortizatio_na_ndaccretion": "int", - "deposits": "int", - "dividend_yield": "int", - "dividends_pe_rbas_iccom_monshare": "int", - "earning_befor_eintere_sttaxes": "int", - "earnings_befor_eintere_stta_xesdeprecia_tionamortization": "int", - "e______bitdamargin": "int", - "earnings_befor_eintere_stta_xesdeprecia_tionamortiz___ationusd": "int", - "earning_befor_eintere_stta___xesusd": "int", - "earnings_befor_etax": "int", - "earnings_pe_rbas_icshare": "int", - "earnings_pe_rdilut_edshare": "int", - "earnings_pe_rbas_icsh___areusd": "int", - "shareholders_equity": "int", - "average_equity": "int", - "shareholders_equit___yusd": "int", - "enterprise_value": "int", - "enterprise_valu_eov____erebit": "int", - "enterprise_valu_eov______erebitda": "int", - "free_cas_hflow": "int", - "free_cas_hfl_ow_pershare": "int", - "foreign_currenc____yusdexc_hangerate": "int", - "gross_profit": "int", - "gross_margin": "int", - "goodwill_an_dintangib_leassets": "int", - "interest_expense": "int", - "invested_capital": "int", - "invested_capita_laverage": "int", - "inventory": "int", - "investments": "int", - "investments_current": "int", - "investments_no_ncurrent": "int", - "total_liabilities": "int", - "current_liabilities": "int", - "liabilities_no_ncurrent": "int", - "market_capitalization": "int", - "net_cas_hflow": "int", - "net_cas_hfl_owbusin_essacquisit_ionsdisposals": "int", - "issuance_equit_yshares": "int", - "issuance_deb_tsecurities": "int", - "payment_dividend_soth_erc_ashdistributions": "int", - "net_cas_hfl_owf_romfinancing": "int", - "net_cas_hfl_owf_rominvesting": "int", - "net_cas_hfl_owinvestm_entacquisit_ionsdisposals": "int", - "net_cas_hfl_owf_romoperations": "int", - "effect_o_fexchan_ger_atecha_n_gesoncash": "int", - "net_income": "int", - "net_incom_ecomm_onstock": "int", - "net_incom_ecomm_onst___ockusd": "int", - "net_los_sinco_mef_romdisconti_nuedoperations": "int", - "net_incom_e_to_noncontrol_linginterests": "int", - "profit_margin": "int", - "operating_expenses": "int", - "operating_income": "int", - "trade_an_dn_ontr_adepayables": "int", - "payout_ratio": "int", - "price_t_obo_okvalue": "int", - "price_earnings": "int", - "price_t_oearnin_gsratio": "int", - "property_plan_tequipme_ntnet": "int", - "preferred_dividend_sinco_mestatem_entimpact": "int", - "share_pric_eadjust_edclose": "int", - "price_sales": "int", - "price_t_osal_esratio": "int", - "trade_an_dn_ontr_adereceivables": "int", - "accumulated_retaine_dearnin_gsdeficit": "int", - "revenues": "int", - "revenues___usd": "int", - "research_an_ddevelopme_ntexpense": "int", - "return_o_navera_geassets": "int", - "return_o_navera_geequity": "int", - "return_o_ninvest_edcapital": "int", - "return_o_nsales": "int", - "share_base_dcompensation": "int", - "selling_genera_la_ndadministrat_iveexpense": "int", - "share_factor": "int", - "shares": "int", - "weighted_averag_eshares": "int", - "weighted_averag_eshar_esdiluted": "int", - "sales_pe_rshare": "int", - "tangible_asse_tvalue": "int", - "tax_assets": "int", - "income_ta_xexpense": "int", - "tax_liabilities": "int", - "tangible_asset_sbo_okva_lu_epershare": "int", - "working_capital": "int", - - } - - def __init__(self): - self.ticker: TickerSymbol - self.period: str - self.calendar_date: str - self.report_period: str - self.updated: str - self.accumulated_othe_rcomprehensi_veincome: int - self.assets: int - self.assets_average: int - self.assets_current: int - self.asset_turnover: int - self.assets_no_ncurrent: int - self.book_valu_ep_ershare: int - self.capital_expenditure: int - self.cash_an_dequivalents: int - self.cash_an_dequivalen___tsusd: int - self.cost_o_frevenue: int - self.consolidated_income: int - self.current_ratio: int - self.debt_t_oequi_tyratio: int - self.debt: int - self.debt_current: int - self.debt_no_ncurrent: int - self.debt___usd: int - self.deferred_revenue: int - self.depreciation_amortizatio_na_ndaccretion: int - self.deposits: int - self.dividend_yield: int - self.dividends_pe_rbas_iccom_monshare: int - self.earning_befor_eintere_sttaxes: int - self.earnings_befor_eintere_stta_xesdeprecia_tionamortization: int - self.e______bitdamargin: int - self.earnings_befor_eintere_stta_xesdeprecia_tionamortiz___ationusd: int - self.earning_befor_eintere_stta___xesusd: int - self.earnings_befor_etax: int - self.earnings_pe_rbas_icshare: int - self.earnings_pe_rdilut_edshare: int - self.earnings_pe_rbas_icsh___areusd: int - self.shareholders_equity: int - self.average_equity: int - self.shareholders_equit___yusd: int - self.enterprise_value: int - self.enterprise_valu_eov____erebit: int - self.enterprise_valu_eov______erebitda: int - self.free_cas_hflow: int - self.free_cas_hfl_ow_pershare: int - self.foreign_currenc____yusdexc_hangerate: int - self.gross_profit: int - self.gross_margin: int - self.goodwill_an_dintangib_leassets: int - self.interest_expense: int - self.invested_capital: int - self.invested_capita_laverage: int - self.inventory: int - self.investments: int - self.investments_current: int - self.investments_no_ncurrent: int - self.total_liabilities: int - self.current_liabilities: int - self.liabilities_no_ncurrent: int - self.market_capitalization: int - self.net_cas_hflow: int - self.net_cas_hfl_owbusin_essacquisit_ionsdisposals: int - self.issuance_equit_yshares: int - self.issuance_deb_tsecurities: int - self.payment_dividend_soth_erc_ashdistributions: int - self.net_cas_hfl_owf_romfinancing: int - self.net_cas_hfl_owf_rominvesting: int - self.net_cas_hfl_owinvestm_entacquisit_ionsdisposals: int - self.net_cas_hfl_owf_romoperations: int - self.effect_o_fexchan_ger_atecha_n_gesoncash: int - self.net_income: int - self.net_incom_ecomm_onstock: int - self.net_incom_ecomm_onst___ockusd: int - self.net_los_sinco_mef_romdisconti_nuedoperations: int - self.net_incom_e_to_noncontrol_linginterests: int - self.profit_margin: int - self.operating_expenses: int - self.operating_income: int - self.trade_an_dn_ontr_adepayables: int - self.payout_ratio: int - self.price_t_obo_okvalue: int - self.price_earnings: int - self.price_t_oearnin_gsratio: int - self.property_plan_tequipme_ntnet: int - self.preferred_dividend_sinco_mestatem_entimpact: int - self.share_pric_eadjust_edclose: int - self.price_sales: int - self.price_t_osal_esratio: int - self.trade_an_dn_ontr_adereceivables: int - self.accumulated_retaine_dearnin_gsdeficit: int - self.revenues: int - self.revenues___usd: int - self.research_an_ddevelopme_ntexpense: int - self.return_o_navera_geassets: int - self.return_o_navera_geequity: int - self.return_o_ninvest_edcapital: int - self.return_o_nsales: int - self.share_base_dcompensation: int - self.selling_genera_la_ndadministrat_iveexpense: int - self.share_factor: int - self.shares: int - self.weighted_averag_eshares: int - self.weighted_averag_eshar_esdiluted: int - self.sales_pe_rshare: int - self.tangible_asse_tvalue: int - self.tax_assets: int - self.income_ta_xexpense: int - self.tax_liabilities: int - self.tangible_asset_sbo_okva_lu_epershare: int - self.working_capital: int - - -# noinspection SpellCheckingInspection -class Trade(Definition): - _swagger_name_to_python = { - "c1": "condition_1_of_this_trade", - "c2": "condition_2_of_this_trade", - "c3": "condition_3_of_this_trade", - "c4": "condition_4_of_this_trade", - "e": "the_exchange_this_trade_happened_on", - "p": "price_of_the_trade", - "s": "size_of_the_trade", - "t": "timestamp_of_this_trade", - - } - - _attribute_is_primitive = { - "condition_1_of_this_trade": True, - "condition_2_of_this_trade": True, - "condition_3_of_this_trade": True, - "condition_4_of_this_trade": True, - "the_exchange_this_trade_happened_on": True, - "price_of_the_trade": True, - "size_of_the_trade": True, - "timestamp_of_this_trade": True, - - } - - _attributes_to_types = { - "condition_1_of_this_trade": "int", - "condition_2_of_this_trade": "int", - "condition_3_of_this_trade": "int", - "condition_4_of_this_trade": "int", - "the_exchange_this_trade_happened_on": "str", - "price_of_the_trade": "int", - "size_of_the_trade": "int", - "timestamp_of_this_trade": "int", - - } - - def __init__(self): - self.condition_1_of_this_trade: int - self.condition_2_of_this_trade: int - self.condition_3_of_this_trade: int - self.condition_4_of_this_trade: int - self.the_exchange_this_trade_happened_on: str - self.price_of_the_trade: int - self.size_of_the_trade: int - self.timestamp_of_this_trade: int - - -# noinspection SpellCheckingInspection -class StocksSnapshotTicker(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "day": "day", - "lastTrade": "last_trade", - "lastQuote": "last_quote", - "min": "min", - "prevDay": "prev_day", - "todaysChange": "todays_change", - "todaysChangePerc": "todays_chang_eperc", - "updated": "updated", - - } - - _attribute_is_primitive = { - "ticker": True, - "day": False, - "last_trade": False, - "last_quote": False, - "min": False, - "prev_day": False, - "todays_change": True, - "todays_chang_eperc": True, - "updated": True, - - } - - _attributes_to_types = { - "ticker": "str", - "day": "StocksSnapshotAgg", - "last_trade": "Trade", - "last_quote": "StocksSnapshotQuote", - "min": "StocksSnapshotAgg", - "prev_day": "StocksSnapshotAgg", - "todays_change": "int", - "todays_chang_eperc": "int", - "updated": "int", - - } - - def __init__(self): - self.ticker: str - self.day: StocksSnapshotAgg - self.last_trade: Trade - self.last_quote: StocksSnapshotQuote - self.min: StocksSnapshotAgg - self.prev_day: StocksSnapshotAgg - self.todays_change: int - self.todays_chang_eperc: int - self.updated: int - - -# noinspection SpellCheckingInspection -class StocksSnapshotBookItem(Definition): - _swagger_name_to_python = { - "p": "price_of_this_book_level", - "x": "exchange_to_size_of_this_price_level", - - } - - _attribute_is_primitive = { - "price_of_this_book_level": True, - "exchange_to_size_of_this_price_level": True, - - } - - _attributes_to_types = { - "price_of_this_book_level": "int", - "exchange_to_size_of_this_price_level": "Dict[str, str]", - - } - - def __init__(self): - self.price_of_this_book_level: int - self.exchange_to_size_of_this_price_level: Dict[str, str] - - -# noinspection SpellCheckingInspection -class StocksSnapshotTickerBook(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "bids": "bids", - "asks": "asks", - "bidCount": "bid_count", - "askCount": "ask_count", - "spread": "spread", - "updated": "updated", - - } - - _attribute_is_primitive = { - "ticker": True, - "bids": False, - "asks": False, - "bid_count": True, - "ask_count": True, - "spread": True, - "updated": True, - - } - - _attributes_to_types = { - "ticker": "str", - "bids": "List[StocksSnapshotBookItem]", - "asks": "List[StocksSnapshotBookItem]", - "bid_count": "int", - "ask_count": "int", - "spread": "int", - "updated": "int", - - } - - def __init__(self): - self.ticker: str - self.bids: List[StocksSnapshotBookItem] - self.asks: List[StocksSnapshotBookItem] - self.bid_count: int - self.ask_count: int - self.spread: int - self.updated: int - - -# noinspection SpellCheckingInspection -class StocksV2Trade(Definition): - _swagger_name_to_python = { - "T": "ticker_of_the_object", - "t": "nanosecond_accuracy_s__ip_unix_timestamp", - "y": "nanosecond_accuracy_participant_exchange_unix_timestamp", - "f": "nanosecond_accuracy_t__rf", - "q": "sequence_number", - "i": "trade_i_d", - "x": "exchange_i_d", - "s": "size_volume_of_the_trade", - "c": "c", - "p": "price_of_the_trade", - "z": "tape_where_trade_occured", - - } - - _attribute_is_primitive = { - "ticker_of_the_object": True, - "nanosecond_accuracy_s__ip_unix_timestamp": True, - "nanosecond_accuracy_participant_exchange_unix_timestamp": True, - "nanosecond_accuracy_t__rf": True, - "sequence_number": True, - "trade_i_d": True, - "exchange_i_d": True, - "size_volume_of_the_trade": True, - "c": False, - "price_of_the_trade": True, - "tape_where_trade_occured": True, - - } - - _attributes_to_types = { - "ticker_of_the_object": "str", - "nanosecond_accuracy_s__ip_unix_timestamp": "int", - "nanosecond_accuracy_participant_exchange_unix_timestamp": "int", - "nanosecond_accuracy_t__rf": "int", - "sequence_number": "int", - "trade_i_d": "str", - "exchange_i_d": "int", - "size_volume_of_the_trade": "int", - "c": "List[int]", - "price_of_the_trade": "int", - "tape_where_trade_occured": "int", - - } - - def __init__(self): - self.ticker_of_the_object: str - self.nanosecond_accuracy_s__ip_unix_timestamp: int - self.nanosecond_accuracy_participant_exchange_unix_timestamp: int - self.nanosecond_accuracy_t__rf: int - self.sequence_number: int - self.trade_i_d: str - self.exchange_i_d: int - self.size_volume_of_the_trade: int - self.c: List[int] - self.price_of_the_trade: int - self.tape_where_trade_occured: int - - -# noinspection SpellCheckingInspection -class StocksV2NBBO(Definition): - _swagger_name_to_python = { - "T": "ticker_of_the_object", - "t": "nanosecond_accuracy_s__ip_unix_timestamp", - "y": "nanosecond_accuracy_participant_exchange_unix_timestamp", - "f": "nanosecond_accuracy_t__rf", - "q": "sequence_number", - "c": "c", - "i": "i", - "p": "b__id_price", - "x": "b__id_exchange__id", - "s": "b__id_size", - "P": "a__sk_price", - "X": "a__sk_exchange__id", - "S": "a__sk_size", - "z": "tape_where_trade_occured", - - } - - _attribute_is_primitive = { - "ticker_of_the_object": True, - "nanosecond_accuracy_s__ip_unix_timestamp": True, - "nanosecond_accuracy_participant_exchange_unix_timestamp": True, - "nanosecond_accuracy_t__rf": True, - "sequence_number": True, - "c": False, - "i": False, - "b__id_price": True, - "b__id_exchange__id": True, - "b__id_size": True, - "a__sk_price": True, - "a__sk_exchange__id": True, - "a__sk_size": True, - "tape_where_trade_occured": True, - - } - - _attributes_to_types = { - "ticker_of_the_object": "str", - "nanosecond_accuracy_s__ip_unix_timestamp": "int", - "nanosecond_accuracy_participant_exchange_unix_timestamp": "int", - "nanosecond_accuracy_t__rf": "int", - "sequence_number": "int", - "c": "List[int]", - "i": "List[int]", - "b__id_price": "int", - "b__id_exchange__id": "int", - "b__id_size": "int", - "a__sk_price": "int", - "a__sk_exchange__id": "int", - "a__sk_size": "int", - "tape_where_trade_occured": "int", - - } - - def __init__(self): - self.ticker_of_the_object: str - self.nanosecond_accuracy_s__ip_unix_timestamp: int - self.nanosecond_accuracy_participant_exchange_unix_timestamp: int - self.nanosecond_accuracy_t__rf: int - self.sequence_number: int - self.c: List[int] - self.i: List[int] - self.b__id_price: int - self.b__id_exchange__id: int - self.b__id_size: int - self.a__sk_price: int - self.a__sk_exchange__id: int - self.a__sk_size: int - self.tape_where_trade_occured: int - - -# noinspection SpellCheckingInspection -class StocksSnapshotAgg(Definition): - _swagger_name_to_python = { - "c": "close_price", - "h": "high_price", - "l": "low_price", - "o": "open_price", - "v": "volume", - - } - - _attribute_is_primitive = { - "close_price": True, - "high_price": True, - "low_price": True, - "open_price": True, - "volume": True, - - } - - _attributes_to_types = { - "close_price": "int", - "high_price": "int", - "low_price": "int", - "open_price": "int", - "volume": "int", - - } - - def __init__(self): - self.close_price: int - self.high_price: int - self.low_price: int - self.open_price: int - self.volume: int - - -# noinspection SpellCheckingInspection -class StocksSnapshotQuote(Definition): - _swagger_name_to_python = { - "p": "bid_price", - "s": "bid_size_in_lots", - "P": "ask_price", - "S": "ask_size_in_lots", - "t": "last_updated_timestamp", - - } - - _attribute_is_primitive = { - "bid_price": True, - "bid_size_in_lots": True, - "ask_price": True, - "ask_size_in_lots": True, - "last_updated_timestamp": True, - - } - - _attributes_to_types = { - "bid_price": "int", - "bid_size_in_lots": "int", - "ask_price": "int", - "ask_size_in_lots": "int", - "last_updated_timestamp": "int", - - } - - def __init__(self): - self.bid_price: int - self.bid_size_in_lots: int - self.ask_price: int - self.ask_size_in_lots: int - self.last_updated_timestamp: int - - -# noinspection SpellCheckingInspection -class Aggv2(Definition): - _swagger_name_to_python = { - "T": "ticker_symbol", - "v": "volume", - "o": "open", - "c": "close", - "h": "high", - "l": "low", - "t": "unix_msec_timestamp", - "n": "number_of_items_in_aggregate_window", - - } - - _attribute_is_primitive = { - "ticker_symbol": True, - "volume": True, - "open": True, - "close": True, - "high": True, - "low": True, - "unix_msec_timestamp": True, - "number_of_items_in_aggregate_window": True, - - } - - _attributes_to_types = { - "ticker_symbol": "str", - "volume": "int", - "open": "int", - "close": "int", - "high": "int", - "low": "int", - "unix_msec_timestamp": "float", - "number_of_items_in_aggregate_window": "float", - - } - - def __init__(self): - self.ticker_symbol: str - self.volume: int - self.open: int - self.close: int - self.high: int - self.low: int - self.unix_msec_timestamp: float - self.number_of_items_in_aggregate_window: float - - -# noinspection SpellCheckingInspection -class AggResponse(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "status": "status", - "adjusted": "adjusted", - "queryCount": "query_count", - "resultsCount": "results_count", - "results": "results", - - } - - _attribute_is_primitive = { - "ticker": True, - "status": True, - "adjusted": True, - "query_count": True, - "results_count": True, - "results": False, - - } - - _attributes_to_types = { - "ticker": "str", - "status": "str", - "adjusted": "bool", - "query_count": "float", - "results_count": "float", - "results": "List[Aggv2]", - - } - - def __init__(self): - self.ticker: str - self.status: str - self.adjusted: bool - self.query_count: float - self.results_count: float - self.results: List[Aggv2] - - -# noinspection SpellCheckingInspection -class ReferenceTickersApiResponse(Definition): - _swagger_name_to_python = { - "symbol": "symbol", - - } - - _attribute_is_primitive = { - "symbol": False, - - } - - _attributes_to_types = { - "symbol": "List[Symbol]", - - } - - def __init__(self): - self.symbol: List[Symbol] - - -# noinspection SpellCheckingInspection -class ReferenceTickersV3ApiResponse(Definition): - _swagger_name_to_python = { - "results": "results", - "status": "status", - "count": "count", - "next_url": "next_url", - } - - _attribute_is_primitive = { - "results": False, - "status": True, - "count": True, - "next_url": True, - } - - _attributes_to_types = { - "results": "List[SymbolV3]", - "status": "str", - "count": "float", - "next_url": "str", - } - - def __init__(self): - self.results: List[SymbolV3] - self.status: str - self.count: float - self.next_url: str - - -# noinspection SpellCheckingInspection -class ReferenceTickerTypesApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "results": "results", - - } - - _attribute_is_primitive = { - "status": True, - "results": True, - - } - - _attributes_to_types = { - "status": "str", - "results": "Dict[str, str]", - - } - - def __init__(self): - self.status: str - self.results: Dict[str, str] - - -# noinspection SpellCheckingInspection -class ReferenceTickerDetailsApiResponse(Definition): - _swagger_name_to_python = { - "company": "company", - - } - - _attribute_is_primitive = { - "company": False, - - } - - _attributes_to_types = { - "company": "Company", - - } - - def __init__(self): - self.company: Company - - -# noinspection SpellCheckingInspection -class ReferenceTickerDetailsV3ApiResponse(Definition): - _swagger_name_to_python = { - "results": "results", - "status": "status", - "count": "count", - } - - _attribute_is_primitive = { - "results": False, - "status": True, - "count": True, - } - - _attributes_to_types = { - "results": "List[CompanyV3]", - "status": "str", - "count": "float", - } - - def __init__(self): - self.results: List[CompanyV3] - self.status: str - self.count: float - - -# noinspection SpellCheckingInspection -class ReferenceTickerNewsApiResponse(Definition): - _swagger_name_to_python = { - "news": "news", - - } - - _attribute_is_primitive = { - "news": False, - - } - - _attributes_to_types = { - "news": "List[News]", - - } - - def __init__(self): - self.news: List[News] - - -# noinspection SpellCheckingInspection -class ReferenceTickerNewsV2ApiResponse(Definition): - _swagger_name_to_python = { - "results": "results", - "next_url": "next_url", - "status": "status", - "count": "count", - } - - _attribute_is_primitive = { - "results": False, - "next_url": True, - "status": True, - "count": True, - } - - _attributes_to_types = { - "results": "List[NewsV2]", - "next_url": "str", - "status": "str", - "count": "float", - } - - def __init__(self): - self.results: List[NewsV2] - self.next_url: str - self.status: str - self.count: float - - -# noinspection SpellCheckingInspection -class ReferenceMarketsApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "results": "results", - - } - - _attribute_is_primitive = { - "status": True, - "results": False, - - } - - _attributes_to_types = { - "status": "str", - "results": "List[Dict[str, str]]", - - } - - def __init__(self): - self.status: str - self.results: List[Dict[str, str]] - - -# noinspection SpellCheckingInspection -class ReferenceLocalesApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "results": "results", - - } - - _attribute_is_primitive = { - "status": True, - "results": False, - - } - - _attributes_to_types = { - "status": "str", - "results": "List[Dict[str, str]]", - - } - - def __init__(self): - self.status: str - self.results: List[Dict[str, str]] - - -# noinspection SpellCheckingInspection -class ReferenceStockSplitsApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "count": "count", - "results": "results", - - } - - _attribute_is_primitive = { - "status": True, - "count": True, - "results": False, - - } - - _attributes_to_types = { - "status": "str", - "count": "float", - "results": "List[Split]", - - } - - def __init__(self): - self.status: str - self.count: float - self.results: List[Split] - - -# noinspection SpellCheckingInspection -class ReferenceStockDividendsApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "count": "count", - "results": "results", - - } - - _attribute_is_primitive = { - "status": True, - "count": True, - "results": False, - - } - - _attributes_to_types = { - "status": "str", - "count": "float", - "results": "List[Dividend]", - - } - - def __init__(self): - self.status: str - self.count: float - self.results: List[Dividend] - - -# noinspection SpellCheckingInspection -class ReferenceStockFinancialsApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "count": "count", - "results": "results", - - } - - _attribute_is_primitive = { - "status": True, - "count": True, - "results": False, - - } - - _attributes_to_types = { - "status": "str", - "count": "float", - "results": "List[Financials]", - - } - - def __init__(self): - self.status: str - self.count: float - self.results: List[Financials] - - -# noinspection SpellCheckingInspection -class ReferenceMarketStatusApiResponse(Definition): - _swagger_name_to_python = { - "marketstatus": "marketstatus", - - } - - _attribute_is_primitive = { - "marketstatus": False, - - } - - _attributes_to_types = { - "marketstatus": "MarketStatus", - - } - - def __init__(self): - self.marketstatus: MarketStatus - - -# noinspection SpellCheckingInspection -class ReferenceMarketHolidaysApiResponse(Definition): - _swagger_name_to_python = { - "marketholiday": "marketholiday", - - } - - _attribute_is_primitive = { - "marketholiday": False, - - } - - _attributes_to_types = { - "marketholiday": "List[MarketHoliday]", - - } - - def __init__(self): - self.marketholiday: List[MarketHoliday] - - -# noinspection SpellCheckingInspection -class StocksEquitiesExchangesApiResponse(Definition): - _swagger_name_to_python = { - "exchange": "exchange", - - } - - _attribute_is_primitive = { - "exchange": False, - - } - - _attributes_to_types = { - "exchange": "List[Exchange]", - - } - - def __init__(self): - self.exchange: List[Exchange] - - -# noinspection SpellCheckingInspection -class StocksEquitiesHistoricTradesApiResponse(Definition): - _swagger_name_to_python = { - "day": "day", - "map": "map", - "msLatency": "ms_latency", - "status": "status", - "symbol": "symbol", - "ticks": "ticks", - - } - - _attribute_is_primitive = { - "day": True, - "map": True, - "ms_latency": True, - "status": True, - "symbol": True, - "ticks": False, - - } - - _attributes_to_types = { - "day": "str", - "map": "Dict[str, str]", - "ms_latency": "int", - "status": "str", - "symbol": "str", - "ticks": "List[Trade]", - - } - - def __init__(self): - self.day: str - self.map: Dict[str, str] - self.ms_latency: int - self.status: str - self.symbol: str - self.ticks: List[Trade] - - -# noinspection SpellCheckingInspection -class HistoricTradesV2ApiResponse(Definition): - _swagger_name_to_python = { - "results_count": "results_count", - "db_latency": "db_latency", - "success": "success", - "ticker": "ticker", - "results": "results", - - } - - _attribute_is_primitive = { - "results_count": True, - "db_latency": True, - "success": True, - "ticker": True, - "results": False, - - } - - _attributes_to_types = { - "results_count": "int", - "db_latency": "int", - "success": "bool", - "ticker": "str", - "results": "List[StocksV2Trade]", - - } - - def __init__(self): - self.results_count: int - self.db_latency: int - self.success: bool - self.ticker: str - self.results: List[StocksV2Trade] - - -# noinspection SpellCheckingInspection -class StocksEquitiesHistoricQuotesApiResponse(Definition): - _swagger_name_to_python = { - "day": "day", - "map": "map", - "msLatency": "ms_latency", - "status": "status", - "symbol": "symbol", - "ticks": "ticks", - - } - - _attribute_is_primitive = { - "day": True, - "map": True, - "ms_latency": True, - "status": True, - "symbol": True, - "ticks": False, - - } - - _attributes_to_types = { - "day": "str", - "map": "Dict[str, str]", - "ms_latency": "int", - "status": "str", - "symbol": "str", - "ticks": "List[Quote]", - - } - - def __init__(self): - self.day: str - self.map: Dict[str, str] - self.ms_latency: int - self.status: str - self.symbol: str - self.ticks: List[Quote] - - -# noinspection SpellCheckingInspection -class HistoricNBboQuotesV2ApiResponse(Definition): - _swagger_name_to_python = { - "results_count": "results_count", - "db_latency": "db_latency", - "success": "success", - "ticker": "ticker", - "results": "results", - - } - - _attribute_is_primitive = { - "results_count": True, - "db_latency": True, - "success": True, - "ticker": True, - "results": False, - - } - - _attributes_to_types = { - "results_count": "int", - "db_latency": "int", - "success": "bool", - "ticker": "str", - "results": "List[StocksV2NBBO]", - - } - - def __init__(self): - self.results_count: int - self.db_latency: int - self.success: bool - self.ticker: str - self.results: List[StocksV2NBBO] - - -# noinspection SpellCheckingInspection -class StocksEquitiesLastTradeForASymbolApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "symbol": "symbol", - "last": "last", - - } - - _attribute_is_primitive = { - "status": True, - "symbol": True, - "last": False, - - } - - _attributes_to_types = { - "status": "str", - "symbol": "str", - "last": "LastTrade", - - } - - def __init__(self): - self.status: str - self.symbol: str - self.last: LastTrade - - -# noinspection SpellCheckingInspection -class StocksEquitiesLastQuoteForASymbolApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "symbol": "symbol", - "last": "last", - - } - - _attribute_is_primitive = { - "status": True, - "symbol": True, - "last": False, - - } - - _attributes_to_types = { - "status": "str", - "symbol": "str", - "last": "LastQuote", - - } - - def __init__(self): - self.status: str - self.symbol: str - self.last: LastQuote - - -# noinspection SpellCheckingInspection -class StocksEquitiesDailyOpenCloseApiResponse(Definition): - _swagger_name_to_python = { - "from": "from_", - "symbol": "symbol", - "open": "open", - "high": "high", - "low": "low", - "close": "close", - "volume": "volume", - "afterHours": "after_hours", - "preMarket": "pre_market", - } - - _attribute_is_primitive = { - "from_": True, - "symbol": True, - "open": True, - "high": True, - "low": True, - "close": True, - "volume": True, - "after_hours": True, - "pre_market": True, - } - - _attributes_to_types = { - "from_": "str", - "symbol": "str", - "open": "float", - "high": "float", - "low": "float", - "close": "float", - "volume": "float", - "after_hours": "float", - "pre_market": "float", - } - - def __init__(self): - self.from_: str - self.symbol: str - self.open: float - self.high: float - self.low: float - self.close: float - self.volume: float - self.after_hours: float - self.pre_market: float - - -# noinspection SpellCheckingInspection -class StocksEquitiesConditionMappingsApiResponse(Definition): - _swagger_name_to_python = { - "conditiontypemap": "conditiontypemap", - - } - - _attribute_is_primitive = { - "conditiontypemap": False, - - } - - _attributes_to_types = { - "conditiontypemap": "ConditionTypeMap", - - } - - def __init__(self): - self.conditiontypemap: ConditionTypeMap - - -# noinspection SpellCheckingInspection -class StocksEquitiesSnapshotAllTickersApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "tickers": "tickers", - - } - - _attribute_is_primitive = { - "status": True, - "tickers": False, - - } - - _attributes_to_types = { - "status": "str", - "tickers": "List[StocksSnapshotTicker]", - - } - - def __init__(self): - self.status: str - self.tickers: List[StocksSnapshotTicker] - - -# noinspection SpellCheckingInspection -class StocksEquitiesSnapshotSingleTickerApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "ticker": "ticker", - - } - - _attribute_is_primitive = { - "status": True, - "ticker": False, - - } - - _attributes_to_types = { - "status": "str", - "ticker": "StocksSnapshotTicker", - - } - - def __init__(self): - self.status: str - self.ticker: StocksSnapshotTicker - - -# noinspection SpellCheckingInspection -class StocksEquitiesSnapshotGainersLosersApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "tickers": "tickers", - - } - - _attribute_is_primitive = { - "status": True, - "tickers": False, - - } - - _attributes_to_types = { - "status": "str", - "tickers": "List[StocksSnapshotTicker]", - - } - - def __init__(self): - self.status: str - self.tickers: List[StocksSnapshotTicker] - - -# noinspection SpellCheckingInspection -class StocksEquitiesPreviousCloseApiResponse(Definition): - _swagger_name_to_python = { - "aggresponse": "aggresponse", - - } - - _attribute_is_primitive = { - "aggresponse": False, - - } - - _attributes_to_types = { - "aggresponse": "AggResponse", - - } - - def __init__(self): - self.aggresponse: AggResponse - - -# noinspection SpellCheckingInspection -class StocksEquitiesAggregatesApiResponse(Definition): - _swagger_name_to_python = { - "aggresponse": "aggresponse", - - } - - _attribute_is_primitive = { - "aggresponse": False, - - } - - _attributes_to_types = { - "aggresponse": "AggResponse", - - } - - def __init__(self): - self.aggresponse: AggResponse - - -# noinspection SpellCheckingInspection -class StocksEquitiesGroupedDailyApiResponse(Definition): - _swagger_name_to_python = { - "aggresponse": "aggresponse", - - } - - _attribute_is_primitive = { - "aggresponse": False, - - } - - _attributes_to_types = { - "aggresponse": "AggResponse", - - } - - def __init__(self): - self.aggresponse: AggResponse - - -# noinspection SpellCheckingInspection -class CurrenciesAggregatesApiResponse(Definition): - _swagger_name_to_python = { - "aggresponse": "aggresponse", - - } - - _attribute_is_primitive = { - "aggresponse": False, - - } - - _attributes_to_types = { - "aggresponse": "AggResponse", - - } - - def __init__(self): - self.aggresponse: AggResponse - -# noinspection SpellCheckingInspection -class ForexCurrenciesHistoricForexTicksApiResponse(Definition): - _swagger_name_to_python = { - "day": "day", - "map": "map", - "msLatency": "ms_latency", - "status": "status", - "pair": "pair", - "ticks": "ticks", - - } - - _attribute_is_primitive = { - "day": True, - "map": True, - "ms_latency": True, - "status": True, - "pair": True, - "ticks": False, - - } - - _attributes_to_types = { - "day": "str", - "map": "Dict[str, str]", - "ms_latency": "int", - "status": "str", - "pair": "str", - "ticks": "List[Forex]", - - } - - def __init__(self): - self.day: str - self.map: Dict[str, str] - self.ms_latency: int - self.status: str - self.pair: str - self.ticks: List[Forex] - - -# noinspection SpellCheckingInspection -class ForexCurrenciesRealTimeCurrencyConversionApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "from": "from_", - "to": "to_currency_symbol", - "initialAmount": "initial_amount", - "converted": "converted", - "lastTrade": "last_trade", - "symbol": "symbol", - - } - - _attribute_is_primitive = { - "status": True, - "from_": True, - "to_currency_symbol": True, - "initial_amount": True, - "converted": True, - "last_trade": False, - "symbol": True, - - } - - _attributes_to_types = { - "status": "str", - "from_": "str", - "to_currency_symbol": "str", - "initial_amount": "float", - "converted": "float", - "last_trade": "LastForexTrade", - "symbol": "str", - - } - - def __init__(self): - self.status: str - self.from_: str - self.to_currency_symbol: str - self.initial_amount: float - self.converted: float - self.last_trade: LastForexTrade - self.symbol: str - - -# noinspection SpellCheckingInspection -class ForexCurrenciesLastQuoteForACurrencyPairApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "symbol": "symbol", - "last": "last", - - } - - _attribute_is_primitive = { - "status": True, - "symbol": True, - "last": False, - - } - - _attributes_to_types = { - "status": "str", - "symbol": "str", - "last": "LastForexQuote", - - } - - def __init__(self): - self.status: str - self.symbol: str - self.last: LastForexQuote - - -# noinspection SpellCheckingInspection -class ForexCurrenciesGroupedDailyApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "adjusted": "adjusted", - "queryCount": "queryCount", - "resultsCount": "resultsCount", - "results": "results", - } - - _attribute_is_primitive = { - "status": True, - "adjusted": True, - "queryCount": True, - "resultsCount": True, - "results": False, - } - - _attributes_to_types = { - "status": "str", - "adjusted": "bool", - "queryCount": "int", - "resultsCount": "int", - "results": "List[Aggv2]" - } - - def __init__(self): - self.status: str - self.adjusted: bool - self.queryCount: int - self.resultsCount: int - self.results: List[Aggv2] - - -# noinspection SpellCheckingInspection -class ForexCurrenciesPreviousCloseApiResponse(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "status": "status", - "adjusted": "adjusted", - "queryCount": "queryCount", - "resultsCount": "resultsCount", - "results": "results", - } - - _attribute_is_primitive = { - "ticker": True, - "status": True, - "adjusted": True, - "queryCount": True, - "resultsCount": True, - "results": False, - } - - _attributes_to_types = { - "ticker": "str", - "status": "str", - "adjusted": "bool", - "queryCount": "int", - "resultsCount": "int", - "results": "List[Aggv2]" - } - - def __init__(self): - self.ticker: str - self.status: str - self.adjusted: bool - self.queryCount: int - self.resultsCount: int - self.results: List[Aggv2] - - -# noinspection SpellCheckingInspection -class ForexCurrenciesSnapshotAllTickersApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "tickers": "tickers", - - } - - _attribute_is_primitive = { - "status": True, - "tickers": False, - - } - - _attributes_to_types = { - "status": "str", - "tickers": "List[ForexSnapshotTicker]", - - } - - def __init__(self): - self.status: str - self.tickers: List[ForexSnapshotTicker] - - -# noinspection SpellCheckingInspection -class ForexCurrenciesSnapshotSingleTickerApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "ticker": "ticker", - } - - _attribute_is_primitive = { - "status": True, - "ticker": False, - } - - _attributes_to_types = { - "status": "str", - "ticker": "ForexSnapshotTicker", - } - - def __init__(self): - self.status: str - self.ticker: ForexSnapshotTicker - - -# noinspection SpellCheckingInspection -class ForexCurrenciesSnapshotGainersLosersApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "tickers": "tickers", - - } - - _attribute_is_primitive = { - "status": True, - "tickers": False, - - } - - _attributes_to_types = { - "status": "str", - "tickers": "List[ForexSnapshotTicker]", - - } - - def __init__(self): - self.status: str - self.tickers: List[ForexSnapshotTicker] - - -# noinspection SpellCheckingInspection -class CryptoCryptoExchangesApiResponse(Definition): - _swagger_name_to_python = { - "cryptoexchange": "cryptoexchange", - - } - - _attribute_is_primitive = { - "cryptoexchange": False, - - } - - _attributes_to_types = { - "cryptoexchange": "List[CryptoExchange]", - - } - - def __init__(self): - self.cryptoexchange: List[CryptoExchange] - - -# noinspection SpellCheckingInspection -class CryptoLastTradeForACryptoPairApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "symbol": "symbol", - "last": "last", - "lastAverage": "last_average", - - } - - _attribute_is_primitive = { - "status": True, - "symbol": True, - "last": False, - "last_average": True, - - } - - _attributes_to_types = { - "status": "str", - "symbol": "str", - "last": "CryptoTick", - "last_average": "Dict[str, str]", - - } - - def __init__(self): - self.status: str - self.symbol: str - self.last: CryptoTick - self.last_average: Dict[str, str] - - -# noinspection SpellCheckingInspection -class CryptoDailyOpenCloseApiResponse(Definition): - _swagger_name_to_python = { - "symbol": "symbol", - "isUTC": "is___utc", - "day": "day", - "open": "open", - "close": "close", - "openTrades": "open_trades", - "closingTrades": "closing_trades", - - } - - _attribute_is_primitive = { - "symbol": True, - "is___utc": True, - "day": True, - "open": True, - "close": True, - "open_trades": False, - "closing_trades": False, - - } - - _attributes_to_types = { - "symbol": "str", - "is___utc": "bool", - "day": "str", - "open": "int", - "close": "int", - "open_trades": "List[CryptoTickJson]", - "closing_trades": "List[CryptoTickJson]", - - } - - def __init__(self): - self.symbol: str - self.is___utc: bool - self.day: str - self.open: int - self.close: int - self.open_trades: List[CryptoTickJson] - self.closing_trades: List[CryptoTickJson] - - -# noinspection SpellCheckingInspection -class CryptoHistoricCryptoTradesApiResponse(Definition): - _swagger_name_to_python = { - "day": "day", - "map": "map", - "msLatency": "ms_latency", - "status": "status", - "symbol": "symbol", - "ticks": "ticks", - - } - - _attribute_is_primitive = { - "day": True, - "map": True, - "ms_latency": True, - "status": True, - "symbol": True, - "ticks": False, - - } - - _attributes_to_types = { - "day": "str", - "map": "Dict[str, str]", - "ms_latency": "int", - "status": "str", - "symbol": "str", - "ticks": "List[CryptoTickJson]", - - } - - def __init__(self): - self.day: str - self.map: Dict[str, str] - self.ms_latency: int - self.status: str - self.symbol: str - self.ticks: List[CryptoTickJson] - - -# noinspection SpellCheckingInspection -class CryptoGroupedDailyApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "adjusted": "adjusted", - "queryCount": "queryCount", - "resultsCount": "resultsCount", - "results": "results", - } - - _attribute_is_primitive = { - "status": True, - "adjusted": True, - "queryCount": True, - "resultsCount": True, - "results": False, - } - - _attributes_to_types = { - "status": "str", - "adjusted": "bool", - "queryCount": "int", - "resultsCount": "int", - "results": "List[Aggv2]" - } - - def __init__(self): - self.status: str - self.adjusted: bool - self.queryCount: int - self.resultsCount: int - self.results: List[Aggv2] - - -# noinspection SpellCheckingInspection -class CryptoPreviousCloseApiResponse(Definition): - _swagger_name_to_python = { - "ticker": "ticker", - "status": "status", - "adjusted": "adjusted", - "queryCount": "queryCount", - "resultsCount": "resultsCount", - "results": "results", - } - - _attribute_is_primitive = { - "ticker": True, - "status": True, - "adjusted": True, - "queryCount": True, - "resultsCount": True, - "results": False, - } - - _attributes_to_types = { - "ticker": "str", - "status": "str", - "adjusted": "bool", - "queryCount": "int", - "resultsCount": "int", - "results": "List[Aggv2]" - } - - def __init__(self): - self.ticker: str - self.status: str - self.adjusted: bool - self.queryCount: int - self.resultsCount: int - self.results: List[Aggv2] - -# noinspection SpellCheckingInspection -class CryptoSnapshotAllTickersApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "tickers": "tickers", - - } - - _attribute_is_primitive = { - "status": True, - "tickers": False, - - } - - _attributes_to_types = { - "status": "str", - "tickers": "List[CryptoSnapshotTicker]", - - } - - def __init__(self): - self.status: str - self.tickers: List[CryptoSnapshotTicker] - - -# noinspection SpellCheckingInspection -class CryptoSnapshotSingleTickerApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "ticker": "ticker", - - } - - _attribute_is_primitive = { - "status": True, - "ticker": False, - - } - - _attributes_to_types = { - "status": "str", - "ticker": "CryptoSnapshotTicker", - - } - - def __init__(self): - self.status: str - self.ticker: CryptoSnapshotTicker - - -# noinspection SpellCheckingInspection -class CryptoSnapshotSingleTickerFullBookApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "data": "data", - - } - - _attribute_is_primitive = { - "status": True, - "data": False, - - } - - _attributes_to_types = { - "status": "str", - "data": "CryptoSnapshotTickerBook", - - } - - def __init__(self): - self.status: str - self.data: CryptoSnapshotTickerBook - - -# noinspection SpellCheckingInspection -class CryptoSnapshotGainersLosersApiResponse(Definition): - _swagger_name_to_python = { - "status": "status", - "tickers": "tickers", - - } - - _attribute_is_primitive = { - "status": True, - "tickers": False, - - } - - _attributes_to_types = { - "status": "str", - "tickers": "List[CryptoSnapshotTicker]", - - } - - def __init__(self): - self.status: str - self.tickers: List[CryptoSnapshotTicker] - - -StockSymbol = str -ConditionTypeMap = Dict[str, str] -SymbolTypeMap = Dict[str, str] -TickerSymbol = str diff --git a/polygon/rest/models/trades.py b/polygon/rest/models/trades.py new file mode 100644 index 00000000..a68991e7 --- /dev/null +++ b/polygon/rest/models/trades.py @@ -0,0 +1,23 @@ +from typing import Optional, List +from dataclasses import dataclass + +@dataclass +class Trade: + "Trade contains trade data for a specified ticker symbol." + conditions: Optional[List[int]] = None + correction: Optional[int] = None + exchange: Optional[int] = None + id: Optional[str] = None + participant_timestamp: Optional[int] = None + price: Optional[float] = None + sequence_number: Optional[int] = None + sip_timestamp: Optional[int] = None + size: Optional[float] = None + tape: Optional[int] = None + trf_id: Optional[int] = None + trf_timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return Trade(**d) + diff --git a/polygon/rest/models/unmarshal.py b/polygon/rest/models/unmarshal.py deleted file mode 100644 index 720fe7c0..00000000 --- a/polygon/rest/models/unmarshal.py +++ /dev/null @@ -1,9 +0,0 @@ -from typing import Type - -from polygon.rest import models - - -def unmarshal_json(response_type, resp_json) -> Type[models.AnyDefinition]: - obj = models.name_to_class[response_type]() - obj.unmarshal_json(resp_json) - return obj diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py new file mode 100644 index 00000000..55a36b23 --- /dev/null +++ b/polygon/rest/trades.py @@ -0,0 +1,41 @@ +from .base import BaseClient +from typing import Optional, Any, Dict, Union +from .models import Trade, Sort, Order + +# https://polygon.io/docs/stocks +class TradesClient(BaseClient): + def list_trades(self, + ticker: str, + timestamp: Optional[str]=None, + timestamp_lt: Optional[str]=None, + timestamp_lte: Optional[str]=None, + timestamp_gt: Optional[str]=None, + timestamp_gte: 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 + ): + """ + Get trades for a ticker symbol in a given time range. + + :param ticker: The ticker symbol. + :param timestamp: Either a date with the format YYYY-MM-DD or a nanosecond timestamp. + :param timestamp_lt: Timestamp less than + :param timestamp_lte: Timestamp less than or equal to + :param timestamp_gt: Timestamp greater than + :param timestamp_gte: Timestamp greater than or equal to + :param limit: Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements. + :param sort: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window. + :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: List of aggregates + :rtype: List[Agg] + """ + url = f"/v3/trades/{ticker}" + + return self._paginate(path=url, params=self._get_params(self.list_trades, locals()), raw=raw, deserializer=Trade.from_dict) + + diff --git a/rest-example.py b/rest-example.py index a517db12..9e96f222 100644 --- a/rest-example.py +++ b/rest-example.py @@ -1,28 +1,13 @@ -import datetime - from polygon import RESTClient +from polygon.rest.models import Sort +c = RESTClient() -def ts_to_datetime(ts) -> str: - return datetime.datetime.fromtimestamp(ts / 1000.0).strftime('%Y-%m-%d %H:%M') - - -def main(): - key = "your api key" - - # RESTClient can be used as a context manager to facilitate closing the underlying http session - # https://requests.readthedocs.io/en/master/user/advanced/#session-objects - with RESTClient(key) as client: - from_ = "2019-01-01" - to = "2019-02-01" - resp = client.stocks_equities_aggregates("AAPL", 1, "minute", from_, to, unadjusted=False) - - print(f"Minute aggregates for {resp.ticker} between {from_} and {to}.") - - for result in resp.results: - dt = ts_to_datetime(result["t"]) - print(f"{dt}\n\tO: {result['o']}\n\tH: {result['h']}\n\tL: {result['l']}\n\tC: {result['c']} ") +aggs = c.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") +print(aggs) +trades = [] +for t in c.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): + trades.append(t) +print(trades) -if __name__ == '__main__': - main() \ No newline at end of file From 9f836668c19b600cb26c6e348a0f9bf808d39769 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 25 Apr 2022 15:05:26 -0400 Subject: [PATCH 002/448] Add CI (#115) * remove websocket, add linters and github actions for PRs for them * ci tweak * tweak ci (2) * vera feedback * add GH_TOKEN permisions --- .drone.yml | 38 ---- .github/workflows/lint.yml | 33 +++ poetry.lock | 290 ++++++++++++++++++++++++++ polygon/__init__.py | 1 - polygon/rest/__init__.py | 2 +- polygon/rest/aggs.py | 22 +- polygon/rest/base.py | 57 +++-- polygon/rest/models/__init__.py | 11 +- polygon/rest/models/aggs.py | 13 +- polygon/rest/models/trades.py | 2 +- polygon/rest/trades.py | 26 ++- polygon/websocket/__init__.py | 1 - polygon/websocket/websocket_client.py | 111 ---------- pyproject.toml | 34 +++ requirements.txt | 19 -- rest-example.py | 1 - setup.py | 39 ---- tox.ini | 7 - websocket_example/polygon.py | 32 --- 19 files changed, 431 insertions(+), 308 deletions(-) delete mode 100644 .drone.yml create mode 100644 .github/workflows/lint.yml create mode 100644 poetry.lock delete mode 100644 polygon/websocket/__init__.py delete mode 100644 polygon/websocket/websocket_client.py create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py delete mode 100644 tox.ini delete mode 100644 websocket_example/polygon.py diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 178de444..00000000 --- a/.drone.yml +++ /dev/null @@ -1,38 +0,0 @@ ---- -kind: pipeline -type: docker -name: release - -platform: - os: linux - arch: amd64 - -steps: - - name: build - image: python:3.7.5-alpine - commands: - - python setup.py sdist bdist_wheel - environment: - VERSION: ${DRONE_TAG##v} - - - name: release - image: python:3.7.5 - commands: - - pip install --user --upgrade twine - - ./upload - environment: - PASSWORD: - from_secret: pypi_token - USERNAME: __token__ - -trigger: - event: - - tag - ref: - - refs/tags/v* - ---- -kind: signature -hmac: c5572884fdd2183d7c63100530974a649f4607ee18c813570741d7a63f31cfae - -... diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..a6c5edfc --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,33 @@ +name: lint +on: + push: + tags: + - v* + branches: + - v1 + pull_request: +permissions: + contents: read +jobs: + lint: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ['3.7', '3.8', '3.9', '3.10'] + name: Lint ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Setup Poetry + uses: abatilo/actions-poetry@v2.0.0 + - name: Install pypi deps + run: poetry install + - name: Style lint + run: poetry run black --check polygon + - name: Static lint + run: poetry run mypy polygon + if: always() diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..9a99c7f0 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,290 @@ +[[package]] +name = "black" +version = "22.3.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "click" +version = "8.1.2" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "importlib-metadata" +version = "4.11.3" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] + +[[package]] +name = "mypy" +version = "0.942" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +mypy-extensions = ">=0.4.3" +tomli = ">=1.1.0" +typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""} +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "platformdirs" +version = "2.5.2" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "typed-ast" +version = "1.5.3" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "types-urllib3" +version = "1.26.13" +description = "Typing stubs for urllib3" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "typing-extensions" +version = "4.2.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "urllib3" +version = "1.26.9" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "zipp" +version = "3.8.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.7" +content-hash = "a62d0ece01b486b99384a3b2e21392ef28d135fd7646ab98cdcfe4cb83ea52a9" + +[metadata.files] +black = [ + {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, + {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"}, + {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"}, + {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"}, + {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"}, + {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"}, + {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"}, + {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"}, + {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"}, + {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"}, + {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"}, + {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"}, + {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"}, + {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"}, + {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"}, + {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"}, + {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"}, + {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"}, + {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, +] +click = [ + {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"}, + {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, + {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, +] +mypy = [ + {file = "mypy-0.942-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d"}, + {file = "mypy-0.942-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46"}, + {file = "mypy-0.942-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6776e5fa22381cc761df53e7496a805801c1a751b27b99a9ff2f0ca848c7eca0"}, + {file = "mypy-0.942-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee"}, + {file = "mypy-0.942-cp310-cp310-win_amd64.whl", hash = "sha256:64235137edc16bee6f095aba73be5334677d6f6bdb7fa03cfab90164fa294a17"}, + {file = "mypy-0.942-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b840cfe89c4ab6386c40300689cd8645fc8d2d5f20101c7f8bd23d15fca14904"}, + {file = "mypy-0.942-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b184db8c618c43c3a31b32ff00cd28195d39e9c24e7c3b401f3db7f6e5767f5"}, + {file = "mypy-0.942-cp36-cp36m-win_amd64.whl", hash = "sha256:1a0459c333f00e6a11cbf6b468b870c2b99a906cb72d6eadf3d1d95d38c9352c"}, + {file = "mypy-0.942-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c3e497588afccfa4334a9986b56f703e75793133c4be3a02d06a3df16b67a58"}, + {file = "mypy-0.942-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f6ad963172152e112b87cc7ec103ba0f2db2f1cd8997237827c052a3903eaa6"}, + {file = "mypy-0.942-cp37-cp37m-win_amd64.whl", hash = "sha256:0e2dd88410937423fba18e57147dd07cd8381291b93d5b1984626f173a26543e"}, + {file = "mypy-0.942-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:246e1aa127d5b78488a4a0594bd95f6d6fb9d63cf08a66dafbff8595d8891f67"}, + {file = "mypy-0.942-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d8d3ba77e56b84cd47a8ee45b62c84b6d80d32383928fe2548c9a124ea0a725c"}, + {file = "mypy-0.942-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2bc249409a7168d37c658e062e1ab5173300984a2dada2589638568ddc1db02b"}, + {file = "mypy-0.942-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9521c1265ccaaa1791d2c13582f06facf815f426cd8b07c3a485f486a8ffc1f3"}, + {file = "mypy-0.942-cp38-cp38-win_amd64.whl", hash = "sha256:e865fec858d75b78b4d63266c9aff770ecb6a39dfb6d6b56c47f7f8aba6baba8"}, + {file = "mypy-0.942-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ce34a118d1a898f47def970a2042b8af6bdcc01546454726c7dd2171aa6dfca"}, + {file = "mypy-0.942-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:10daab80bc40f84e3f087d896cdb53dc811a9f04eae4b3f95779c26edee89d16"}, + {file = "mypy-0.942-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3841b5433ff936bff2f4dc8d54cf2cdbfea5d8e88cedfac45c161368e5770ba6"}, + {file = "mypy-0.942-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f7106cbf9cc2f403693bf50ed7c9fa5bb3dfa9007b240db3c910929abe2a322"}, + {file = "mypy-0.942-cp39-cp39-win_amd64.whl", hash = "sha256:7742d2c4e46bb5017b51c810283a6a389296cda03df805a4f7869a6f41246534"}, + {file = "mypy-0.942-py3-none-any.whl", hash = "sha256:a1b383fe99678d7402754fe90448d4037f9512ce70c21f8aee3b8bf48ffc51db"}, + {file = "mypy-0.942.tar.gz", hash = "sha256:17e44649fec92e9f82102b48a3bf7b4a5510ad0cd22fa21a104826b5db4903e2"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +platformdirs = [ + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +typed-ast = [ + {file = "typed_ast-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ad3b48cf2b487be140072fb86feff36801487d4abb7382bb1929aaac80638ea"}, + {file = "typed_ast-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:542cd732351ba8235f20faa0fc7398946fe1a57f2cdb289e5497e1e7f48cfedb"}, + {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc2c11ae59003d4a26dda637222d9ae924387f96acae9492df663843aefad55"}, + {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd5df1313915dbd70eaaa88c19030b441742e8b05e6103c631c83b75e0435ccc"}, + {file = "typed_ast-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:e34f9b9e61333ecb0f7d79c21c28aa5cd63bec15cb7e1310d7d3da6ce886bc9b"}, + {file = "typed_ast-1.5.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f818c5b81966d4728fec14caa338e30a70dfc3da577984d38f97816c4b3071ec"}, + {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3042bfc9ca118712c9809201f55355479cfcdc17449f9f8db5e744e9625c6805"}, + {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fff9fdcce59dc61ec1b317bdb319f8f4e6b69ebbe61193ae0a60c5f9333dc49"}, + {file = "typed_ast-1.5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8e0b8528838ffd426fea8d18bde4c73bcb4167218998cc8b9ee0a0f2bfe678a6"}, + {file = "typed_ast-1.5.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ef1d96ad05a291f5c36895d86d1375c0ee70595b90f6bb5f5fdbee749b146db"}, + {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed44e81517364cb5ba367e4f68fca01fba42a7a4690d40c07886586ac267d9b9"}, + {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f60d9de0d087454c91b3999a296d0c4558c1666771e3460621875021bf899af9"}, + {file = "typed_ast-1.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9e237e74fd321a55c90eee9bc5d44be976979ad38a29bbd734148295c1ce7617"}, + {file = "typed_ast-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee852185964744987609b40aee1d2eb81502ae63ee8eef614558f96a56c1902d"}, + {file = "typed_ast-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:27e46cdd01d6c3a0dd8f728b6a938a6751f7bd324817501c15fb056307f918c6"}, + {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d64dabc6336ddc10373922a146fa2256043b3b43e61f28961caec2a5207c56d5"}, + {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8cdf91b0c466a6c43f36c1964772918a2c04cfa83df8001ff32a89e357f8eb06"}, + {file = "typed_ast-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:9cc9e1457e1feb06b075c8ef8aeb046a28ec351b1958b42c7c31c989c841403a"}, + {file = "typed_ast-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e20d196815eeffb3d76b75223e8ffed124e65ee62097e4e73afb5fec6b993e7a"}, + {file = "typed_ast-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:37e5349d1d5de2f4763d534ccb26809d1c24b180a477659a12c4bde9dd677d74"}, + {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f1a27592fac87daa4e3f16538713d705599b0a27dfe25518b80b6b017f0a6d"}, + {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8831479695eadc8b5ffed06fdfb3e424adc37962a75925668deeb503f446c0a3"}, + {file = "typed_ast-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:20d5118e494478ef2d3a2702d964dae830aedd7b4d3b626d003eea526be18718"}, + {file = "typed_ast-1.5.3.tar.gz", hash = "sha256:27f25232e2dd0edfe1f019d6bfaaf11e86e657d9bdb7b0956db95f560cceb2b3"}, +] +types-urllib3 = [ + {file = "types-urllib3-1.26.13.tar.gz", hash = "sha256:40f8fb5e8cd7d57e8aefdee3fdd5e930aa1a1bb4179cdadd55226cea588af790"}, + {file = "types_urllib3-1.26.13-py3-none-any.whl", hash = "sha256:ff7500641824f881b2c7bde4cc57e6c3abf03d1e005bae83aca752e77213a5da"}, +] +typing-extensions = [ + {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, + {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, +] +urllib3 = [ + {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, + {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, +] +zipp = [ + {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, + {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, +] diff --git a/polygon/__init__.py b/polygon/__init__.py index 9eb4d89a..f87495cd 100644 --- a/polygon/__init__.py +++ b/polygon/__init__.py @@ -1,2 +1 @@ -from .websocket import WebSocketClient, STOCKS_CLUSTER, FOREX_CLUSTER, CRYPTO_CLUSTER from .rest import RESTClient diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 89861e3a..8f15daae 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1,6 +1,6 @@ from .aggs import AggsClient from .trades import TradesClient + class RESTClient(AggsClient, TradesClient): pass - diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index b345d0e1..2d8e87d5 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -4,18 +4,19 @@ # https://polygon.io/docs/stocks class AggsClient(BaseClient): - def get_aggs(self, + def get_aggs( + self, ticker: str, multiplier: int, timespan: str, # "from" is a keyword in python https://www.w3schools.com/python/python_ref_keywords.asp from_: str, to: str, - adjusted: Optional[bool]=None, - sort: Optional[Union[str, Sort]]=None, - limit: Optional[int]=None, - params: Optional[Dict[str, Any]]=None, - raw: bool=False + adjusted: Optional[bool] = None, + sort: Optional[Union[str, Sort]] = None, + limit: Optional[int] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, ) -> List[Agg]: """ Get aggregate bars for a ticker over a given date range in custom time window sizes. @@ -35,5 +36,10 @@ def get_aggs(self, """ url = f"/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" - return self._get(path=url, params=self._get_params(self.get_aggs, locals()), resultKey="results", deserializer=Agg.from_dict, raw=raw) - + return self._get( + path=url, + params=self._get_params(self.get_aggs, locals()), + resultKey="results", + deserializer=Agg.from_dict, + raw=raw, + ) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 2cbd985d..9349b251 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -5,43 +5,54 @@ from enum import Enum from typing import Optional, Any -base = 'https://api.polygon.io' +base = "https://api.polygon.io" env_key = "POLYGON_API_KEY" # https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html class BaseClient: def __init__( - self, - api_key: Optional[str] = os.getenv(env_key), - connect_timeout: float = 10.0, - read_timeout: float = 10.0, - num_pools: int = 10, - retries = 3, - base: str = base - ): + self, + api_key: Optional[str] = os.getenv(env_key), + connect_timeout: float = 10.0, + read_timeout: float = 10.0, + num_pools: int = 10, + retries=3, + base: str = base, + ): if api_key is None: - raise Exception(f"Must specify env var {env_key} or pass api_key in constructor") + raise Exception( + f"Must specify env var {env_key} or pass api_key in constructor" + ) self.API_KEY = api_key self.BASE = base # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool - self.client = urllib3.PoolManager(num_pools=num_pools, headers={ - 'Authorization': 'Bearer ' + self.API_KEY - }) - self.timeout=urllib3.Timeout(connect=connect_timeout, read=read_timeout) + self.client = urllib3.PoolManager( + num_pools=num_pools, headers={"Authorization": "Bearer " + self.API_KEY} + ) + self.timeout = urllib3.Timeout(connect=connect_timeout, read=read_timeout) self.retries = retries def _decode(self, resp): - return json.loads(resp.data.decode('utf-8')) + return json.loads(resp.data.decode("utf-8")) - def _get(self, path: str, params: Optional[dict] = None, resultKey: Optional[str] = None, deserializer = None, raw: bool = False) -> Any: + def _get( + self, + path: str, + params: Optional[dict] = None, + resultKey: Optional[str] = None, + deserializer=None, + raw: bool = False, + ) -> Any: if params is None: params = {} params = {str(k): str(v) for k, v in params.items() if v is not None} - resp = self.client.request('GET', self.BASE + path, fields=params, retries=self.retries) + resp = self.client.request( + "GET", self.BASE + path, fields=params, retries=self.retries + ) if resp.status != 200: - raise Exception(resp.data.decode('utf-8')) + raise Exception(resp.data.decode("utf-8")) if raw: return resp @@ -50,7 +61,7 @@ def _get(self, path: str, params: Optional[dict] = None, resultKey: Optional[str if resultKey: obj = obj[resultKey] - + if deserializer: obj = [deserializer(o) for o in obj] @@ -63,7 +74,7 @@ def _get_params(self, fn, caller_locals): # https://docs.python.org/3.7/library/inspect.html#inspect.Signature for argname, v in inspect.signature(fn).parameters.items(): # https://docs.python.org/3.7/library/inspect.html#inspect.Parameter - if argname in ['params', 'raw']: + if argname in ["params", "raw"]: continue if v.default != v.empty: # timestamp_lt -> timestamp.lt @@ -77,14 +88,16 @@ def _get_params(self, fn, caller_locals): def _paginate(self, path: str, params: dict, raw: bool, deserializer): while True: - resp = self._get(path=path, params=params, deserializer=deserializer, raw=True) + resp = self._get( + path=path, params=params, deserializer=deserializer, raw=True + ) if raw: return resp decoded = self._decode(resp) for t in decoded["results"]: yield deserializer(t) if "next_url" in decoded: - path = decoded["next_url"].replace(self.BASE, '') + path = decoded["next_url"].replace(self.BASE, "") params = {} else: return diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index a912d6cc..90f8d0bc 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -2,11 +2,12 @@ from .trades import * from enum import Enum + class Sort(Enum): - ASC = 'asc' - DESC = 'desc' + ASC = "asc" + DESC = "desc" -class Order(Enum): - ASC = 'asc' - DESC = 'desc' +class Order(Enum): + ASC = "asc" + DESC = "desc" diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index b303c21d..da48ee53 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -1,5 +1,6 @@ from dataclasses import dataclass + @dataclass class Agg: open: float @@ -13,14 +14,4 @@ class Agg: @staticmethod def from_dict(d): - return Agg( - d['o'], - d['h'], - d['l'], - d['c'], - d['v'], - d['vw'], - d['t'], - d['n'] - ) - + return Agg(d["o"], d["h"], d["l"], d["c"], d["v"], d["vw"], d["t"], d["n"]) diff --git a/polygon/rest/models/trades.py b/polygon/rest/models/trades.py index a68991e7..5fc7a1d5 100644 --- a/polygon/rest/models/trades.py +++ b/polygon/rest/models/trades.py @@ -1,6 +1,7 @@ from typing import Optional, List from dataclasses import dataclass + @dataclass class Trade: "Trade contains trade data for a specified ticker symbol." @@ -20,4 +21,3 @@ class Trade: @staticmethod def from_dict(d): return Trade(**d) - diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 55a36b23..2dc43da3 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -4,18 +4,19 @@ # https://polygon.io/docs/stocks class TradesClient(BaseClient): - def list_trades(self, + def list_trades( + self, ticker: str, - timestamp: Optional[str]=None, - timestamp_lt: Optional[str]=None, - timestamp_lte: Optional[str]=None, - timestamp_gt: Optional[str]=None, - timestamp_gte: Optional[str]=None, + timestamp: Optional[str] = None, + timestamp_lt: Optional[str] = None, + timestamp_lte: Optional[str] = None, + timestamp_gt: Optional[str] = None, + timestamp_gte: 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 + params: Optional[Dict[str, Any]] = None, + raw: bool = False, ): """ Get trades for a ticker symbol in a given time range. @@ -36,6 +37,9 @@ def list_trades(self, """ url = f"/v3/trades/{ticker}" - return self._paginate(path=url, params=self._get_params(self.list_trades, locals()), raw=raw, deserializer=Trade.from_dict) - - + return self._paginate( + path=url, + params=self._get_params(self.list_trades, locals()), + raw=raw, + deserializer=Trade.from_dict, + ) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py deleted file mode 100644 index a0f9603a..00000000 --- a/polygon/websocket/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .websocket_client import WebSocketClient, STOCKS_CLUSTER, FOREX_CLUSTER, CRYPTO_CLUSTER diff --git a/polygon/websocket/websocket_client.py b/polygon/websocket/websocket_client.py deleted file mode 100644 index 3c046485..00000000 --- a/polygon/websocket/websocket_client.py +++ /dev/null @@ -1,111 +0,0 @@ -import signal -import threading -from typing import Optional, Callable - -import websocket - -STOCKS_CLUSTER = "stocks" -FOREX_CLUSTER = "forex" -CRYPTO_CLUSTER = "crypto" - - -class WebSocketClient: - DEFAULT_HOST = "socket.polygon.io" - - # TODO: Either an instance of the client couples 1:1 with the cluster or an instance of the Client couples 1:3 with - # the 3 possible clusters (I think I like client per, but then a problem is the user can make multiple clients for - # the same cluster and that's not desirable behavior, - # somehow keeping track with multiple Client instances will be the difficulty) - def __init__(self, cluster: str, auth_key: str, process_message: Optional[Callable[[str], None]] = None, - on_close: Optional[Callable[[websocket.WebSocketApp], None]] = None, - on_error: Optional[Callable[[websocket.WebSocketApp, str], None]] = None): - self._host = self.DEFAULT_HOST - self.url = f"wss://{self._host}/{cluster}" - self.ws: websocket.WebSocketApp = websocket.WebSocketApp(self.url, on_open=self._default_on_open(), - on_close=self._default_on_close, - on_error=self._default_on_error, - on_message=self._default_on_message()) - self.auth_key = auth_key - - self.process_message = process_message - self.ws.on_close = on_close - self.ws.on_error = on_error - - # being authenticated is an event that must occur before any other action is sent to the server - self._authenticated = threading.Event() - # self._run_thread is only set if the client is run asynchronously - self._run_thread: Optional[threading.Thread] = None - - # TODO: this probably isn't great design. - # If the user defines their own signal handler then this will gets overwritten. - # We still need to make sure that killing, terminating, interrupting the program closes the connection - signal.signal(signal.SIGINT, self._cleanup_signal_handler()) - signal.signal(signal.SIGTERM, self._cleanup_signal_handler()) - - def run(self): - self.ws.run_forever() - - def run_async(self): - self._run_thread = threading.Thread(target=self.run) - self._run_thread.start() - - def close_connection(self): - self.ws.close() - if self._run_thread: - self._run_thread.join() - - def subscribe(self, *params): - # TODO: make this a decorator or context manager - self._authenticated.wait() - - sub_message = '{"action":"subscribe","params":"%s"}' % self._format_params(params) - self.ws.send(sub_message) - - def unsubscribe(self, *params): - # TODO: make this a decorator or context manager - self._authenticated.wait() - - sub_message = '{"action":"unsubscribe","params":"%s"}' % self._format_params(params) - self.ws.send(sub_message) - - def _cleanup_signal_handler(self): - return lambda signalnum, frame: self.close_connection() - - def _authenticate(self, ws): - ws.send('{"action":"auth","params":"%s"}' % self.auth_key) - self._authenticated.set() - - @staticmethod - def _format_params(params): - return ",".join(params) - - @property - def process_message(self): - return self.__process_message - - @process_message.setter - def process_message(self, pm): - if pm: - self.__process_message = pm - self.ws.on_message = lambda ws, message: self.__process_message(message) - - def _default_on_message(self): - return lambda ws, message: self._default_process_message(message) - - @staticmethod - def _default_process_message(message): - print(message) - - def _default_on_open(self): - def f(ws): - self._authenticate(ws) - - return f - - @staticmethod - def _default_on_error(ws, error): - print("error:", error) - - @staticmethod - def _default_on_close(ws): - print("### closed ###") diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..c351c6c2 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,34 @@ +[tool.poetry] +name = "client-python" +version = "0.3.0" +description = "Official Polygon.io REST and Websocket client." +authors = ["polygon.io"] +license = "MIT" +homepage = "https://polygon.io" +repository = "https://github.com/polygon-io/client-python" +documentation = "https://polygon.io/docs" +keywords = [ + "polygon", + "free", + "rest", + "stock", + "market", + "data", + "api", + "polygon.io", + "websocket", + "client" +] + +[tool.poetry.dependencies] +python = "^3.7" +urllib3 = "^1.26.9" + +[tool.poetry.dev-dependencies] +black = "^22.3.0" +mypy = "^0.942" +types-urllib3 = "^1.26.13" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index a62a3359..00000000 --- a/requirements.txt +++ /dev/null @@ -1,19 +0,0 @@ -atomicwrites>=1.3.0 -attrs>=19.3.0 -certifi>=2019.9.11 -chardet>=3.0.4 -idna>=2.8 -importlib-metadata>=0.23 -more-itertools>=7.2.0 -packaging>=19.2 -pluggy>=0.13.0 -py>=1.8.0 -pyparsing>=2.4.4 -pytest>=5.2.2 -requests>=2.22.0 -six>=1.13.0 -urllib3>=1.25.6 -wcwidth>=0.1.7 -websocket-client>=0.56.0 -websockets>=8.0.2 -zipp>=0.6.0 diff --git a/rest-example.py b/rest-example.py index 9e96f222..96586835 100644 --- a/rest-example.py +++ b/rest-example.py @@ -10,4 +10,3 @@ for t in c.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): trades.append(t) print(trades) - diff --git a/setup.py b/setup.py deleted file mode 100644 index 45095315..00000000 --- a/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python - -from setuptools import setup, find_packages - -import os -import sys - -version = os.getenv("VERSION") -if not version: - print("no version supplied") - sys.exit(1) - -def get_readme_md_contents(): - """read the contents of your README file""" - with open("README.md", encoding='utf-8') as f: - long_description = f.read() - return long_description - -setup( - name="polygon-api-client", - version=version, - description="Polygon API client", - long_description=get_readme_md_contents(), - long_description_content_type="text/markdown", - author_email="support@polygon.io", - url="https://github.com/polygon-io/client-python", - packages=find_packages(), - classifiers=[ - "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3", - "Operating System :: OS Independent", - "Topic :: Office/Business :: Financial :: Investment" - ], - install_requires=[ - "websocket-client>=0.56.0", - "websockets>=8.0.2", - "requests>=2.22.0" - ] -) diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 8fa455ad..00000000 --- a/tox.ini +++ /dev/null @@ -1,7 +0,0 @@ -[tox] -envlist = py3 - -[testenv] -deps = -r requirements.txt -commands = pytest -passenv = API_KEY diff --git a/websocket_example/polygon.py b/websocket_example/polygon.py deleted file mode 100644 index 760a27c0..00000000 --- a/websocket_example/polygon.py +++ /dev/null @@ -1,32 +0,0 @@ -# Be sure to pip install polygon-api-client - -import time - -from polygon import WebSocketClient, STOCKS_CLUSTER - - -def my_custom_process_message(message): - print("this is my custom message processing", message) - - -def my_custom_error_handler(ws, error): - print("this is my custom error handler", error) - - -def my_custom_close_handler(ws): - print("this is my custom close handler") - - -def main(): - key = 'your api key' - my_client = WebSocketClient(STOCKS_CLUSTER, key, my_custom_process_message) - my_client.run_async() - - my_client.subscribe("T.MSFT", "T.AAPL", "T.AMD", "T.NVDA") - time.sleep(1) - - my_client.close_connection() - - -if __name__ == "__main__": - main() From 721da971e2d009e3108ac479057e37504d7d110b Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Tue, 26 Apr 2022 10:29:53 -0400 Subject: [PATCH 003/448] Add unittest (#116) * test harness * add httpretty * add poetry run to Makefile * add empty key * add comments * pass empty api key --- .github/workflows/lint.yml | 4 ++-- .github/workflows/test.yml | 30 ++++++++++++++++++++++++++++++ Makefile | 37 +++++++++++++++++++++++++++++++++++++ poetry.lock | 13 ++++++++++++- pyproject.toml | 1 + tests/mocks.py | 22 ++++++++++++++++++++++ tests/test_aggs.py | 11 +++++++++++ 7 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 Makefile create mode 100644 tests/mocks.py create mode 100644 tests/test_aggs.py diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a6c5edfc..c9fc2fc4 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -27,7 +27,7 @@ jobs: - name: Install pypi deps run: poetry install - name: Style lint - run: poetry run black --check polygon + run: make style - name: Static lint - run: poetry run mypy polygon + run: make static if: always() diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..a1afc865 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,30 @@ +name: unittest +on: + push: + tags: + - v* + branches: + - v1 + pull_request: +permissions: + contents: read +jobs: + test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ['3.7', '3.8', '3.9', '3.10'] + name: Lint ${{ matrix.python-version }} + steps: + - uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Setup Poetry + uses: abatilo/actions-poetry@v2.0.0 + - name: Install pypi deps + run: poetry install + - name: Unit tests + run: make test diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..f6751664 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +.DEFAULT_GOAL := help +TARGET_MAX_CHAR_NUM := 20 + +GREEN := $(shell tput -Txterm setaf 2) +YELLOW := $(shell tput -Txterm setaf 3) +WHITE := $(shell tput -Txterm setaf 7) +RESET := $(shell tput -Txterm sgr0) + +.PHONY: help lint style static test + +## Show help +help: + @awk '/^[a-zA-Z\-_0-9]+:/ { \ + helpMessage = match(lastLine, /^## (.*)/); \ + if (helpMessage) { \ + helpCommand = substr($$1, 0, index($$1, ":")-1); \ + helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \ + printf " ${YELLOW}%-$(TARGET_MAX_CHAR_NUM)s${RESET} ${GREEN}%s${RESET}\n", helpCommand, helpMessage; \ + } \ + } \ + { lastLine = $$0 }' $(MAKEFILE_LIST) + +## Check code style +style: + poetry run black polygon + +## Check static types +static: + poetry run mypy polygon + +## Check code style and static types +lint: style static + +## Run unit tests +test: + poetry run python -m unittest discover -s tests + diff --git a/poetry.lock b/poetry.lock index 9a99c7f0..7a9b6760 100644 --- a/poetry.lock +++ b/poetry.lock @@ -41,6 +41,14 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "httpretty" +version = "1.1.4" +description = "HTTP client mock for Python" +category = "dev" +optional = false +python-versions = ">=3" + [[package]] name = "importlib-metadata" version = "4.11.3" @@ -165,7 +173,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "a62d0ece01b486b99384a3b2e21392ef28d135fd7646ab98cdcfe4cb83ea52a9" +content-hash = "992b579a470d1662ac4e64e78155506ec2f8c31013124a4cbb43cf0625a2931c" [metadata.files] black = [ @@ -201,6 +209,9 @@ colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] +httpretty = [ + {file = "httpretty-1.1.4.tar.gz", hash = "sha256:20de0e5dd5a18292d36d928cc3d6e52f8b2ac73daec40d41eb62dee154933b68"}, +] importlib-metadata = [ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, diff --git a/pyproject.toml b/pyproject.toml index c351c6c2..98d3228f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ urllib3 = "^1.26.9" black = "^22.3.0" mypy = "^0.942" types-urllib3 = "^1.26.13" +httpretty = "^1.1.4" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/tests/mocks.py b/tests/mocks.py new file mode 100644 index 00000000..ce35c718 --- /dev/null +++ b/tests/mocks.py @@ -0,0 +1,22 @@ +from polygon import RESTClient +import unittest +import httpretty + +mocks = [ + ( + "/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04", + '{"ticker":"AAPL","queryCount":2,"resultsCount":2,"adjusted":true,"results":[{"v":6.42646396e+08,"vw":1.469,"o":1.5032,"c":1.4604,"h":1.5064,"l":1.4489,"t":1112331600000,"n":82132},{"v":5.78172308e+08,"vw":1.4589,"o":1.4639,"c":1.4675,"h":1.4754,"l":1.4343,"t":1112587200000,"n":65543}],"status":"OK","request_id":"12afda77aab3b1936c5fb6ef4241ae42","count":2}' + ) +] + +class BaseTest(unittest.TestCase): + setup = False + def setUp(self): + if self.setup: + return + httpretty.enable(verbose=True, allow_net_connect=False) + c = RESTClient("") + for m in mocks: + httpretty.register_uri(httpretty.GET, c.BASE + m[0], m[1]) + self.setup = True + diff --git a/tests/test_aggs.py b/tests/test_aggs.py new file mode 100644 index 00000000..f8c88cca --- /dev/null +++ b/tests/test_aggs.py @@ -0,0 +1,11 @@ +from polygon import RESTClient +from polygon.rest.models import Agg +from mocks import BaseTest + +class AggsTest(BaseTest): + def test_get_aggs(self): + c = RESTClient("") + aggs = c.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") + expected = [Agg(open=1.5032, high=1.5064, low=1.4489, close=1.4604, volume=642646396.0, vwap=1.469, timestamp=1112331600000, transactions=82132), Agg(open=1.4639, high=1.4754, low=1.4343, close=1.4675, volume=578172308.0, vwap=1.4589, timestamp=1112587200000, transactions=65543)] + self.assertEqual(aggs, expected) + From 937d4eca0a0ce9f967d284ea37abe3937abf0747 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Tue, 26 Apr 2022 12:10:18 -0400 Subject: [PATCH 004/448] add better types (#118) --- polygon/rest/aggs.py | 3 ++- polygon/rest/models/aggs.py | 19 ++++++++++++++----- polygon/rest/trades.py | 5 +++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 2d8e87d5..ccaa5187 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -1,6 +1,7 @@ from .base import BaseClient from typing import Optional, Any, Dict, List, Union from .models import Agg, Sort +from urllib3 import HTTPResponse # https://polygon.io/docs/stocks class AggsClient(BaseClient): @@ -17,7 +18,7 @@ def get_aggs( limit: Optional[int] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> List[Agg]: + ) -> Union[List[Agg], HTTPResponse]: """ Get aggregate bars for a ticker over a given date range in custom time window sizes. diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index da48ee53..bdaa311c 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -1,17 +1,26 @@ from dataclasses import dataclass - +from typing import Optional @dataclass class Agg: + timestamp: int open: float high: float low: float close: float volume: float - vwap: float - timestamp: int - transactions: int + vwap: Optional[float] + transactions: Optional[int] @staticmethod def from_dict(d): - return Agg(d["o"], d["h"], d["l"], d["c"], d["v"], d["vw"], d["t"], d["n"]) + return Agg( + timestamp=d["t"], + open=d["o"], + high=d["h"], + low=d["l"], + close=d["c"], + volume=d["v"], + vwap=d.get("vw", None), + transactions=d.get("n", None) + ) diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 2dc43da3..3d22476b 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -1,6 +1,7 @@ from .base import BaseClient -from typing import Optional, Any, Dict, Union +from typing import Optional, Any, Dict, Union, Iterator from .models import Trade, Sort, Order +from urllib3 import HTTPResponse # https://polygon.io/docs/stocks class TradesClient(BaseClient): @@ -17,7 +18,7 @@ def list_trades( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ): + ) -> Union[Iterator[Trade], HTTPResponse]: """ Get trades for a ticker symbol in a given time range. From fdba6e689694765e92ce5d2edfb9e18967864d73 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Tue, 26 Apr 2022 12:14:19 -0400 Subject: [PATCH 005/448] Quotes (#117) --- polygon/rest/__init__.py | 3 +- polygon/rest/models/__init__.py | 1 + polygon/rest/models/quotes.py | 61 ++++++++++++++++++++++++++++++ polygon/rest/quotes.py | 67 +++++++++++++++++++++++++++++++++ 4 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 polygon/rest/models/quotes.py create mode 100644 polygon/rest/quotes.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 8f15daae..389c6c77 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1,6 +1,7 @@ from .aggs import AggsClient from .trades import TradesClient +from .quotes import QuotesClient -class RESTClient(AggsClient, TradesClient): +class RESTClient(AggsClient, TradesClient, QuotesClient): pass diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 90f8d0bc..41891552 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -1,5 +1,6 @@ from .aggs import * from .trades import * +from .quotes import * from enum import Enum diff --git a/polygon/rest/models/quotes.py b/polygon/rest/models/quotes.py new file mode 100644 index 00000000..fa2b4503 --- /dev/null +++ b/polygon/rest/models/quotes.py @@ -0,0 +1,61 @@ +from typing import Optional, List +from dataclasses import dataclass + + +@dataclass +class Quote: + "Quote contains quote data for a specified ticker symbol." + ask_exchange: Optional[int] = None + ask_price: Optional[float] = None + ask_size: Optional[float] = None + bid_exchange: Optional[int] = None + bid_price: Optional[float] = None + bid_size: Optional[float] = None + conditions: Optional[List[int]] = None + indicators: Optional[List[int]] = None + participant_timestamp: Optional[int] = None + sequence_number: Optional[int] = None + sip_timestamp: Optional[int] = None + tape: Optional[int] = None + trf_timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return Quote(**d) + +@dataclass +class LastQuote: + "LastQuote contains data for the most recent NBBO (Quote) tick for a given stock." + ticker: Optional[str] = None + trf_timestamp: Optional[int] = None + sequence_number: Optional[int] = None + sip_timestamp: Optional[int] = None + participant_timestamp: Optional[int] = None + ask_price: Optional[float] = None + ask_size: Optional[int] = None + ask_exchange: Optional[int] = None + conditions: Optional[List[int]] = None + indicators: Optional[List[int]] = None + bid_price: Optional[float] = None + bid_size: Optional[int] = None + bid_exchange: Optional[int] = None + tape: Optional[int] = None + + @staticmethod + def from_dict(d): + return LastQuote( + ticker=d.get("T", None), + trf_timestamp=d.get("f", None), + sequence_number=d.get("q", None), + sip_timestamp=d.get("t", None), + participant_timestamp=d.get("y", None), + ask_price=d.get("P", None), + ask_size=d.get("S", None), + ask_exchange=d.get("X", None), + conditions=d.get("c", None), + indicators=d.get("i", None), + bid_price=d.get("p", None), + bid_size=d.get("s", None), + bid_exchange=d.get("x", None), + tape=d.get("z", None) + ) \ No newline at end of file diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py new file mode 100644 index 00000000..1555f635 --- /dev/null +++ b/polygon/rest/quotes.py @@ -0,0 +1,67 @@ +from .base import BaseClient +from typing import Optional, Any, Dict, List, Union +from .models import Quote, LastQuote, Sort, Order +from urllib3 import HTTPResponse + +# https://polygon.io/docs/stocks +class QuotesClient(BaseClient): + def list_quotes( + self, + ticker: str, + timestamp: Optional[str] = None, + timestamp_lt: Optional[str] = None, + timestamp_lte: Optional[str] = None, + timestamp_gt: Optional[str] = None, + timestamp_gte: 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[List[Quote], HTTPResponse]: + """ + Get quotes for a ticker symbol in a given time range. + + :param ticker: The ticker symbol to get quotes for. + :param timestamp: Query by timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp. + :param timestamp_lt: Timestamp less than + :param timestamp_lte: Timestamp less than or equal to + :param timestamp_gt: Timestamp greater than + :param timestamp_gte: Timestamp greater than or equal to + :param limit: Limit the number of results returned, default is 10 and max is 50000. + :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 HTTPResponse object instead of results object + :return: List of quotes + :rtype: List[Quote] + """ + url = f"/v3/quotes/{ticker}" + + return self._paginate( + path=url, + params=self._get_params(self.list_quotes, locals()), + raw=raw, + deserializer=Quote.from_dict, + ) + + def get_last_quote( + self, + ticker: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False + ): + """ + Get the most recent NBBO (Quote) tick for a given stock. + + :param ticker: The ticker symbol of the stock/equity. + :param params: Any additional query params + :param raw: Return HTTPResponse object instead of results object + :return: Last Quote + :rtype: LastQuote + """ + url = f"/v2/last/nbbo/{ticker}" + + return self._get(path=url, params=params, deserializer=LastQuote.from_dict, raw=raw) + + \ No newline at end of file From 02c6cf4c0ce8f13d44560c336efe5f01fdbabc46 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Tue, 26 Apr 2022 12:31:43 -0400 Subject: [PATCH 006/448] add httpResponse to get_last_quote (#120) Co-authored-by: Darcy Linde <{47221647+Darcy-Linde@users.noreply.github.com}> --- polygon/rest/quotes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index 1555f635..c8710958 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -50,7 +50,7 @@ def get_last_quote( ticker: str, params: Optional[Dict[str, Any]] = None, raw: bool = False - ): + ) -> Union[LastQuote, HTTPResponse]: """ Get the most recent NBBO (Quote) tick for a given stock. From 72366efa741ee6c3146e8fd5082ae225e7cd8324 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Tue, 26 Apr 2022 14:06:07 -0400 Subject: [PATCH 007/448] Markets (#121) --- polygon/rest/__init__.py | 3 ++- polygon/rest/models/__init__.py | 2 ++ polygon/rest/models/markets.py | 31 +++++++++++++++++++++++++ polygon/rest/reference.py | 40 +++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 polygon/rest/models/markets.py create mode 100644 polygon/rest/reference.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 389c6c77..3bc193dd 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1,7 +1,8 @@ from .aggs import AggsClient from .trades import TradesClient from .quotes import QuotesClient +from .reference import MarketsClient -class RESTClient(AggsClient, TradesClient, QuotesClient): +class RESTClient(AggsClient, TradesClient, QuotesClient, MarketsClient): pass diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 41891552..c86fb398 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -1,6 +1,8 @@ from .aggs import * from .trades import * from .quotes import * +from .markets import * + from enum import Enum diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py new file mode 100644 index 00000000..561dbeef --- /dev/null +++ b/polygon/rest/models/markets.py @@ -0,0 +1,31 @@ +from typing import Optional, Dict +from dataclasses import dataclass + + +@dataclass +class MarketHoliday: + "MarketHoliday contains data for upcoming market holidays and their open/close times." + close: Optional[str] = None + date: Optional[str] = None + exchange: Optional[str] = None + name: Optional[str] = None + open: Optional[str] = None + status: Optional[str] = None + + @staticmethod + def from_dict(d): + return MarketHoliday(**d) + +@dataclass +class MarketStatus: + "MarketStatus contains data for the current trading status of the exchanges and overall financial markets." + after_hours: Optional[bool] = None + currencies: Optional[Dict[str, str]] = None + early_hours: Optional[bool] = None + exchanges: Optional[Dict[str, str]] = None + market: Optional[str] = None + server_time: Optional[str] = None + + @staticmethod + def from_dict(d): + return MarketStatus(**d) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py new file mode 100644 index 00000000..10a6702f --- /dev/null +++ b/polygon/rest/reference.py @@ -0,0 +1,40 @@ +from .base import BaseClient +from typing import Optional, Any, Dict, List, Union +from .models import MarketHoliday, MarketStatus +from urllib3 import HTTPResponse + +# https://polygon.io/docs/stocks +class MarketsClient(BaseClient): + def list_market_holidays( + self, + params: Optional[Dict[str, Any]] = None, + raw: bool = False + ) -> Union[List[MarketHoliday], HTTPResponse]: + """ + Get upcoming market holidays and their open/close times. + + :param params: Any additional query params + :param raw: Return HTTPResponse object instead of results object + :return: List of quotes + :rtype: List[Quote] + """ + url = "/v1/marketstatus/upcoming" + + return self._get(path=url, params=params, deserializer=MarketHoliday.from_dict, raw=raw) + + def get_market_status( + self, + params: Optional[Dict[str, Any]] = None, + raw: bool = False + ) -> Union[MarketStatus, HTTPResponse]: + """ + Get the current trading status of the exchanges and overall financial markets. + + :param params: Any additional query params + :param raw: Return HTTPResponse object instead of results object + :return: List of quotes + :rtype: List[Quote] + """ + url = "/v1/marketstatus/now" + + return self._get(path=url, params=params, deserializer=MarketStatus.from_dict, raw=raw) \ No newline at end of file From 2dd1bcdec1dc8c903dd50ba19fd7b6bf562a842b Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Wed, 27 Apr 2022 10:50:39 -0400 Subject: [PATCH 008/448] Tickers (#122) --- polygon/rest/__init__.py | 4 +- polygon/rest/models/__init__.py | 2 +- polygon/rest/models/tickers.py | 121 ++++++++++++++++++++++++++++ polygon/rest/reference.py | 135 +++++++++++++++++++++++++++++++- 4 files changed, 256 insertions(+), 6 deletions(-) create mode 100644 polygon/rest/models/tickers.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 3bc193dd..849443f1 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -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 diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index c86fb398..13bc71ea 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -2,6 +2,7 @@ from .trades import * from .quotes import * from .markets import * +from .tickers import * from enum import Enum @@ -10,7 +11,6 @@ class Sort(Enum): ASC = "asc" DESC = "desc" - class Order(Enum): ASC = "asc" DESC = "desc" diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py new file mode 100644 index 00000000..105a8a30 --- /dev/null +++ b/polygon/rest/models/tickers.py @@ -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) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 10a6702f..bfe5899f 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -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 @@ -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) \ No newline at end of file + 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) \ No newline at end of file From aa6c84bf9ca778ea08b03edf9fdb74b583b595ed Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Wed, 27 Apr 2022 11:37:22 -0400 Subject: [PATCH 009/448] Splits (#124) --- polygon/rest/__init__.py | 6 +- polygon/rest/models/__init__.py | 2 + polygon/rest/models/aggs.py | 17 +++--- polygon/rest/models/markets.py | 1 + polygon/rest/models/quotes.py | 5 +- polygon/rest/models/splits.py | 15 +++++ polygon/rest/models/tickers.py | 9 +++ polygon/rest/quotes.py | 17 ++---- polygon/rest/reference.py | 102 ++++++++++++++++++++++++++------ 9 files changed, 132 insertions(+), 42 deletions(-) create mode 100644 polygon/rest/models/splits.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 849443f1..a04cf1d0 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1,8 +1,10 @@ from .aggs import AggsClient from .trades import TradesClient from .quotes import QuotesClient -from .reference import MarketsClient, TickersClient +from .reference import MarketsClient, TickersClient, SplitsClient -class RESTClient(AggsClient, TradesClient, QuotesClient, MarketsClient, TickersClient): +class RESTClient( + AggsClient, TradesClient, QuotesClient, MarketsClient, TickersClient, SplitsClient +): pass diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 13bc71ea..914cc3a6 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -3,6 +3,7 @@ from .quotes import * from .markets import * from .tickers import * +from .splits import * from enum import Enum @@ -11,6 +12,7 @@ class Sort(Enum): ASC = "asc" DESC = "desc" + class Order(Enum): ASC = "asc" DESC = "desc" diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index bdaa311c..7b3548a5 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -1,6 +1,7 @@ from dataclasses import dataclass from typing import Optional + @dataclass class Agg: timestamp: int @@ -15,12 +16,12 @@ class Agg: @staticmethod def from_dict(d): return Agg( - timestamp=d["t"], - open=d["o"], - high=d["h"], - low=d["l"], - close=d["c"], - volume=d["v"], - vwap=d.get("vw", None), - transactions=d.get("n", None) + timestamp=d["t"], + open=d["o"], + high=d["h"], + low=d["l"], + close=d["c"], + volume=d["v"], + vwap=d.get("vw", None), + transactions=d.get("n", None), ) diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 561dbeef..b2b3078f 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -16,6 +16,7 @@ class MarketHoliday: def from_dict(d): return MarketHoliday(**d) + @dataclass class MarketStatus: "MarketStatus contains data for the current trading status of the exchanges and overall financial markets." diff --git a/polygon/rest/models/quotes.py b/polygon/rest/models/quotes.py index fa2b4503..a83f0a36 100644 --- a/polygon/rest/models/quotes.py +++ b/polygon/rest/models/quotes.py @@ -23,6 +23,7 @@ class Quote: def from_dict(d): return Quote(**d) + @dataclass class LastQuote: "LastQuote contains data for the most recent NBBO (Quote) tick for a given stock." @@ -57,5 +58,5 @@ def from_dict(d): bid_price=d.get("p", None), bid_size=d.get("s", None), bid_exchange=d.get("x", None), - tape=d.get("z", None) - ) \ No newline at end of file + tape=d.get("z", None), + ) diff --git a/polygon/rest/models/splits.py b/polygon/rest/models/splits.py new file mode 100644 index 00000000..037a3e1e --- /dev/null +++ b/polygon/rest/models/splits.py @@ -0,0 +1,15 @@ +from typing import Optional +from dataclasses import dataclass + + +@dataclass +class Split: + "Split contains data for a historical stock split, including the ticker symbol, the execution date, and the factors of the split ratio." + execution_date: Optional[str] = None + split_from: Optional[int] = None + split_to: Optional[int] = None + ticker: Optional[str] = None + + @staticmethod + def from_dict(d): + return Split(**d) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 105a8a30..d5382a8a 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -2,32 +2,38 @@ 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 @@ -57,6 +63,7 @@ class Ticker: def from_dict(d): return Ticker(**d) + @dataclass class TickerDetails: "TickerDetails contains data for a specified ticker symbol." @@ -89,6 +96,7 @@ class TickerDetails: def from_dict(d): return TickerDetails(**d) + @dataclass class TickerNews: "TickerDetails contains data for news articles relating to a stock ticker symbol." @@ -108,6 +116,7 @@ class TickerNews: def from_dict(d): return TickerNews(**d) + @dataclass class TickerTypes: "TickerTypes contains data for ticker types." diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index c8710958..198e3adf 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -17,7 +17,7 @@ def list_quotes( sort: Optional[Union[str, Sort]] = None, order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, - raw: bool = False + raw: bool = False, ) -> Union[List[Quote], HTTPResponse]: """ Get quotes for a ticker symbol in a given time range. @@ -34,7 +34,6 @@ def list_quotes( :param params: Any additional query params :param raw: Return HTTPResponse object instead of results object :return: List of quotes - :rtype: List[Quote] """ url = f"/v3/quotes/{ticker}" @@ -44,12 +43,9 @@ def list_quotes( raw=raw, deserializer=Quote.from_dict, ) - + def get_last_quote( - self, - ticker: str, - params: Optional[Dict[str, Any]] = None, - raw: bool = False + self, ticker: str, params: Optional[Dict[str, Any]] = None, raw: bool = False ) -> Union[LastQuote, HTTPResponse]: """ Get the most recent NBBO (Quote) tick for a given stock. @@ -58,10 +54,9 @@ def get_last_quote( :param params: Any additional query params :param raw: Return HTTPResponse object instead of results object :return: Last Quote - :rtype: LastQuote """ url = f"/v2/last/nbbo/{ticker}" - return self._get(path=url, params=params, deserializer=LastQuote.from_dict, raw=raw) - - \ No newline at end of file + return self._get( + path=url, params=params, deserializer=LastQuote.from_dict, raw=raw + ) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index bfe5899f..d2c83b3d 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -1,14 +1,24 @@ from .base import BaseClient from typing import Optional, Any, Dict, List, Union, Iterator -from .models import MarketHoliday, MarketStatus, Ticker, TickerDetails, TickerNews, TickerTypes, Sort, Order, AssetClass, Locale +from .models import ( + MarketHoliday, + MarketStatus, + Ticker, + TickerDetails, + TickerNews, + TickerTypes, + Sort, + Order, + AssetClass, + Locale, + Split, +) from urllib3 import HTTPResponse # https://polygon.io/docs/stocks class MarketsClient(BaseClient): def list_market_holidays( - self, - params: Optional[Dict[str, Any]] = None, - raw: bool = False + self, params: Optional[Dict[str, Any]] = None, raw: bool = False ) -> Union[List[MarketHoliday], HTTPResponse]: """ Get upcoming market holidays and their open/close times. @@ -16,16 +26,15 @@ def list_market_holidays( :param params: Any additional query params :param raw: Return HTTPResponse object instead of results object :return: List of quotes - :rtype: List[Quote] """ url = "/v1/marketstatus/upcoming" - return self._get(path=url, params=params, deserializer=MarketHoliday.from_dict, raw=raw) + return self._get( + path=url, params=params, deserializer=MarketHoliday.from_dict, raw=raw + ) def get_market_status( - self, - params: Optional[Dict[str, Any]] = None, - raw: bool = False + self, params: Optional[Dict[str, Any]] = None, raw: bool = False ) -> Union[MarketStatus, HTTPResponse]: """ Get the current trading status of the exchanges and overall financial markets. @@ -33,11 +42,13 @@ def get_market_status( :param params: Any additional query params :param raw: Return HTTPResponse object instead of results object :return: List of quotes - :rtype: List[Quote] """ 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( @@ -65,7 +76,7 @@ def list_tickers( 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_lt: Ticker 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 @@ -83,7 +94,6 @@ def list_tickers( :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" @@ -109,11 +119,12 @@ def get_ticker_details( :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) + return self._get( + path=url, params=params, deserializer=TickerDetails.from_dict, raw=raw + ) def get_ticker_news( self, @@ -141,11 +152,12 @@ def get_ticker_news( :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) + return self._get( + path=url, params=params, deserializer=TickerNews.from_dict, raw=raw + ) def get_ticker_types( self, @@ -162,8 +174,60 @@ def get_ticker_types( :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) \ No newline at end of file + return self._get( + path=url, params=params, deserializer=TickerTypes.from_dict, raw=raw + ) + + +class SplitsClient(BaseClient): + def list_splits( + 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, + execution_date: Optional[str] = None, + execution_lt: Optional[str] = None, + execution_lte: Optional[str] = None, + execution_gt: Optional[str] = None, + execution_gte: Optional[str] = None, + reverse_split: Optional[bool] = 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[Split], HTTPResponse]: + """ + Get a list of historical stock splits, including the ticker symbol, the execution date, and the factors of the split ratio. + + :param ticker: Return the stock splits that contain this ticker. + :param ticker_lt: Ticker 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 execution_date: Query by execution date with the format YYYY-MM-DD. + :param execution_date_lt: Execution date less than + :param execution_date_lte: Execution date less than or equal to + :param execution_date_gt: Execution date greater than + :param execution_date_gte: Execution date greater than or equal to + :param reverse_split: Query for reverse stock splits. A split ratio where split_from is greater than split_to represents a reverse split. By default this filter is not used. + :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: List of splits + """ + url = "/v3/reference/splits" + + return self._paginate( + path=url, + params=self._get_params(self.list_splits, locals()), + raw=raw, + deserializer=Split.from_dict, + ) From b70d892f25814335d6b842f51483262c30a637c5 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 27 Apr 2022 11:41:38 -0400 Subject: [PATCH 010/448] allow datetime or int for aggs, lint tests (#123) * allow datetime or int for aggs, lint tests * run --check in CI --- Makefile | 4 ++-- polygon/rest/aggs.py | 14 ++++++++++---- polygon/rest/reference.py | 4 ---- tests/mocks.py | 7 ++++--- tests/test_aggs.py | 25 +++++++++++++++++++++++-- 5 files changed, 39 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index f6751664..af69d83e 100644 --- a/Makefile +++ b/Makefile @@ -22,11 +22,11 @@ help: ## Check code style style: - poetry run black polygon + poetry run black $(if $(CI),--check,) polygon tests ## Check static types static: - poetry run mypy polygon + poetry run mypy polygon tests ## Check code style and static types lint: style static diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index ccaa5187..a648327f 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -2,6 +2,7 @@ from typing import Optional, Any, Dict, List, Union from .models import Agg, Sort from urllib3 import HTTPResponse +from datetime import datetime # https://polygon.io/docs/stocks class AggsClient(BaseClient): @@ -11,8 +12,8 @@ def get_aggs( multiplier: int, timespan: str, # "from" is a keyword in python https://www.w3schools.com/python/python_ref_keywords.asp - from_: str, - to: str, + from_: Union[str, int, datetime], + to: Union[str, int, datetime], adjusted: Optional[bool] = None, sort: Optional[Union[str, Sort]] = None, limit: Optional[int] = None, @@ -25,8 +26,8 @@ def get_aggs( :param ticker: The ticker symbol. :param multiplier: The size of the timespan multiplier. :param timespan: The size of the time window. - :param _from: The start of the aggregate time window. - :param to: The end of the aggregate time window. + :param _from: The start of the aggregate time window as YYYY-MM-DD, Unix MS Timestamps, or a datetime. + :param to: The end of the aggregate time window as YYYY-MM-DD, Unix MS Timestamps, or a datetime. :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. :param sort: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window. :param limit: Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements. @@ -35,6 +36,11 @@ def get_aggs( :return: List of aggregates :rtype: List[Agg] """ + if isinstance(from_, datetime): + from_ = int(from_.timestamp() * 1000) + + if isinstance(to, datetime): + to = int(to.timestamp() * 1000) url = f"/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" return self._get( diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index d2c83b3d..40c915f2 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -74,7 +74,6 @@ def list_tickers( ) -> 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: Ticker less than :param ticker_lte: Ticker less than or equal to @@ -113,7 +112,6 @@ def get_ticker_details( ) -> 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 @@ -143,7 +141,6 @@ def get_ticker_news( ) -> 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. @@ -168,7 +165,6 @@ def get_ticker_types( ) -> 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 diff --git a/tests/mocks.py b/tests/mocks.py index ce35c718..896bf5c7 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -1,16 +1,18 @@ from polygon import RESTClient import unittest -import httpretty +import httpretty # type: ignore mocks = [ ( "/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04", - '{"ticker":"AAPL","queryCount":2,"resultsCount":2,"adjusted":true,"results":[{"v":6.42646396e+08,"vw":1.469,"o":1.5032,"c":1.4604,"h":1.5064,"l":1.4489,"t":1112331600000,"n":82132},{"v":5.78172308e+08,"vw":1.4589,"o":1.4639,"c":1.4675,"h":1.4754,"l":1.4343,"t":1112587200000,"n":65543}],"status":"OK","request_id":"12afda77aab3b1936c5fb6ef4241ae42","count":2}' + '{"ticker":"AAPL","queryCount":2,"resultsCount":2,"adjusted":true,"results":[{"v":6.42646396e+08,"vw":1.469,"o":1.5032,"c":1.4604,"h":1.5064,"l":1.4489,"t":1112331600000,"n":82132},{"v":5.78172308e+08,"vw":1.4589,"o":1.4639,"c":1.4675,"h":1.4754,"l":1.4343,"t":1112587200000,"n":65543}],"status":"OK","request_id":"12afda77aab3b1936c5fb6ef4241ae42","count":2}', ) ] + class BaseTest(unittest.TestCase): setup = False + def setUp(self): if self.setup: return @@ -19,4 +21,3 @@ def setUp(self): for m in mocks: httpretty.register_uri(httpretty.GET, c.BASE + m[0], m[1]) self.setup = True - diff --git a/tests/test_aggs.py b/tests/test_aggs.py index f8c88cca..3a068ce1 100644 --- a/tests/test_aggs.py +++ b/tests/test_aggs.py @@ -2,10 +2,31 @@ from polygon.rest.models import Agg from mocks import BaseTest + class AggsTest(BaseTest): def test_get_aggs(self): c = RESTClient("") aggs = c.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") - expected = [Agg(open=1.5032, high=1.5064, low=1.4489, close=1.4604, volume=642646396.0, vwap=1.469, timestamp=1112331600000, transactions=82132), Agg(open=1.4639, high=1.4754, low=1.4343, close=1.4675, volume=578172308.0, vwap=1.4589, timestamp=1112587200000, transactions=65543)] + expected = [ + Agg( + open=1.5032, + high=1.5064, + low=1.4489, + close=1.4604, + volume=642646396.0, + vwap=1.469, + timestamp=1112331600000, + transactions=82132, + ), + Agg( + open=1.4639, + high=1.4754, + low=1.4343, + close=1.4675, + volume=578172308.0, + vwap=1.4589, + timestamp=1112587200000, + transactions=65543, + ), + ] self.assertEqual(aggs, expected) - From 9fe351aff4b2bce68025d83d1604cbaefe198d24 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Wed, 27 Apr 2022 13:22:35 -0400 Subject: [PATCH 011/448] Dividends (#125) --- polygon/rest/__init__.py | 10 +++- polygon/rest/models/__init__.py | 1 + polygon/rest/models/dividends.py | 35 +++++++++++ polygon/rest/reference.py | 100 +++++++++++++++++++++++++++++-- 4 files changed, 140 insertions(+), 6 deletions(-) create mode 100644 polygon/rest/models/dividends.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index a04cf1d0..a101edf1 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1,10 +1,16 @@ from .aggs import AggsClient from .trades import TradesClient from .quotes import QuotesClient -from .reference import MarketsClient, TickersClient, SplitsClient +from .reference import MarketsClient, TickersClient, SplitsClient, DividendsClient class RESTClient( - AggsClient, TradesClient, QuotesClient, MarketsClient, TickersClient, SplitsClient + AggsClient, + TradesClient, + QuotesClient, + MarketsClient, + TickersClient, + SplitsClient, + DividendsClient, ): pass diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 914cc3a6..a6a9c916 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -4,6 +4,7 @@ from .markets import * from .tickers import * from .splits import * +from .dividends import * from enum import Enum diff --git a/polygon/rest/models/dividends.py b/polygon/rest/models/dividends.py new file mode 100644 index 00000000..b691812a --- /dev/null +++ b/polygon/rest/models/dividends.py @@ -0,0 +1,35 @@ +from typing import Optional +from enum import Enum +from dataclasses import dataclass + + +class DividendType(Enum): + CD = "CD" + SC = "SC" + LT = "LT" + ST = "ST" + + +class Frequency(Enum): + OneTime = 0 + Anually = 1 + BiAnually = 2 + Quarterly = 4 + Monthly = 12 + + +@dataclass +class Dividend: + "Dividend contains data for a historical cash dividend, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount." + cash_amount: Optional[float] = None + declaration_date: Optional[str] = None + dividend_type: Optional[DividendType] = None + ex_dividend_date: Optional[str] = None + frequency: Optional[Frequency] = None + pay_date: Optional[str] = None + record_date: Optional[str] = None + ticker: Optional[str] = None + + @staticmethod + def from_dict(d): + return Dividend(**d) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 40c915f2..bcf0a8ac 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -1,3 +1,4 @@ +from polygon.rest.models.dividends import DividendType from .base import BaseClient from typing import Optional, Any, Dict, List, Union, Iterator from .models import ( @@ -12,6 +13,8 @@ AssetClass, Locale, Split, + Dividend, + Frequency, ) from urllib3 import HTTPResponse @@ -187,10 +190,10 @@ def list_splits( ticker_gt: Optional[str] = None, ticker_gte: Optional[str] = None, execution_date: Optional[str] = None, - execution_lt: Optional[str] = None, - execution_lte: Optional[str] = None, - execution_gt: Optional[str] = None, - execution_gte: Optional[str] = None, + execution_date_lt: Optional[str] = None, + execution_date_lte: Optional[str] = None, + execution_date_gt: Optional[str] = None, + execution_date_gte: Optional[str] = None, reverse_split: Optional[bool] = None, limit: Optional[int] = None, sort: Optional[Union[str, Sort]] = None, @@ -227,3 +230,92 @@ def list_splits( raw=raw, deserializer=Split.from_dict, ) + + +class DividendsClient(BaseClient): + def list_dividends( + 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, + ex_dividend_date: Optional[str] = None, + ex_dividend_date_lt: Optional[str] = None, + ex_dividend_date_lte: Optional[str] = None, + ex_dividend_date_gt: Optional[str] = None, + ex_dividend_date_gte: Optional[str] = None, + record_date: Optional[str] = None, + record_date_lt: Optional[str] = None, + record_date_lte: Optional[str] = None, + record_date_gt: Optional[str] = None, + record_date_gte: Optional[str] = None, + declaration_date: Optional[str] = None, + declaration_date_lt: Optional[str] = None, + declaration_date_lte: Optional[str] = None, + declaration_date_gt: Optional[str] = None, + declaration_date_gte: Optional[str] = None, + pay_date: Optional[str] = None, + pay_date_lt: Optional[str] = None, + pay_date_lte: Optional[str] = None, + pay_date_gt: Optional[str] = None, + pay_date_gte: Optional[str] = None, + frequency: Optional[Frequency] = None, + cash_amount: Optional[float] = None, + cash_amount_lt: Optional[float] = None, + cash_amount_lte: Optional[float] = None, + cash_amount_gt: Optional[float] = None, + cash_amount_gte: Optional[float] = None, + dividend_type: Optional[DividendType] = 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[Dividend], HTTPResponse]: + """ + Get a list of historical cash dividends, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount. + + :param ticker: Return the dividends that contain this ticker. + :param ticker_lt: Ticker 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 ex_dividend_date: Query by ex-dividend date with the format YYYY-MM-DD. + :param ex_dividend_date_lt: Ex-dividend date less than + :param ex_dividend_date_lte: Ex-dividend date less than or equal to + :param ex_dividend_date_gt: Ex-dividend date greater than + :param ex_dividend_date_gte: Ex-dividend date greater than or equal to + :param record_date: Query by record date with the format YYYY-MM-DD. + :param record_date_lt: Record date less than + :param record_date_lte: Record date less than or equal to + :param record_date_gt: Record date greater than + :param record_date_gte: Record date greater than or equal to + :param declaration_date: Query by declaration date with the format YYYY-MM-DD. + :param declaration_date_lt: Declaration date less than + :param declaration_date_lte: Declaration date less than or equal to + :param declaration_date_gt: Declaration date greater than + :param declaration_date_gte: Declaration date greater than or equal to + :param pay_date: Query by pay date with the format YYYY-MM-DD. + :param pay_date_lt: Pay date less than + :param pay_date_lte: Pay date less than or equal to + :param pay_date_gt: Pay date greater than + :param pay_date_gte: Pay date greater than or equal to + :param frequency: Query by the number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly). + :param cash_amount: Query by the cash amount of the dividend. + :param dividend_type: Query by the type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD. Special Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC. + :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: List of dividends + """ + url = "/v3/reference/dividends" + + return self._paginate( + path=url, + params=self._get_params(self.list_dividends, locals()), + raw=raw, + deserializer=Dividend.from_dict, + ) From b25b4d132bb5d25719e24275647c20139eb4d1d4 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 28 Apr 2022 10:29:04 -0400 Subject: [PATCH 012/448] add sphinx docs (#126) * add sphinx docs * cleanup * fix some reference pydoc * fix code formatting * typos * fix lint --- .gitignore | 2 +- docs/Makefile | 20 ++ docs/source/Getting-Started.rst | 176 ++++++++++++++ docs/source/Quotes.rst | 15 ++ docs/source/Reference.rst | 40 +++ docs/source/Trades.rst | 9 + docs/source/conf.py | 59 +++++ docs/source/index.rst | 21 ++ poetry.lock | 417 +++++++++++++++++++++++++++++++- polygon/rest/aggs.py | 2 +- polygon/rest/base.py | 46 +++- polygon/rest/reference.py | 6 +- polygon/rest/trades.py | 3 +- pyproject.toml | 3 + rest-example.py | 8 +- 15 files changed, 810 insertions(+), 17 deletions(-) create mode 100644 docs/Makefile create mode 100644 docs/source/Getting-Started.rst create mode 100644 docs/source/Quotes.rst create mode 100644 docs/source/Reference.rst create mode 100644 docs/source/Trades.rst create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst diff --git a/.gitignore b/.gitignore index a655050c..300a17c1 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,7 @@ venv/ *.log # Sphinx documentation -docs/_build/ +docs/build/ # PyBuilder target/ diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..7f823a57 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + POLYGON_API_KEY="POLYGON_API_KEY" $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst new file mode 100644 index 00000000..e7ad27c0 --- /dev/null +++ b/docs/source/Getting-Started.rst @@ -0,0 +1,176 @@ +Getting Started +=============== + +Requirements: + - `Polygon.io API key `_ + - `Python >= 3.7 `_ + - `This package `_ + +.. code-block:: shell + + pip install polygon-api-client + +HTTP client usage +----------------- + +.. automethod:: polygon.RESTClient.__init__ + +You can pass your API key via the environment variable :code:`POLYGON_API_KEY` or as the first parameter to the :code:`RESTClient` constructor: + +.. code-block:: python + + from polygon import RESTClient + + client = RESTClient() # POLYGON_API_KEY is used + client = RESTClient("api_key") # api_key is used + +For non-paginated endpoints call :code:`get_*`: + +.. code-block:: python + + aggs = client.get_aggs("AAPL", 1, "day", "2022-04-01", "2022-04-04") + print(aggs) + +For paginated endpoints call :code:`list_*` and use the provided iterator: + +.. code-block:: python + + trades = [] + for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC) + trades.append(t) + print(trades) + +For endpoints that have a set of parameters you can use the provided enums: + +.. code-block:: python + + from polygon.rest.models import Sort + + client.list_trades(..., sort=Sort.ASC) + +To handle the raw `urllib3 response `_ yourself pass :code:`raw=True`: + +.. code-block:: python + + aggs = client.get_aggs("AAPL", 1, "day", "2022-04-01", "2022-04-04", raw=True) + print(aggs.geturl()) + # https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2022-04-01/2022-04-04 + print(aggs.status) + # 200 + print(aggs.data) + # b'{ + # "ticker": "AAPL", + # "queryCount": 2, + # "resultsCount": 2, + # "adjusted": true, + # "results": [ + # { + # "v": 78251328, + # "vw": 173.4143, + # "o": 174.03, + # "c": 174.31, + # "h": 174.88, + # "l": 171.94, + # "t": 1648785600000, + # "n": 661160 + # }, + # { + # "v": 76545983, + # "vw": 177.4855, + # "o": 174.57, + # "c": 178.44, + # "h": 178.49, + # "l": 174.44, + # "t": 1649044800000, + # "n": 630374 + # } + # ], + # "status": "OK", + # "request_id": "d8882a9d5194978819777f49c44b09c6", + # "count": 2 + # }' + +If it is a paginated :code:`list_*` response it's up to you to handle the "next_url" iteration: + +.. code-block:: python + + trades = client.list_trades("AAA", timestamp="2022-04-20", limit=5) + print(aggs.data) + # b'{ + # "results": [ + # { + # "conditions": [ + # 15 + # ], + # "exchange": 11, + # "id": "52983575627601", + # "participant_timestamp": 1650499200029279200, + # "price": 24.875, + # "sequence_number": 1591291, + # "sip_timestamp": 1650499200029316600, + # "size": 100, + # "tape": 1 + # }, + # { + # "conditions": [ + # 38, + # 41 + # ], + # "exchange": 11, + # "id": "52983575627600", + # "participant_timestamp": 1650499200029279200, + # "price": 24.875, + # "sequence_number": 1591290, + # "sip_timestamp": 1650499200029316600, + # "tape": 1 + # }, + # { + # "conditions": [ + # 15 + # ], + # "exchange": 11, + # "id": "52983575622470", + # "participant_timestamp": 1650493800003024000, + # "price": 24.875, + # "sequence_number": 1571279, + # "sip_timestamp": 1650493800003645400, + # "size": 100, + # "tape": 1 + # }, + # { + # "conditions": [ + # 38, + # 41 + # ], + # "exchange": 11, + # "id": "52983575622469", + # "participant_timestamp": 1650493800003024000, + # "price": 24.875, + # "sequence_number": 1571276, + # "sip_timestamp": 1650493800003635500, + # "tape": 1 + # }, + # { + # "conditions": [ + # 15 + # ], + # "exchange": 11, + # "id": "52983575556178", + # "participant_timestamp": 1650485400002987800, + # "price": 24.875, + # "sequence_number": 1536223, + # "sip_timestamp": 1650485400003870000, + # "size": 100, + # "tape": 1 + # } + # ], + # "status": "OK", + # "request_id": "618bb99e7a632ed9f55454a541404b44", + # "next_url": "https://api.polygon.io/v3/trades/AAA?cursor=YXA9NSZhcz0mbGltaXQ9NSZvcmRlcj1kZXNjJnNvcnQ9dGltZXN0YW1wJnRpbWVzdGFtcC5ndGU9MjAyMi0wNC0yMFQwNCUzQTAwJTNBMDBaJnRpbWVzdGFtcC5sdGU9MjAyMi0wNC0yMFQyMCUzQTEwJTNBMDAuMDAzODY5OTUyWg" + # }' + + +Websocket client usage +---------------------- + +Coming soon. diff --git a/docs/source/Quotes.rst b/docs/source/Quotes.rst new file mode 100644 index 00000000..4c379455 --- /dev/null +++ b/docs/source/Quotes.rst @@ -0,0 +1,15 @@ +.. _quotes_header: + +Quotes +========== + +=========== +List quotes +=========== + +.. automethod:: polygon.RESTClient.list_quotes + +============== +Get last quote +============== +.. automethod:: polygon.RESTClient.get_last_quote diff --git a/docs/source/Reference.rst b/docs/source/Reference.rst new file mode 100644 index 00000000..2f4210ef --- /dev/null +++ b/docs/source/Reference.rst @@ -0,0 +1,40 @@ +.. _reference_header: + +Reference +=============== + +==================== +List market holidays +==================== +.. automethod:: polygon.RESTClient.list_market_holidays + +==================== +List tickers +==================== +.. automethod:: polygon.RESTClient.list_tickers + +==================== +List ticker details +==================== +.. automethod:: polygon.RESTClient.get_ticker_details + +==================== +Get ticker news +==================== +.. automethod:: polygon.RESTClient.get_ticker_news + +==================== +Get ticker types +==================== +.. automethod:: polygon.RESTClient.get_ticker_types + +==================== +List splits +==================== +.. automethod:: polygon.RESTClient.list_splits + +==================== +List dividends +==================== +.. automethod:: polygon.RESTClient.list_dividends + diff --git a/docs/source/Trades.rst b/docs/source/Trades.rst new file mode 100644 index 00000000..50e628c4 --- /dev/null +++ b/docs/source/Trades.rst @@ -0,0 +1,9 @@ +.. _trades_header: + +Trades +============= + +=========== +List trades +=========== +.. automethod:: polygon.RESTClient.list_trades diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..cef0ef75 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,59 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('../..')) +print('docs path', sys.path[0]) + + +# -- Project information ----------------------------------------------------- + +project = 'polygon-api-client' +copyright = '2022, Polygon.io' +author = 'Polygon.io' + +# The full version, including alpha/beta/rc tags +release = '0.3.0' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx_autodoc_typehints', + 'sphinx_rtd_theme', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..6cc7d51d --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,21 @@ +Welcome to polygon-api-client's documentation! +============================================== + +This documentation is for the Python client only. For details about the responses see `the official docs `_. + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + Getting-Started + Quotes + Reference + Trades + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/poetry.lock b/poetry.lock index 7a9b6760..6c2f429a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,22 @@ +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "babel" +version = "2.10.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pytz = ">=2015.7" + [[package]] name = "black" version = "22.3.0" @@ -21,6 +40,25 @@ d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "certifi" +version = "2021.10.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "charset-normalizer" +version = "2.0.12" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + [[package]] name = "click" version = "8.1.2" @@ -41,6 +79,14 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "httpretty" version = "1.1.4" @@ -49,6 +95,22 @@ category = "dev" optional = false python-versions = ">=3" +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.3.0" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + [[package]] name = "importlib-metadata" version = "4.11.3" @@ -66,6 +128,28 @@ docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +[[package]] +name = "jinja2" +version = "3.1.1" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" + [[package]] name = "mypy" version = "0.942" @@ -93,6 +177,17 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + [[package]] name = "pathspec" version = "0.9.0" @@ -113,6 +208,192 @@ python-versions = ">=3.7" docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +[[package]] +name = "pygments" +version = "2.12.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pyparsing" +version = "3.0.8" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "dev" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["railroad-diagrams", "jinja2"] + +[[package]] +name = "pytz" +version = "2022.1" +description = "World timezone definitions, modern and historical" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "sphinx" +version = "4.5.0" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] + +[[package]] +name = "sphinx-autodoc-typehints" +version = "1.18.1" +description = "Type hints (PEP 484) support for the Sphinx autodoc extension" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Sphinx = ">=4.5" + +[package.extras] +testing = ["covdefaults (>=2.2)", "coverage (>=6.3)", "diff-cover (>=6.4)", "nptyping (>=2)", "pytest (>=7.1)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=4.1)"] +type_comments = ["typed-ast (>=1.5.2)"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.0.0" +description = "Read the Docs theme for Sphinx" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6" + +[package.extras] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + [[package]] name = "tomli" version = "2.0.1" @@ -173,9 +454,17 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "992b579a470d1662ac4e64e78155506ec2f8c31013124a4cbb43cf0625a2931c" +content-hash = "8ea6c39c95fde83519380774c4bff55aacb6249c9a0b61437fadd4946cb2aaef" [metadata.files] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +babel = [ + {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, + {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, +] black = [ {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"}, @@ -201,6 +490,14 @@ black = [ {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"}, {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, ] +certifi = [ + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, +] click = [ {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"}, {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"}, @@ -209,13 +506,71 @@ colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] httpretty = [ {file = "httpretty-1.1.4.tar.gz", hash = "sha256:20de0e5dd5a18292d36d928cc3d6e52f8b2ac73daec40d41eb62dee154933b68"}, ] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +imagesize = [ + {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, + {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, +] importlib-metadata = [ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, ] +jinja2 = [ + {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"}, + {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] mypy = [ {file = "mypy-0.942-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d"}, {file = "mypy-0.942-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46"}, @@ -245,6 +600,10 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] pathspec = [ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, @@ -253,6 +612,62 @@ platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] +pygments = [ + {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, + {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, +] +pyparsing = [ + {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, + {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, +] +pytz = [ + {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, + {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, +] +requests = [ + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [ + {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, + {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, +] +sphinx-autodoc-typehints = [ + {file = "sphinx_autodoc_typehints-1.18.1-py3-none-any.whl", hash = "sha256:f8f5bb7c13a9a71537dc2be2eb3b9e28a9711e2454df63587005eacf6fbac453"}, + {file = "sphinx_autodoc_typehints-1.18.1.tar.gz", hash = "sha256:07631c5f0c6641e5ba27143494aefc657e029bed3982138d659250e617f6f929"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, + {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index a648327f..7c90e0ca 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -46,7 +46,7 @@ def get_aggs( return self._get( path=url, params=self._get_params(self.get_aggs, locals()), - resultKey="results", + result_key="results", deserializer=Agg.from_dict, raw=raw, ) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 9349b251..0fed618d 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -40,7 +40,7 @@ def _get( self, path: str, params: Optional[dict] = None, - resultKey: Optional[str] = None, + result_key: Optional[str] = None, deserializer=None, raw: bool = False, ) -> Any: @@ -59,8 +59,8 @@ def _get( obj = self._decode(resp) - if resultKey: - obj = obj[resultKey] + if result_key: + obj = obj[result_key] if deserializer: obj = [deserializer(o) for o in obj] @@ -86,18 +86,48 @@ def _get_params(self, fn, caller_locals): return params - def _paginate(self, path: str, params: dict, raw: bool, deserializer): + def _paginate_iter( + self, + path: str, + params: dict, + raw: bool, + deserializer, + result_key: str = "results", + ): while True: resp = self._get( - path=path, params=params, deserializer=deserializer, raw=True + path=path, + params=params, + deserializer=deserializer, + result_key=result_key, + raw=True, ) - if raw: - return resp decoded = self._decode(resp) - for t in decoded["results"]: + for t in decoded[result_key]: yield deserializer(t) if "next_url" in decoded: path = decoded["next_url"].replace(self.BASE, "") params = {} else: return + + def _paginate( + self, + path: str, + params: dict, + raw: bool, + deserializer, + result_key: str = "results", + ): + if raw: + return self._get( + path=path, params=params, deserializer=deserializer, raw=True + ) + + return self._paginate_iter( + path=path, + params=params, + deserializer=deserializer, + result_key=result_key, + raw=True, + ) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index bcf0a8ac..63c96402 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -1,4 +1,3 @@ -from polygon.rest.models.dividends import DividendType from .base import BaseClient from typing import Optional, Any, Dict, List, Union, Iterator from .models import ( @@ -14,6 +13,7 @@ Locale, Split, Dividend, + DividendType, Frequency, ) from urllib3 import HTTPResponse @@ -77,6 +77,7 @@ def list_tickers( ) -> 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: Ticker less than :param ticker_lte: Ticker less than or equal to @@ -115,6 +116,7 @@ def get_ticker_details( ) -> 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 @@ -144,6 +146,7 @@ def get_ticker_news( ) -> 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. @@ -168,6 +171,7 @@ def get_ticker_types( ) -> 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 diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 3d22476b..85cac40a 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -33,8 +33,7 @@ def list_trades( :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: List of aggregates - :rtype: List[Agg] + :return: Iterator of trades """ url = f"/v3/trades/{ticker}" diff --git a/pyproject.toml b/pyproject.toml index 98d3228f..1722a69e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,9 @@ black = "^22.3.0" mypy = "^0.942" types-urllib3 = "^1.26.13" httpretty = "^1.1.4" +Sphinx = "^4.5.0" +sphinx-rtd-theme = "^1.0.0" +sphinx-autodoc-typehints = "^1.18.1" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/rest-example.py b/rest-example.py index 96586835..e60ebd54 100644 --- a/rest-example.py +++ b/rest-example.py @@ -1,12 +1,14 @@ from polygon import RESTClient from polygon.rest.models import Sort -c = RESTClient() +client = RESTClient() -aggs = c.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") +aggs = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") print(aggs) trades = [] -for t in c.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): +for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): trades.append(t) print(trades) + +print(client.list_trades("AAA", timestamp="2022-04-20", limit=5, raw=True)) From 5ff5a5a57736f0d04c9e9e8da6417c753e4b2218 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 28 Apr 2022 10:36:09 -0400 Subject: [PATCH 013/448] Conditions And Exchanges (#127) --- polygon/rest/__init__.py | 11 +++- polygon/rest/models/__init__.py | 15 ++---- polygon/rest/models/conditions.py | 52 +++++++++++++++++++ polygon/rest/models/dividends.py | 17 +------ polygon/rest/models/exchanges.py | 22 ++++++++ polygon/rest/models/markets.py | 19 +++++-- polygon/rest/models/shared.py | 62 +++++++++++++++++++++++ polygon/rest/models/tickers.py | 20 +------- polygon/rest/reference.py | 84 ++++++++++++++++++++++++++++--- 9 files changed, 243 insertions(+), 59 deletions(-) create mode 100644 polygon/rest/models/conditions.py create mode 100644 polygon/rest/models/exchanges.py create mode 100644 polygon/rest/models/shared.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index a101edf1..31f100f1 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1,7 +1,14 @@ from .aggs import AggsClient from .trades import TradesClient from .quotes import QuotesClient -from .reference import MarketsClient, TickersClient, SplitsClient, DividendsClient +from .reference import ( + MarketsClient, + TickersClient, + SplitsClient, + DividendsClient, + ConditionsClient, + ExchangesClient, +) class RESTClient( @@ -12,5 +19,7 @@ class RESTClient( TickersClient, SplitsClient, DividendsClient, + ConditionsClient, + ExchangesClient, ): pass diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index a6a9c916..85139477 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -5,15 +5,6 @@ from .tickers import * from .splits import * from .dividends import * - -from enum import Enum - - -class Sort(Enum): - ASC = "asc" - DESC = "desc" - - -class Order(Enum): - ASC = "asc" - DESC = "desc" +from .conditions import * +from .exchanges import * +from .shared import * diff --git a/polygon/rest/models/conditions.py b/polygon/rest/models/conditions.py new file mode 100644 index 00000000..52b1e6aa --- /dev/null +++ b/polygon/rest/models/conditions.py @@ -0,0 +1,52 @@ +from typing import Optional +from .shared import AssetClass, DataType +from dataclasses import dataclass + + +@dataclass +class SipMapping: + CTA: Optional[str] = None + OPRA: Optional[str] = None + UTP: Optional[str] = None + + +@dataclass +class Consolidated: + updates_high_low: Optional[bool] = None + updates_open_close: Optional[bool] = None + updates_volume: Optional[bool] = None + + +@dataclass +class MarketCenter: + updates_high_low: Optional[bool] = None + updates_open_close: Optional[bool] = None + updates_volume: Optional[bool] = None + + +@dataclass +class UpdateRules: + consolidated: Optional[Consolidated] = None + market_center: Optional[MarketCenter] = None + + +@dataclass +class Condition: + "Condition contains data for a condition that Polygon.io uses." + abbreviation: Optional[str] = None + asset_class: Optional[AssetClass] = None + data_types: Optional[DataType] = None + description: Optional[str] = None + exchange: Optional[int] = None + id: Optional[int] = None + legacy: Optional[bool] = None + name: Optional[str] = None + sip_mapping: Optional[SipMapping] = None + Type: Optional[ + str + ] = None # todo: 'type' is a keyword so here I capitalized. Should we capital case all dataclasses? + update_rules: Optional[UpdateRules] = None + + @staticmethod + def from_dict(d): + return Condition(**d) diff --git a/polygon/rest/models/dividends.py b/polygon/rest/models/dividends.py index b691812a..f70adf9f 100644 --- a/polygon/rest/models/dividends.py +++ b/polygon/rest/models/dividends.py @@ -1,23 +1,8 @@ from typing import Optional -from enum import Enum +from .shared import DividendType, Frequency from dataclasses import dataclass -class DividendType(Enum): - CD = "CD" - SC = "SC" - LT = "LT" - ST = "ST" - - -class Frequency(Enum): - OneTime = 0 - Anually = 1 - BiAnually = 2 - Quarterly = 4 - Monthly = 12 - - @dataclass class Dividend: "Dividend contains data for a historical cash dividend, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount." diff --git a/polygon/rest/models/exchanges.py b/polygon/rest/models/exchanges.py new file mode 100644 index 00000000..64527710 --- /dev/null +++ b/polygon/rest/models/exchanges.py @@ -0,0 +1,22 @@ +from typing import Optional +from .shared import AssetClass, Locale, ExchangeType +from dataclasses import dataclass + + +@dataclass +class Exchange: + "Exchange contains data for a condition that Polygon.io uses." + acronym: Optional[str] = None + asset_class: Optional[AssetClass] = None + id: Optional[int] = None + locale: Optional[Locale] = None + mic: Optional[str] = None + name: Optional[str] = None + operating_mic: Optional[str] = None + participant_id: Optional[str] = None + type: Optional[ExchangeType] = None + url: Optional[str] = None + + @staticmethod + def from_dict(d): + return Exchange(**d) diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index b2b3078f..efa5b2ff 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -1,7 +1,20 @@ -from typing import Optional, Dict +from typing import Optional from dataclasses import dataclass +@dataclass +class Currencies: + crypto: Optional[str] = None + fx: Optional[str] = None + + +@dataclass +class Exchanges: + nasdaq: Optional[str] = None + nyse: Optional[str] = None + otc: Optional[str] = None + + @dataclass class MarketHoliday: "MarketHoliday contains data for upcoming market holidays and their open/close times." @@ -21,9 +34,9 @@ def from_dict(d): class MarketStatus: "MarketStatus contains data for the current trading status of the exchanges and overall financial markets." after_hours: Optional[bool] = None - currencies: Optional[Dict[str, str]] = None + currencies: Optional[Currencies] = None early_hours: Optional[bool] = None - exchanges: Optional[Dict[str, str]] = None + exchanges: Optional[Exchanges] = None market: Optional[str] = None server_time: Optional[str] = None diff --git a/polygon/rest/models/shared.py b/polygon/rest/models/shared.py new file mode 100644 index 00000000..c8af7626 --- /dev/null +++ b/polygon/rest/models/shared.py @@ -0,0 +1,62 @@ +from enum import Enum + + +class Sort(Enum): + ASC = "asc" + DESC = "desc" + + +class Order(Enum): + ASC = "asc" + DESC = "desc" + + +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" + + +class DividendType(Enum): + CD = "CD" + SC = "SC" + LT = "LT" + ST = "ST" + + +class Frequency(Enum): + OneTime = 0 + Anually = 1 + BiAnually = 2 + Quarterly = 4 + Monthly = 12 + + +class DataType(Enum): + DataTrade = "trade" + DataBBO = "bbo" + DataNBBO = "nbbo" + + +class SIP(Enum): + CTA = "CTA" + UTP = "UTP" + OPRA = "OPRA" + + +class ExchangeType(Enum): + exchange = "exchange" + TRF = "TRF" + SIP = "SIP" diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index d5382a8a..681fd669 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -1,26 +1,8 @@ from typing import Optional, List -from enum import Enum +from .shared import Locale, Market, AssetClass 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 diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 63c96402..bc0c7487 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -15,6 +15,10 @@ Dividend, DividendType, Frequency, + Condition, + DataType, + SIP, + Exchange, ) from urllib3 import HTTPResponse @@ -129,7 +133,7 @@ def get_ticker_details( path=url, params=params, deserializer=TickerDetails.from_dict, raw=raw ) - def get_ticker_news( + def list_ticker_news( self, ticker: Optional[str] = None, ticker_lt: Optional[str] = None, @@ -143,7 +147,7 @@ def get_ticker_news( published_utc_gte: Optional[str] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[TickerDetails, HTTPResponse]: + ) -> Union[Iterator[TickerNews], 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. @@ -158,14 +162,17 @@ def get_ticker_news( """ url = "/v2/reference/news" - return self._get( - path=url, params=params, deserializer=TickerNews.from_dict, raw=raw + return self._paginate( + path=url, + params=self._get_params(self.list_ticker_news, locals()), + raw=raw, + deserializer=TickerNews.from_dict, ) def get_ticker_types( self, - asset_class: Optional[AssetClass] = None, - locale: Optional[Locale] = None, + asset_class: Optional[Union[str, AssetClass]] = None, + locale: Optional[Union[str, Locale]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, ) -> Union[TickerTypes, HTTPResponse]: @@ -264,13 +271,13 @@ def list_dividends( pay_date_lte: Optional[str] = None, pay_date_gt: Optional[str] = None, pay_date_gte: Optional[str] = None, - frequency: Optional[Frequency] = None, + frequency: Optional[Union[int, Frequency]] = None, cash_amount: Optional[float] = None, cash_amount_lt: Optional[float] = None, cash_amount_lte: Optional[float] = None, cash_amount_gt: Optional[float] = None, cash_amount_gte: Optional[float] = None, - dividend_type: Optional[DividendType] = None, + dividend_type: Optional[Union[str, DividendType]] = None, limit: Optional[int] = None, sort: Optional[Union[str, Sort]] = None, order: Optional[Union[str, Order]] = None, @@ -323,3 +330,64 @@ def list_dividends( raw=raw, deserializer=Dividend.from_dict, ) + + +class ConditionsClient(BaseClient): + def list_conditions( + self, + asset_class: Optional[Union[str, AssetClass]] = None, + data_type: Optional[Union[str, DataType]] = None, + id: Optional[int] = None, + sip: Optional[Union[str, SIP]] = 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[Condition], HTTPResponse]: + """ + List all conditions that Polygon.io uses. + + :param asset_class: Filter for conditions within a given asset class. + :param data_type: Data types that this condition applies to. + :param id: Filter for conditions with a given ID. + :param sip: Filter by SIP. If the condition contains a mapping for that SIP, the condition will be returned. + :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: List of conditions + """ + url = "/v3/reference/conditions" + + return self._paginate( + path=url, + params=self._get_params(self.list_conditions, locals()), + raw=raw, + deserializer=Condition.from_dict, + ) + + +class ExchangesClient(BaseClient): + def get_exchanges( + self, + asset_class: Optional[Union[str, AssetClass]] = None, + locale: Optional[Union[str, Locale]] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[Exchange, HTTPResponse]: + """ + List all exchanges that Polygon.io knows about. + + :param asset_class: Filter by asset class. + :param locale: Filter by locale. + :param params: Any additional query params + :param raw: Return HTTPResponse object instead of results object + :return: List of quotes + """ + url = "/v3/reference/exchanges" + + return self._get( + path=url, params=params, deserializer=Exchange.from_dict, raw=raw + ) From dd217feca2a53f99929cc43cf972e6232f0d87fd Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:28:35 -0400 Subject: [PATCH 014/448] try fix readthedocs build --- .readthedocs.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .readthedocs.yml diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 00000000..37ce2e3c --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,15 @@ +# https://docs.readthedocs.io/en/latest/config-file/index.html#configuration-file +version: 2 + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/source/conf.py + +python: + version: 3.10 + install: + - method: pip + path: . + extra_requirements: + - sphinx-autodoc-typehints~=1.18.1 + From 8b599886b5a0918a606ee970c10b21432c082b03 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:31:57 -0400 Subject: [PATCH 015/448] try fix readthedocs build (2) --- .readthedocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 37ce2e3c..01308621 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -6,7 +6,7 @@ sphinx: configuration: docs/source/conf.py python: - version: 3.10 + version: 3.8 install: - method: pip path: . From e9804cce9720e9517808208edf41691561feb0d2 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:37:43 -0400 Subject: [PATCH 016/448] try fix readthedocs build (3) --- .readthedocs.yml | 15 ++++++++------- docs/source/Reference.rst | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.readthedocs.yml b/.readthedocs.yml index 01308621..4ab7ba85 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,11 +5,12 @@ version: 2 sphinx: configuration: docs/source/conf.py -python: - version: 3.8 - install: - - method: pip - path: . - extra_requirements: - - sphinx-autodoc-typehints~=1.18.1 +build: + os: ubuntu-20.04 + tools: + python: "3.10" + jobs: + pre_create_environment: + - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - + - poetry install diff --git a/docs/source/Reference.rst b/docs/source/Reference.rst index 2f4210ef..074fa3e7 100644 --- a/docs/source/Reference.rst +++ b/docs/source/Reference.rst @@ -21,7 +21,7 @@ List ticker details ==================== Get ticker news ==================== -.. automethod:: polygon.RESTClient.get_ticker_news +.. automethod:: polygon.RESTClient.list_ticker_news ==================== Get ticker types From b7e370c97ee1426134036f38b495b86afbaec1bd Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:38:43 -0400 Subject: [PATCH 017/448] try fix readthedocs build (4) --- .readthedocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.readthedocs.yml b/.readthedocs.yml index 4ab7ba85..005215ab 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -12,5 +12,6 @@ build: jobs: pre_create_environment: - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - + - source $HOME/.poetry/env - poetry install From b140f1fdc47165f1d12b86d1c204b9061d33b520 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:41:53 -0400 Subject: [PATCH 018/448] Rst update and quick fixes (#129) --- docs/source/Reference.rst | 22 ++++++++++++++++++---- polygon/rest/models/conditions.py | 4 +--- polygon/rest/models/shared.py | 18 +++++++++--------- polygon/rest/reference.py | 2 +- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/docs/source/Reference.rst b/docs/source/Reference.rst index 074fa3e7..a74caf64 100644 --- a/docs/source/Reference.rst +++ b/docs/source/Reference.rst @@ -4,9 +4,14 @@ Reference =============== ==================== -List market holidays +Get market holidays ==================== -.. automethod:: polygon.RESTClient.list_market_holidays +.. automethod:: polygon.RESTClient.get_market_holidays + +==================== +Get market status +==================== +.. automethod:: polygon.RESTClient.get_market_status ==================== List tickers @@ -14,12 +19,12 @@ List tickers .. automethod:: polygon.RESTClient.list_tickers ==================== -List ticker details +Get ticker details ==================== .. automethod:: polygon.RESTClient.get_ticker_details ==================== -Get ticker news +List ticker news ==================== .. automethod:: polygon.RESTClient.list_ticker_news @@ -38,3 +43,12 @@ List dividends ==================== .. automethod:: polygon.RESTClient.list_dividends +==================== +List conditions +==================== +.. automethod:: polygon.RESTClient.list_conditions + +==================== +Get exchanges +==================== +.. automethod:: polygon.RESTClient.get_exchanges diff --git a/polygon/rest/models/conditions.py b/polygon/rest/models/conditions.py index 52b1e6aa..81949353 100644 --- a/polygon/rest/models/conditions.py +++ b/polygon/rest/models/conditions.py @@ -42,9 +42,7 @@ class Condition: legacy: Optional[bool] = None name: Optional[str] = None sip_mapping: Optional[SipMapping] = None - Type: Optional[ - str - ] = None # todo: 'type' is a keyword so here I capitalized. Should we capital case all dataclasses? + type: Optional[str] = None update_rules: Optional[UpdateRules] = None @staticmethod diff --git a/polygon/rest/models/shared.py b/polygon/rest/models/shared.py index c8af7626..3b7b3d4a 100644 --- a/polygon/rest/models/shared.py +++ b/polygon/rest/models/shared.py @@ -37,17 +37,17 @@ class DividendType(Enum): class Frequency(Enum): - OneTime = 0 - Anually = 1 - BiAnually = 2 - Quarterly = 4 - Monthly = 12 + ONE_TIME = 0 + ANUALLY = 1 + BIANUALLY = 2 + QUARTERLY = 4 + MONTHLY = 12 class DataType(Enum): - DataTrade = "trade" - DataBBO = "bbo" - DataNBBO = "nbbo" + DATA_TRADE = "trade" + DATA_BBO = "bbo" + DATA_NBBO = "nbbo" class SIP(Enum): @@ -57,6 +57,6 @@ class SIP(Enum): class ExchangeType(Enum): - exchange = "exchange" + EXCHANGE = "exchange" TRF = "TRF" SIP = "SIP" diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index bc0c7487..67bf2647 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -24,7 +24,7 @@ # https://polygon.io/docs/stocks class MarketsClient(BaseClient): - def list_market_holidays( + def get_market_holidays( self, params: Optional[Dict[str, Any]] = None, raw: bool = False ) -> Union[List[MarketHoliday], HTTPResponse]: """ From 1770285a31d2b21be40eff3cd933ff3e8f79a5a4 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:43:41 -0400 Subject: [PATCH 019/448] try fix readthedocs build (5) --- .readthedocs.yml | 12 +++--------- docs/requirements.txt | 1 + 2 files changed, 4 insertions(+), 9 deletions(-) create mode 100644 docs/requirements.txt diff --git a/.readthedocs.yml b/.readthedocs.yml index 005215ab..7e83cd34 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,13 +5,7 @@ version: 2 sphinx: configuration: docs/source/conf.py -build: - os: ubuntu-20.04 - tools: - python: "3.10" - jobs: - pre_create_environment: - - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python - - - source $HOME/.poetry/env - - poetry install +python: + install: + - requirements: docs/requirements.txt diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..5977ad6f --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1 @@ +sphinx-autodoc-typehints~=1.18.1 From 56b4a04699ea8b44b918c108d5cb398b36580ed7 Mon Sep 17 00:00:00 2001 From: Miles Dayoub <38268139+mcdayoub@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:45:09 -0400 Subject: [PATCH 020/448] aggs endpoints (#128) * aggs endpoints * aggs endpoints * aggs models optional * aggs models optional * fixed result_keys --- polygon/rest/aggs.py | 84 +++++++++++++++++++++++++++++-- polygon/rest/base.py | 3 ++ polygon/rest/models/aggs.py | 99 +++++++++++++++++++++++++++++++++---- tests/mocks.py | 14 +++++- tests/test_aggs.py | 61 ++++++++++++++++++++++- 5 files changed, 247 insertions(+), 14 deletions(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 7c90e0ca..9643711a 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -1,6 +1,7 @@ +from email.headerregistry import Group from .base import BaseClient from typing import Optional, Any, Dict, List, Union -from .models import Agg, Sort +from .models import Agg, GroupedDailyAgg, DailyOpenCloseAgg, PreviousCloseAgg, Sort from urllib3 import HTTPResponse from datetime import datetime @@ -22,7 +23,6 @@ def get_aggs( ) -> Union[List[Agg], HTTPResponse]: """ Get aggregate bars for a ticker over a given date range in custom time window sizes. - :param ticker: The ticker symbol. :param multiplier: The size of the timespan multiplier. :param timespan: The size of the time window. @@ -34,7 +34,6 @@ def get_aggs( :param params: Any additional query params :param raw: Return raw object instead of results object :return: List of aggregates - :rtype: List[Agg] """ if isinstance(from_, datetime): from_ = int(from_.timestamp() * 1000) @@ -50,3 +49,82 @@ def get_aggs( deserializer=Agg.from_dict, raw=raw, ) + + def get_grouped_daily_aggs( + self, + date: str, + adjusted: Optional[bool] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[List[GroupedDailyAgg], HTTPResponse]: + """ + Get the daily open, high, low, and close (OHLC) for the entire market. + + :param date: The beginning date for the aggregate window. + :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: List of grouped daily aggregates + """ + url = f"/v2/aggs/grouped/locale/us/market/stocks/{date}" + + return self._get( + path=url, + params=self._get_params(self.get_grouped_daily_aggs, locals()), + result_key="results", + deserializer=GroupedDailyAgg.from_dict, + raw=raw, + ) + + def get_daily_open_close_agg( + self, + ticker: str, + date: str, + adjusted: Optional[bool] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[DailyOpenCloseAgg, HTTPResponse]: + """ + Get the open, close and afterhours prices of a stock symbol on a certain date. + + :param ticker: The exchange symbol that this item is traded under. + :param date: The beginning date for the aggregate window. + :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: Daily open close aggregate + """ + url = f"/v1/open-close/{ticker}/{date}" + + return self._get( + path=url, + params=self._get_params(self.get_daily_open_close_agg, locals()), + deserializer=DailyOpenCloseAgg.from_dict, + raw=raw, + ) + + def get_previous_close_agg( + self, + ticker: str, + adjusted: Optional[bool] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[PreviousCloseAgg, HTTPResponse]: + """ + Get the previous day's open, high, low, and close (OHLC) for the specified stock ticker. + + :param ticker: The ticker symbol of the stock/equity. + :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: Previous close aggregate + """ + url = f"/v2/aggs/ticker/{ticker}/prev" + + return self._get( + path=url, + params=self._get_params(self.get_previous_close_agg, locals()), + result_key="results", + deserializer=PreviousCloseAgg.from_dict, + raw=raw, + ) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 0fed618d..fcad62c4 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -61,6 +61,9 @@ def _get( if result_key: obj = obj[result_key] + else: + # If the result_key does not exist, still need to put the results in a list + obj = [obj] if deserializer: obj = [deserializer(o) for o in obj] diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index 7b3548a5..5b947523 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -4,24 +4,105 @@ @dataclass class Agg: - timestamp: int open: float high: float low: float close: float volume: float vwap: Optional[float] + timestamp: Optional[int] transactions: Optional[int] @staticmethod def from_dict(d): return Agg( - timestamp=d["t"], - open=d["o"], - high=d["h"], - low=d["l"], - close=d["c"], - volume=d["v"], - vwap=d.get("vw", None), - transactions=d.get("n", None), + d.get("o", None), + d.get("h", None), + d.get("l", None), + d.get("c", None), + d.get("v", None), + d.get("vw", None), + d.get("t", None), + d.get("n", None), + ) + + +@dataclass +class GroupedDailyAgg: + ticker: str + open: float + high: float + low: float + close: float + volume: float + vwap: Optional[float] + timestamp: Optional[int] + transactions: Optional[int] + + @staticmethod + def from_dict(d): + return GroupedDailyAgg( + d.get("T", None), + d.get("o", None), + d.get("h", None), + d.get("l", None), + d.get("c", None), + d.get("v", None), + d.get("vw", None), + d.get("t", None), + d.get("n", None), + ) + + +@dataclass +class DailyOpenCloseAgg: + after_hours: Optional[float] + close: float + from_: str + high: float + low: float + open: float + pre_market: Optional[float] + status: Optional[str] + symbol: str + volume: float + + @staticmethod + def from_dict(d): + return DailyOpenCloseAgg( + d.get("afterHours", None), + d.get("close", None), + d.get("from", None), + d.get("high", None), + d.get("low", None), + d.get("open", None), + d.get("preMarket", None), + d.get("status", None), + d.get("symbol", None), + d.get("volume", None), + ) + + +@dataclass +class PreviousCloseAgg: + ticker: str + close: float + high: float + low: float + open: float + timestamp: Optional[float] + volume: float + vwap: Optional[float] + + @staticmethod + def from_dict(d): + return PreviousCloseAgg( + d.get("T", None), + d.get("c", None), + d.get("h", None), + d.get("l", None), + d.get("o", None), + d.get("t", None), + d.get("v", None), + d.get("vw", None), ) diff --git a/tests/mocks.py b/tests/mocks.py index 896bf5c7..a00bae89 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -6,7 +6,19 @@ ( "/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04", '{"ticker":"AAPL","queryCount":2,"resultsCount":2,"adjusted":true,"results":[{"v":6.42646396e+08,"vw":1.469,"o":1.5032,"c":1.4604,"h":1.5064,"l":1.4489,"t":1112331600000,"n":82132},{"v":5.78172308e+08,"vw":1.4589,"o":1.4639,"c":1.4675,"h":1.4754,"l":1.4343,"t":1112587200000,"n":65543}],"status":"OK","request_id":"12afda77aab3b1936c5fb6ef4241ae42","count":2}', - ) + ), + ( + "/v2/aggs/grouped/locale/us/market/stocks/2005-04-04", + '{"queryCount":1,"resultsCount":1,"adjusted": true,"results": [{"T":"GIK","v":895345,"vw":9.9979,"o":9.99,"c":10.02,"h":10.02,"l":9.9,"t":1602705600000,"n":96}],"status":"OK","request_id":"eae3ded2d6d43f978125b7a8a609fad9","count":1}', + ), + ( + "/v1/open-close/AAPL/2005-04-01", + '{"status": "OK","from": "2021-04-01","symbol": "AAPL","open": 123.66,"high": 124.18,"low": 122.49,"close": 123,"volume": 75089134,"afterHours": 123,"preMarket": 123.45}', + ), + ( + "/v2/aggs/ticker/AAPL/prev", + '{"ticker":"AAPL","queryCount":1,"resultsCount":1,"adjusted":true,"results":[{"T":"AAPL","v":9.5595226e+07,"vw":158.6074,"o":162.25,"c":156.8,"h":162.34,"l":156.72,"t":1651003200000,"n":899965}],"status":"OK","request_id":"5e5378d5ecaf3df794bb52e45d015d2e","count":1}', + ), ] diff --git a/tests/test_aggs.py b/tests/test_aggs.py index 3a068ce1..961df02b 100644 --- a/tests/test_aggs.py +++ b/tests/test_aggs.py @@ -1,5 +1,10 @@ from polygon import RESTClient -from polygon.rest.models import Agg +from polygon.rest.models import ( + Agg, + GroupedDailyAgg, + DailyOpenCloseAgg, + PreviousCloseAgg, +) from mocks import BaseTest @@ -30,3 +35,57 @@ def test_get_aggs(self): ), ] self.assertEqual(aggs, expected) + + def test_get_grouped_daily_aggs(self): + c = RESTClient("") + aggs = c.get_grouped_daily_aggs("2005-04-04", True) + expected = [ + GroupedDailyAgg( + ticker="GIK", + open=9.99, + high=10.02, + low=9.9, + close=10.02, + volume=895345, + vwap=9.9979, + timestamp=1602705600000, + transactions=96, + ) + ] + self.assertEqual(aggs, expected) + + def test_get_daily_open_close_agg(self): + c = RESTClient("") + aggs = c.get_daily_open_close_agg("AAPL", "2005-04-01", True) + expected = [ + DailyOpenCloseAgg( + after_hours=123, + close=123, + from_="2021-04-01", + high=124.18, + low=122.49, + open=123.66, + pre_market=123.45, + status="OK", + symbol="AAPL", + volume=75089134, + ) + ] + self.assertEqual(aggs, expected) + + def test_get_previous_close_agg(self): + c = RESTClient("") + aggs = c.get_previous_close_agg("AAPL") + expected = [ + PreviousCloseAgg( + ticker="AAPL", + close=156.8, + high=162.34, + low=156.72, + open=162.25, + timestamp=1651003200000, + volume=95595226.0, + vwap=158.6074, + ) + ] + self.assertEqual(aggs, expected) From 8f27b157269256e65065e548c44a6f1483027b2c Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:59:16 -0400 Subject: [PATCH 021/448] update readme --- README.md | 108 ++++++++----------------------------------------- pyproject.toml | 1 + 2 files changed, 18 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index 6a1636e1..f3f63577 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ -[![Build Status](https://drone.polygon.io/api/badges/polygon-io/client-python/status.svg)](https://drone.polygon.io/polygon-io/client-python) +[![Build Status](https://github.com/polygon-io/client-python/actions/workflows/test/badge.svg)]() [![PyPI version](https://badge.fury.io/py/polygon-api-client.svg)](https://badge.fury.io/py/polygon-api-client) +[![Docs](https://readthedocs.org/projects/polygon-api-client/badge/?version=latest)](https://polygon-api-client.readthedocs.io/en/latest/) # Polygon Python Client - WebSocket & RESTful APIs @@ -11,105 +12,30 @@ For a basic product overview, check out our [setup and use documentation](https: ### Install -`pip install polygon-api-client` - -`polygon-api-client` supports python version >= 3.6 - -## Simple WebSocket Demo -```python -import time - -from polygon import WebSocketClient, STOCKS_CLUSTER - - -def my_custom_process_message(message): - print("this is my custom message processing", message) - - -def my_custom_error_handler(ws, error): - print("this is my custom error handler", error) - +Requires python version >= 3.7 -def my_custom_close_handler(ws): - print("this is my custom close handler") - - -def main(): - key = 'your api key' - my_client = WebSocketClient(STOCKS_CLUSTER, key, my_custom_process_message) - my_client.run_async() - - my_client.subscribe("T.MSFT", "T.AAPL", "T.AMD", "T.NVDA") - time.sleep(1) - - my_client.close_connection() - - -if __name__ == "__main__": - main() -``` +`pip install polygon-api-client` -## Simple REST Demo +## REST Demos +### Getting aggs ```python from polygon import RESTClient - -def main(): - key = "your api key" - - # RESTClient can be used as a context manager to facilitate closing the underlying http session - # https://requests.readthedocs.io/en/master/user/advanced/#session-objects - with RESTClient(key) as client: - resp = client.stocks_equities_daily_open_close("AAPL", "2021-06-11") - print(f"On: {resp.from_} Apple opened at {resp.open} and closed at {resp.close}") - - -if __name__ == '__main__': - main() - +client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key as first parameter. +aggs = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") ``` -### Query parameters for REST calls - -Every function call under our RESTClient has the `query_params` kwargs. These kwargs are passed along and mapped 1:1 -as query parameters to the underling HTTP call. For more information on the different query parameters please reference -our [API Docs](https://polygon.io/docs/). - -#### Example with query parameters - +### Getting trades ```python -import datetime - from polygon import RESTClient +from polygon.rest.models import Sort +client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key as first parameter. -def ts_to_datetime(ts) -> str: - return datetime.datetime.fromtimestamp(ts / 1000.0).strftime('%Y-%m-%d %H:%M') - - -def main(): - key = "your api key" - - # RESTClient can be used as a context manager to facilitate closing the underlying http session - # https://requests.readthedocs.io/en/master/user/advanced/#session-objects - with RESTClient(key) as client: - from_ = "2021-01-01" - to = "2021-02-01" - resp = client.stocks_equities_aggregates("AAPL", 1, "minute", from_, to, unadjusted=False) - - print(f"Minute aggregates for {resp.ticker} between {from_} and {to}.") - - for result in resp.results: - dt = ts_to_datetime(result["t"]) - print(f"{dt}\n\tO: {result['o']}\n\tH: {result['h']}\n\tL: {result['l']}\n\tC: {result['c']} ") - - -if __name__ == '__main__': - main() -``` - -## Notes about the REST Client - -We use swagger as our API spec and we used this swagger to generate most of the code that defines the REST client. -We made this decision due to the size of our API, many endpoints and object definitions, and to accommodate future changes. +trades = [] +for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): + trades.append(t) +``` +### Getting raw response +To handle the raw [urllib3 response](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html?highlight=response#response) yourself, pass `raw=True`. diff --git a/pyproject.toml b/pyproject.toml index 1722a69e..26207f9f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,7 @@ types-urllib3 = "^1.26.13" httpretty = "^1.1.4" Sphinx = "^4.5.0" sphinx-rtd-theme = "^1.0.0" +# keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" [build-system] From 969519f50cc1944b90f87cd1466ae96c361bb938 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:00:06 -0400 Subject: [PATCH 022/448] remove build badge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f3f63577..ee6cf1a2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -[![Build Status](https://github.com/polygon-io/client-python/actions/workflows/test/badge.svg)]() [![PyPI version](https://badge.fury.io/py/polygon-api-client.svg)](https://badge.fury.io/py/polygon-api-client) [![Docs](https://readthedocs.org/projects/polygon-api-client/badge/?version=latest)](https://polygon-api-client.readthedocs.io/en/latest/) From 17020e4f79bdae1cdc5a4ad9b8944322c6fbcfec Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:02:07 -0400 Subject: [PATCH 023/448] clean readme --- README.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ee6cf1a2..fd5e3bac 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,15 @@ # Polygon Python Client - WebSocket & RESTful APIs -Python client for the Polygon.io [Stocks API](https://polygon.io) - -## Getting Started - -For a basic product overview, check out our [setup and use documentation](https://polygon.io/sockets) +Python client for the [Polygon.io API](https://polygon.io). +## Getting started ### Install -Requires python version >= 3.7 - `pip install polygon-api-client` -## REST Demos +Requires python version >= 3.7 + ### Getting aggs ```python from polygon import RESTClient From e61a15cd149e230f117382e77c06eae51f957919 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:03:00 -0400 Subject: [PATCH 024/448] readme raw response example --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fd5e3bac..ec8867e8 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,11 @@ for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.AS ``` ### Getting raw response -To handle the raw [urllib3 response](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html?highlight=response#response) yourself, pass `raw=True`. +To handle the raw [urllib3 response](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html?highlight=response#response) yourself, pass `raw=True`: + +```python +from polygon import RESTClient + +client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key as first parameter. +response = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04", raw=True) +``` From fddaf77494ca1ab66747ff8ad18266751e18e8c6 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 12:03:46 -0400 Subject: [PATCH 025/448] fit on half 1440p screen --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ec8867e8..6fbf6ded 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Requires python version >= 3.7 ```python from polygon import RESTClient -client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key as first parameter. +client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key. aggs = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") ``` @@ -25,7 +25,7 @@ aggs = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") from polygon import RESTClient from polygon.rest.models import Sort -client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key as first parameter. +client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key. trades = [] for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): @@ -38,6 +38,6 @@ To handle the raw [urllib3 response](https://urllib3.readthedocs.io/en/stable/re ```python from polygon import RESTClient -client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key as first parameter. +client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key. response = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04", raw=True) ``` From e10ce56d7bb73d5d7c32a5b3ab916e98661b1ab7 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 28 Apr 2022 13:14:56 -0400 Subject: [PATCH 026/448] use setupclass (#130) --- tests/mocks.py | 12 ++++-------- tests/test_aggs.py | 15 +++++---------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/tests/mocks.py b/tests/mocks.py index a00bae89..02e2b15c 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -23,13 +23,9 @@ class BaseTest(unittest.TestCase): - setup = False - - def setUp(self): - if self.setup: - return + @classmethod + def setUpClass(cls): + cls.c = RESTClient("") httpretty.enable(verbose=True, allow_net_connect=False) - c = RESTClient("") for m in mocks: - httpretty.register_uri(httpretty.GET, c.BASE + m[0], m[1]) - self.setup = True + httpretty.register_uri(httpretty.GET, cls.c.BASE + m[0], m[1]) diff --git a/tests/test_aggs.py b/tests/test_aggs.py index 961df02b..5e651786 100644 --- a/tests/test_aggs.py +++ b/tests/test_aggs.py @@ -1,17 +1,15 @@ -from polygon import RESTClient +from mocks import BaseTest from polygon.rest.models import ( Agg, GroupedDailyAgg, DailyOpenCloseAgg, PreviousCloseAgg, ) -from mocks import BaseTest class AggsTest(BaseTest): def test_get_aggs(self): - c = RESTClient("") - aggs = c.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") + aggs = self.c.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") expected = [ Agg( open=1.5032, @@ -37,8 +35,7 @@ def test_get_aggs(self): self.assertEqual(aggs, expected) def test_get_grouped_daily_aggs(self): - c = RESTClient("") - aggs = c.get_grouped_daily_aggs("2005-04-04", True) + aggs = self.c.get_grouped_daily_aggs("2005-04-04", True) expected = [ GroupedDailyAgg( ticker="GIK", @@ -55,8 +52,7 @@ def test_get_grouped_daily_aggs(self): self.assertEqual(aggs, expected) def test_get_daily_open_close_agg(self): - c = RESTClient("") - aggs = c.get_daily_open_close_agg("AAPL", "2005-04-01", True) + aggs = self.c.get_daily_open_close_agg("AAPL", "2005-04-01", True) expected = [ DailyOpenCloseAgg( after_hours=123, @@ -74,8 +70,7 @@ def test_get_daily_open_close_agg(self): self.assertEqual(aggs, expected) def test_get_previous_close_agg(self): - c = RESTClient("") - aggs = c.get_previous_close_agg("AAPL") + aggs = self.c.get_previous_close_agg("AAPL") expected = [ PreviousCloseAgg( ticker="AAPL", From 4601cd11618f3658dde45e024a63c7e6f75a60cf Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 13:20:20 -0400 Subject: [PATCH 027/448] remove module index --- docs/source/index.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 6cc7d51d..10a3a0cd 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -17,5 +17,4 @@ Indices and tables ================== * :ref:`genindex` -* :ref:`modindex` * :ref:`search` From 2d57f395a9c03f22645849f42a48d1c16618d4f8 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Thu, 28 Apr 2022 13:26:54 -0400 Subject: [PATCH 028/448] set docs env var in conf.py --- docs/Makefile | 2 +- docs/source/conf.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Makefile b/docs/Makefile index 7f823a57..bed4efb2 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -17,4 +17,4 @@ help: # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - POLYGON_API_KEY="POLYGON_API_KEY" $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/source/conf.py b/docs/source/conf.py index cef0ef75..235ee004 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -14,7 +14,7 @@ import sys sys.path.insert(0, os.path.abspath('../..')) print('docs path', sys.path[0]) - +os.environ['POLYGON_API_KEY'] = 'POLYGON_API_KEY' # -- Project information ----------------------------------------------------- From 9db0beb621a12b3be333629a89064458f75e1fd4 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 28 Apr 2022 15:01:24 -0400 Subject: [PATCH 029/448] Date param support (#131) * add time mult * add example --- polygon/rest/aggs.py | 16 ++++++------ polygon/rest/base.py | 27 ++++++++++++++++++--- polygon/rest/quotes.py | 11 +++++---- polygon/rest/reference.py | 51 ++++++++++++++++++++------------------- polygon/rest/trades.py | 13 +++++----- rest-example.py | 7 ++++-- 6 files changed, 76 insertions(+), 49 deletions(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 9643711a..1822471e 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -1,9 +1,8 @@ -from email.headerregistry import Group from .base import BaseClient from typing import Optional, Any, Dict, List, Union from .models import Agg, GroupedDailyAgg, DailyOpenCloseAgg, PreviousCloseAgg, Sort from urllib3 import HTTPResponse -from datetime import datetime +from datetime import datetime, date # https://polygon.io/docs/stocks class AggsClient(BaseClient): @@ -13,8 +12,8 @@ def get_aggs( multiplier: int, timespan: str, # "from" is a keyword in python https://www.w3schools.com/python/python_ref_keywords.asp - from_: Union[str, int, datetime], - to: Union[str, int, datetime], + from_: Union[str, int, datetime, date], + to: Union[str, int, datetime, date], adjusted: Optional[bool] = None, sort: Optional[Union[str, Sort]] = None, limit: Optional[int] = None, @@ -23,11 +22,12 @@ def get_aggs( ) -> Union[List[Agg], HTTPResponse]: """ Get aggregate bars for a ticker over a given date range in custom time window sizes. + :param ticker: The ticker symbol. :param multiplier: The size of the timespan multiplier. :param timespan: The size of the time window. - :param _from: The start of the aggregate time window as YYYY-MM-DD, Unix MS Timestamps, or a datetime. - :param to: The end of the aggregate time window as YYYY-MM-DD, Unix MS Timestamps, or a datetime. + :param _from: The start of the aggregate time window as YYYY-MM-DD, a date, Unix MS Timestamp, or a datetime. + :param to: The end of the aggregate time window as YYYY-MM-DD, a date, Unix MS Timestamp, or a datetime. :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. :param sort: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window. :param limit: Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements. @@ -36,10 +36,10 @@ def get_aggs( :return: List of aggregates """ if isinstance(from_, datetime): - from_ = int(from_.timestamp() * 1000) + from_ = int(from_.timestamp() * self.time_mult("millis")) if isinstance(to, datetime): - to = int(to.timestamp() * 1000) + to = int(to.timestamp() * self.time_mult("millis")) url = f"/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" return self._get( diff --git a/polygon/rest/base.py b/polygon/rest/base.py index fcad62c4..19b5efd2 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -3,12 +3,13 @@ import urllib3 import inspect from enum import Enum -from typing import Optional, Any +from typing import Optional, Any, Dict +from datetime import datetime base = "https://api.polygon.io" env_key = "POLYGON_API_KEY" -# https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html + class BaseClient: def __init__( self, @@ -18,6 +19,7 @@ def __init__( num_pools: int = 10, retries=3, base: str = base, + verbose: bool = False, ): if api_key is None: raise Exception( @@ -26,12 +28,14 @@ def __init__( self.API_KEY = api_key self.BASE = base + # https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool self.client = urllib3.PoolManager( num_pools=num_pools, headers={"Authorization": "Bearer " + self.API_KEY} ) self.timeout = urllib3.Timeout(connect=connect_timeout, read=read_timeout) self.retries = retries + self.verbose = verbose def _decode(self, resp): return json.loads(resp.data.decode("utf-8")) @@ -47,6 +51,8 @@ def _get( if params is None: params = {} params = {str(k): str(v) for k, v in params.items() if v is not None} + if self.verbose: + print("_get", path, params) resp = self.client.request( "GET", self.BASE + path, fields=params, retries=self.retries ) @@ -70,7 +76,20 @@ def _get( return obj - def _get_params(self, fn, caller_locals): + @staticmethod + def time_mult(timestamp_res: str) -> int: + if timestamp_res == "nanos": + return 1000000000 + elif timestamp_res == "micros": + return 1000000 + elif timestamp_res == "millis": + return 1000 + + return 1 + + def _get_params( + self, fn, caller_locals: Dict[str, Any], datetime_res: str = "nanos" + ): params = caller_locals["params"] if params is None: params = {} @@ -84,6 +103,8 @@ def _get_params(self, fn, caller_locals): val = caller_locals.get(argname, v.default) if isinstance(val, Enum): val = val.value + elif isinstance(val, datetime): + val = int(val.timestamp() * self.time_mult(datetime_res)) if val is not None: params[argname.replace("_", ".")] = val diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index 198e3adf..e602e61f 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -2,17 +2,18 @@ from typing import Optional, Any, Dict, List, Union from .models import Quote, LastQuote, Sort, Order from urllib3 import HTTPResponse +from datetime import datetime, date # https://polygon.io/docs/stocks class QuotesClient(BaseClient): def list_quotes( self, ticker: str, - timestamp: Optional[str] = None, - timestamp_lt: Optional[str] = None, - timestamp_lte: Optional[str] = None, - timestamp_gt: Optional[str] = None, - timestamp_gte: Optional[str] = None, + timestamp: Optional[Union[str, int, datetime, date]] = None, + timestamp_lt: Optional[Union[str, int, datetime, date]] = None, + timestamp_lte: Optional[Union[str, int, datetime, date]] = None, + timestamp_gt: Optional[Union[str, int, datetime, date]] = None, + timestamp_gte: Optional[Union[str, int, datetime, date]] = None, limit: Optional[int] = None, sort: Optional[Union[str, Sort]] = None, order: Optional[Union[str, Order]] = None, diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 67bf2647..592632a2 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -21,6 +21,7 @@ Exchange, ) from urllib3 import HTTPResponse +from datetime import date # https://polygon.io/docs/stocks class MarketsClient(BaseClient): @@ -200,11 +201,11 @@ def list_splits( ticker_lte: Optional[str] = None, ticker_gt: Optional[str] = None, ticker_gte: Optional[str] = None, - execution_date: Optional[str] = None, - execution_date_lt: Optional[str] = None, - execution_date_lte: Optional[str] = None, - execution_date_gt: Optional[str] = None, - execution_date_gte: Optional[str] = None, + execution_date: Optional[Union[str, date]] = None, + execution_date_lt: Optional[Union[str, date]] = None, + execution_date_lte: Optional[Union[str, date]] = None, + execution_date_gt: Optional[Union[str, date]] = None, + execution_date_gte: Optional[Union[str, date]] = None, reverse_split: Optional[bool] = None, limit: Optional[int] = None, sort: Optional[Union[str, Sort]] = None, @@ -251,26 +252,26 @@ def list_dividends( ticker_lte: Optional[str] = None, ticker_gt: Optional[str] = None, ticker_gte: Optional[str] = None, - ex_dividend_date: Optional[str] = None, - ex_dividend_date_lt: Optional[str] = None, - ex_dividend_date_lte: Optional[str] = None, - ex_dividend_date_gt: Optional[str] = None, - ex_dividend_date_gte: Optional[str] = None, - record_date: Optional[str] = None, - record_date_lt: Optional[str] = None, - record_date_lte: Optional[str] = None, - record_date_gt: Optional[str] = None, - record_date_gte: Optional[str] = None, - declaration_date: Optional[str] = None, - declaration_date_lt: Optional[str] = None, - declaration_date_lte: Optional[str] = None, - declaration_date_gt: Optional[str] = None, - declaration_date_gte: Optional[str] = None, - pay_date: Optional[str] = None, - pay_date_lt: Optional[str] = None, - pay_date_lte: Optional[str] = None, - pay_date_gt: Optional[str] = None, - pay_date_gte: Optional[str] = None, + ex_dividend_date: Optional[Union[str, date]] = None, + ex_dividend_date_lt: Optional[Union[str, date]] = None, + ex_dividend_date_lte: Optional[Union[str, date]] = None, + ex_dividend_date_gt: Optional[Union[str, date]] = None, + ex_dividend_date_gte: Optional[Union[str, date]] = None, + record_date: Optional[Union[str, date]] = None, + record_date_lt: Optional[Union[str, date]] = None, + record_date_lte: Optional[Union[str, date]] = None, + record_date_gt: Optional[Union[str, date]] = None, + record_date_gte: Optional[Union[str, date]] = None, + declaration_date: Optional[Union[str, date]] = None, + declaration_date_lt: Optional[Union[str, date]] = None, + declaration_date_lte: Optional[Union[str, date]] = None, + declaration_date_gt: Optional[Union[str, date]] = None, + declaration_date_gte: Optional[Union[str, date]] = None, + pay_date: Optional[Union[str, date]] = None, + pay_date_lt: Optional[Union[str, date]] = None, + pay_date_lte: Optional[Union[str, date]] = None, + pay_date_gt: Optional[Union[str, date]] = None, + pay_date_gte: Optional[Union[str, date]] = None, frequency: Optional[Union[int, Frequency]] = None, cash_amount: Optional[float] = None, cash_amount_lt: Optional[float] = None, diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 85cac40a..c652493b 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -2,17 +2,18 @@ from typing import Optional, Any, Dict, Union, Iterator from .models import Trade, Sort, Order from urllib3 import HTTPResponse +from datetime import datetime, date + -# https://polygon.io/docs/stocks class TradesClient(BaseClient): def list_trades( self, ticker: str, - timestamp: Optional[str] = None, - timestamp_lt: Optional[str] = None, - timestamp_lte: Optional[str] = None, - timestamp_gt: Optional[str] = None, - timestamp_gte: Optional[str] = None, + timestamp: Optional[Union[str, int, datetime, date]] = None, + timestamp_lt: Optional[Union[str, int, datetime, date]] = None, + timestamp_lte: Optional[Union[str, int, datetime, date]] = None, + timestamp_gt: Optional[Union[str, int, datetime, date]] = None, + timestamp_gte: Optional[Union[str, int, datetime, date]] = None, limit: Optional[int] = None, sort: Optional[Union[str, Sort]] = None, order: Optional[Union[str, Order]] = None, diff --git a/rest-example.py b/rest-example.py index e60ebd54..b16f12e7 100644 --- a/rest-example.py +++ b/rest-example.py @@ -1,9 +1,12 @@ from polygon import RESTClient from polygon.rest.models import Sort +from datetime import date, datetime -client = RESTClient() +client = RESTClient(verbose=True) -aggs = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") +aggs = client.get_aggs("AAPL", 1, "day", "2005-04-04", "2005-04-04") +print(aggs) +aggs = client.get_aggs("AAPL", 1, "day", date(2005, 4, 4), datetime(2005, 4, 4)) print(aggs) trades = [] From 4057f247d6e6cad819dd3ceb43043c41cc5a6117 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 28 Apr 2022 15:48:00 -0400 Subject: [PATCH 030/448] Tickers tests (#133) --- polygon/rest/models/tickers.py | 6 +- polygon/rest/reference.py | 8 +- tests/mocks.py | 21 ++++ tests/test_tickers.py | 196 +++++++++++++++++++++++++++++++++ 4 files changed, 228 insertions(+), 3 deletions(-) create mode 100644 tests/test_tickers.py diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 681fd669..a7c2b0ca 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -31,6 +31,9 @@ class Ticker: cik: Optional[str] = None composite_figi: Optional[str] = None currency_name: Optional[str] = None + currency_symbol: Optional[str] = None + base_currency_symbol: Optional[str] = None + base_currency_name: Optional[str] = None delisted_utc: Optional[str] = None last_updated_utc: Optional[str] = None locale: Optional[Locale] = None @@ -57,6 +60,7 @@ class TickerDetails: currency_name: Optional[str] = None delisted_utc: Optional[str] = None description: Optional[str] = None + ticker_root: Optional[str] = None homepage_url: Optional[str] = None list_date: Optional[str] = None locale: Optional[Locale] = None @@ -109,4 +113,4 @@ class TickerTypes: @staticmethod def from_dict(d): - return TickerNews(**d) + return TickerTypes(**d) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 592632a2..9fd848ff 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -176,7 +176,7 @@ def get_ticker_types( locale: Optional[Union[str, Locale]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[TickerTypes, HTTPResponse]: + ) -> Union[List[TickerTypes], HTTPResponse]: """ List all ticker types that Polygon.io has. @@ -189,7 +189,11 @@ def get_ticker_types( url = "/v3/reference/tickers/types" return self._get( - path=url, params=params, deserializer=TickerTypes.from_dict, raw=raw + path=url, + params=params, + deserializer=TickerTypes.from_dict, + raw=raw, + result_key="results", ) diff --git a/tests/mocks.py b/tests/mocks.py index 02e2b15c..e0b62bc4 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -19,12 +19,33 @@ "/v2/aggs/ticker/AAPL/prev", '{"ticker":"AAPL","queryCount":1,"resultsCount":1,"adjusted":true,"results":[{"T":"AAPL","v":9.5595226e+07,"vw":158.6074,"o":162.25,"c":156.8,"h":162.34,"l":156.72,"t":1651003200000,"n":899965}],"status":"OK","request_id":"5e5378d5ecaf3df794bb52e45d015d2e","count":1}', ), + ( + "/v3/reference/tickers", + '{"results":[{"ticker":"A","name":"Agilent Technologies Inc.","market":"stocks","locale":"us","primary_exchange":"XNYS","type":"CS","active":true,"currency_name":"usd","cik":"0001090872","composite_figi":"BBG000C2V3D6","share_class_figi":"BBG001SCTQY4","last_updated_utc":"2022-04-27T00:00:00Z"},{"ticker":"AA","name":"Alcoa Corporation","market":"stocks","locale":"us","primary_exchange":"XNYS","type":"CS","active":true,"currency_name":"usd","cik":"0001675149","composite_figi":"BBG00B3T3HD3","share_class_figi":"BBG00B3T3HF1","last_updated_utc":"2022-04-27T00:00:00Z"}],"status":"OK","request_id":"37089bb3b4ef99a796cdc82ff971e447","count":2,"next_url":"https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg"}', + ), + ( + "/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg", + '{"results":[{"ticker":"AAA","name":"AAF First Priority CLO Bond ETF","market":"stocks","locale":"us","primary_exchange":"ARCX","type":"ETF","active":true,"currency_name":"usd","composite_figi":"BBG00X5FSP48","share_class_figi":"BBG00X5FSPZ4","last_updated_utc":"2022-04-27T00:00:00Z"},{"ticker":"AAAU","name":"Goldman Sachs Physical Gold ETF Shares","market":"stocks","locale":"us","primary_exchange":"BATS","type":"ETF","active":true,"currency_name":"usd","cik":"0001708646","composite_figi":"BBG00LPXX872","share_class_figi":"BBG00LPXX8Z1","last_updated_utc":"2022-04-27T00:00:00Z"}],"status":"OK","request_id":"40d60d83fa0628503b4d13387b7bde2a","count":2}', + ), + ( + "/v3/reference/tickers/AAPL", + '{"ticker":"AAPL","name":"Apple Inc.","market":"stocks","locale":"us","primary_exchange":"XNAS","type":"CS","active":true,"currency_name":"usd","cik":"0000320193","composite_figi":"BBG000B9XRY4","share_class_figi":"BBG001S5N8V8","market_cap":2.6714924917e+12,"phone_number":"(408) 996-1010","address":{"address1":"ONE APPLE PARK WAY","city":"CUPERTINO","state":"CA","postal_code":"95014"},"description":"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.","sic_code":"3571","sic_description":"ELECTRONIC COMPUTERS","ticker_root":"AAPL","homepage_url":"https://www.apple.com","total_employees":154000,"list_date":"1980-12-12","branding":{"logo_url":"https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg","icon_url":"https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png"},"share_class_shares_outstanding":16319440000,"weighted_shares_outstanding":16319441000}', + ), + ( + "/v2/reference/news", + '{"results":[{"id":"JeJEhAVoKaqJ2zF9nzQYMg07UlEeWlis6Dsop33TPQY","publisher":{"name":"MarketWatch","homepage_url":"https://www.marketwatch.com/","logo_url":"https://s3.polygon.io/public/assets/news/logos/marketwatch.svg","favicon_url":"https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico"},"title":"Theres a big hole in the Feds theory of inflation—incomes are falling at a record 10.9 rate","author":"MarketWatch","published_utc":"2022-04-28T17:08:00Z","article_url":"https://www.marketwatch.com/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705","tickers":["MSFT","TSN","NFLX","AMZN"],"amp_url":"https://www.marketwatch.com/amp/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705","image_url":"https://images.mktw.net/im-533637/social","description":"If inflation is all due to an overly generous federal government giving its people too much money, then our inflation problem is about to go away."}],"status":"OK","request_id":"f5248459196e12f27520afd41cee5126","count":10}', + ), + ( + "/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}', + ), ] class BaseTest(unittest.TestCase): @classmethod def setUpClass(cls): + cls.maxDiff = None cls.c = RESTClient("") httpretty.enable(verbose=True, allow_net_connect=False) for m in mocks: diff --git a/tests/test_tickers.py b/tests/test_tickers.py new file mode 100644 index 00000000..fc14190e --- /dev/null +++ b/tests/test_tickers.py @@ -0,0 +1,196 @@ +from polygon import RESTClient +from polygon.rest.models import ( + Ticker, + TickerDetails, + TickerNews, + TickerTypes, +) +from mocks import BaseTest + + +class TickersTest(BaseTest): + def test_list_tickers(self): + tickers = [t for t in self.c.list_tickers()] + expected = [ + Ticker( + active=True, + cik=None, + composite_figi="BBG00X5FSP48", + currency_name="usd", + currency_symbol=None, + base_currency_symbol=None, + base_currency_name=None, + delisted_utc=None, + last_updated_utc="2022-04-27T00:00:00Z", + locale="us", + market="stocks", + name="AAF First Priority CLO Bond ETF", + primary_exchange="ARCX", + share_class_figi="BBG00X5FSPZ4", + ticker="AAA", + type="ETF", + ), + Ticker( + active=True, + cik="0001708646", + composite_figi="BBG00LPXX872", + currency_name="usd", + currency_symbol=None, + base_currency_symbol=None, + base_currency_name=None, + delisted_utc=None, + last_updated_utc="2022-04-27T00:00:00Z", + locale="us", + market="stocks", + name="Goldman Sachs Physical Gold ETF Shares", + primary_exchange="BATS", + share_class_figi="BBG00LPXX8Z1", + ticker="AAAU", + type="ETF", + ), + ] + self.assertEqual(tickers, expected) + + def test_get_ticker_details(self): + details = self.c.get_ticker_details("AAPL") + expected = [ + TickerDetails( + active=True, + address={ + "address1": "ONE APPLE PARK WAY", + "city": "CUPERTINO", + "state": "CA", + "postal_code": "95014", + }, + branding={ + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png", + }, + cik="0000320193", + composite_figi="BBG000B9XRY4", + currency_name="usd", + delisted_utc=None, + description="Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.", + ticker_root="AAPL", + homepage_url="https://www.apple.com", + list_date="1980-12-12", + locale="us", + market="stocks", + market_cap=2671492491700.0, + name="Apple Inc.", + phone_number="(408) 996-1010", + primary_exchange="XNAS", + share_class_figi="BBG001S5N8V8", + share_class_shares_outstanding=16319440000, + sic_code="3571", + sic_description="ELECTRONIC COMPUTERS", + ticker="AAPL", + total_employees=154000, + type="CS", + weighted_shares_outstanding=16319441000, + ) + ] + self.assertEqual(details, expected) + + def test_list_ticker_news(self): + news = [t for t in self.c.list_ticker_news("NFLX")] + expected = [ + TickerNews( + amp_url="https://www.marketwatch.com/amp/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705", + article_url="https://www.marketwatch.com/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705", + author="MarketWatch", + description="If inflation is all due to an overly generous federal government giving its people too much money, then our inflation problem is about to go away.", + id="JeJEhAVoKaqJ2zF9nzQYMg07UlEeWlis6Dsop33TPQY", + image_url="https://images.mktw.net/im-533637/social", + keywords=None, + published_utc="2022-04-28T17:08:00Z", + publisher={ + "name": "MarketWatch", + "homepage_url": "https://www.marketwatch.com/", + "logo_url": "https://s3.polygon.io/public/assets/news/logos/marketwatch.svg", + "favicon_url": "https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico", + }, + tickers=["MSFT", "TSN", "NFLX", "AMZN"], + title="Theres a big hole in the Feds theory of inflation—incomes are falling at a record 10.9 rate", + ) + ] + self.assertEqual(news, expected) + + def test_get_ticker_types(self): + types = self.c.get_ticker_types("stocks") + expected = [ + TickerTypes( + asset_class="stocks", code="CS", description="Common Stock", locale="us" + ), + TickerTypes( + asset_class="stocks", + code="PFD", + description="Preferred Stock", + locale="us", + ), + TickerTypes( + asset_class="stocks", code="WARRANT", description="Warrant", locale="us" + ), + TickerTypes( + asset_class="stocks", code="RIGHT", description="Rights", locale="us" + ), + TickerTypes( + asset_class="stocks", + code="BOND", + description="Corporate Bond", + locale="us", + ), + TickerTypes( + asset_class="stocks", + code="ETF", + description="Exchange Traded Fund", + locale="us", + ), + TickerTypes( + asset_class="stocks", + code="ETN", + description="Exchange Traded Note", + locale="us", + ), + TickerTypes( + asset_class="stocks", + code="SP", + description="Structured Product", + locale="us", + ), + TickerTypes( + asset_class="stocks", + code="ADRC", + description="American Depository Receipt Common", + locale="us", + ), + TickerTypes( + asset_class="stocks", + code="ADRW", + description="American Depository Receipt Warrants", + locale="us", + ), + TickerTypes( + asset_class="stocks", + code="ADRR", + description="American Depository Receipt Rights", + locale="us", + ), + TickerTypes( + asset_class="stocks", code="FUND", description="Fund", locale="us" + ), + TickerTypes( + asset_class="stocks", code="BASKET", description="Basket", locale="us" + ), + TickerTypes( + asset_class="stocks", code="UNIT", description="Unit", locale="us" + ), + TickerTypes( + asset_class="stocks", + code="LT", + description="Liquidating Trust", + locale="us", + ), + ] + + self.assertEqual(types, expected) From 0d875a3cfdaeef9b464546daa051231d1c256dce Mon Sep 17 00:00:00 2001 From: Miles Dayoub <38268139+mcdayoub@users.noreply.github.com> Date: Thu, 28 Apr 2022 16:25:50 -0400 Subject: [PATCH 031/448] Trade endpoints (#134) * added last trade and last trade crypto --- polygon/rest/base.py | 6 ++-- polygon/rest/models/trades.py | 65 +++++++++++++++++++++++++++++++++++ polygon/rest/trades.py | 50 ++++++++++++++++++++++++++- rest-example.py | 7 ---- 4 files changed, 118 insertions(+), 10 deletions(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 19b5efd2..18293c26 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -67,8 +67,10 @@ def _get( if result_key: obj = obj[result_key] - else: - # If the result_key does not exist, still need to put the results in a list + + # If obj is not yet a list, need to turn it into a list + # This is for the Daily Open/Close and Last Trade endpoints + if type(obj) != list: obj = [obj] if deserializer: diff --git a/polygon/rest/models/trades.py b/polygon/rest/models/trades.py index 5fc7a1d5..e14cfa0b 100644 --- a/polygon/rest/models/trades.py +++ b/polygon/rest/models/trades.py @@ -21,3 +21,68 @@ class Trade: @staticmethod def from_dict(d): return Trade(**d) + + +@dataclass +class LastTrade: + ticker: str + trf_timestamp: int + sequence_number: float + sip_timestamp: int + participant_timestamp: int + conditions: List[int] + correction: int + id: str + price: float + trf_id: int + size: float + exchange: int + tape: int + + @staticmethod + def from_dict(d): + return LastTrade( + d.get("T", None), + d.get("f", None), + d.get("q", None), + d.get("t", None), + d.get("y", None), + d.get("c", None), + d.get("e", None), + d.get("i", None), + d.get("p", None), + d.get("r", None), + d.get("s", None), + d.get("x", None), + d.get("z", None), + ) + + +@dataclass +class Last: + conditions: List[int] + exchange: int + price: float + size: float + timestamp: int + + @staticmethod + def from_dict(d): + return Last(**d) + + +@dataclass +class LastTradeCrypto: + last: Last + ticker: str + status: str + request_id: str + + @staticmethod + def from_dict(d): + return LastTradeCrypto( + d.get("last", None), + d.get("symbol", None), + d.get("status", None), + d.get("request_id", None), + ) diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index c652493b..89dd24eb 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -1,6 +1,6 @@ from .base import BaseClient from typing import Optional, Any, Dict, Union, Iterator -from .models import Trade, Sort, Order +from .models import Trade, LastTrade, LastTradeCrypto, Sort, Order from urllib3 import HTTPResponse from datetime import datetime, date @@ -44,3 +44,51 @@ def list_trades( raw=raw, deserializer=Trade.from_dict, ) + + def get_last_trade( + self, + ticker: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[LastTrade, HTTPResponse]: + """ + Get the most recent trade for a ticker. + + :param ticker: The ticker symbol of the asset + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: Last trade + """ + url = f"/v2/last/trade/{ticker}" + + return self._get( + path=url, + params=self._get_params(self.get_last_trade, locals()), + result_key="results", + deserializer=LastTrade.from_dict, + raw=raw, + ) + + def get_last_trade_crypto( + self, + from_: str, + to: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[LastTrade, HTTPResponse]: + """ + Get the most recent trade for a ticker. + + :param ticker: The ticker symbol of the asset + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: Last trade + """ + url = f"/v1/last/crypto/{from_}/{to}" + + return self._get( + path=url, + params=self._get_params(self.get_last_trade_crypto, locals()), + deserializer=LastTradeCrypto.from_dict, + raw=raw, + ) diff --git a/rest-example.py b/rest-example.py index b16f12e7..b2bca0cc 100644 --- a/rest-example.py +++ b/rest-example.py @@ -8,10 +8,3 @@ print(aggs) aggs = client.get_aggs("AAPL", 1, "day", date(2005, 4, 4), datetime(2005, 4, 4)) print(aggs) - -trades = [] -for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): - trades.append(t) -print(trades) - -print(client.list_trades("AAA", timestamp="2022-04-20", limit=5, raw=True)) From a9e6ab77ad13ca736d045058b0abb9be33b961df Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Fri, 29 Apr 2022 10:21:04 -0400 Subject: [PATCH 032/448] Market tests (#135) --- polygon/rest/models/markets.py | 9 ++- polygon/rest/reference.py | 8 +- tests/mocks.py | 8 ++ tests/test_markets.py | 141 +++++++++++++++++++++++++++++++++ tests/test_tickers.py | 1 - 5 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 tests/test_markets.py diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index efa5b2ff..85adfa7b 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -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), + ) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 9fd848ff..4b278d31 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -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 @@ -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( diff --git a/tests/mocks.py b/tests/mocks.py index e0b62bc4..fd2a81bf 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -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"}}', + ), ] diff --git a/tests/test_markets.py b/tests/test_markets.py new file mode 100644 index 00000000..5076babc --- /dev/null +++ b/tests/test_markets.py @@ -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) diff --git a/tests/test_tickers.py b/tests/test_tickers.py index fc14190e..bcdf5be6 100644 --- a/tests/test_tickers.py +++ b/tests/test_tickers.py @@ -1,4 +1,3 @@ -from polygon import RESTClient from polygon.rest.models import ( Ticker, TickerDetails, From c4c73106673d234bb64c2ddf3f249c9363c1bca2 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Fri, 29 Apr 2022 10:36:13 -0400 Subject: [PATCH 033/448] add user agent string (#137) * add user agent string * lint --- polygon/rest/base.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 18293c26..f719a8e9 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -31,7 +31,11 @@ def __init__( # https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool self.client = urllib3.PoolManager( - num_pools=num_pools, headers={"Authorization": "Bearer " + self.API_KEY} + num_pools=num_pools, + headers={ + "Authorization": "Bearer " + self.API_KEY, + "User-Agent": "Python client", + }, ) self.timeout = urllib3.Timeout(connect=connect_timeout, read=read_timeout) self.retries = retries From 1aa6d01727f2c9a916bfc359a66c16e8dd8c5825 Mon Sep 17 00:00:00 2001 From: Miles Dayoub <38268139+mcdayoub@users.noreply.github.com> Date: Fri, 29 Apr 2022 11:12:58 -0400 Subject: [PATCH 034/448] Trades tests (#136) * trades tests * trial error * trial error * style --- tests/mocks.py | 12 +++++++ tests/test_trades.py | 83 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 tests/test_trades.py diff --git a/tests/mocks.py b/tests/mocks.py index fd2a81bf..62f54c20 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -39,6 +39,18 @@ "/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}', ), + ( + "/v2/last/trade/AAPL", + '{"results":{"c":[12,37],"i":"237688","p":166.25,"s":2,"x":4,"r":202,"z":3,"T":"AAPL","t":1651179319310617300,"y":1651179319308000000,"f":1651179319310588400,"q":7084210},"status":"OK","request_id":"d4bafa50e72cf9ed19ac538ae1a3185a"}', + ), + ( + "/v1/last/crypto/BTC/USD", + '{"last":{"conditions":[2],"exchange":2,"price":39976.89682331,"size":0.005,"timestamp":1651180409688},"request_id":"d67c9bfe1fa0c29db9177d78b3ab713c","status":"success","symbol":"BTC-USD"}', + ), + ( + "/v3/trades/AAPL", + '{"results":[{"conditions":[12,37],"correction":1,"exchange":11,"id":"183276","participant_timestamp":1651181822461636600,"price":156.43,"sequence_number":7179341,"sip_timestamp":1651181822461979400,"size":10,"tape":3,"trf_id":3,"trf_timestamp":1651181557090806500},{"conditions":[12,37],"correction":1,"exchange":12,"id":"183276","participant_timestamp":1651181822461636600,"price":157.43,"sequence_number":7179341,"sip_timestamp":1651181822461979400,"size":10,"tape":3,"trf_id":3,"trf_timestamp":1651181557090806500}],"status":"OK","request_id":"756f9910624b35a47eb07f21a7a373bb"}', + ), ( "/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"}]', diff --git a/tests/test_trades.py b/tests/test_trades.py new file mode 100644 index 00000000..a1717a0e --- /dev/null +++ b/tests/test_trades.py @@ -0,0 +1,83 @@ +from mocks import BaseTest +from polygon.rest.models import ( + Trade, + LastTrade, + Last, + LastTradeCrypto, +) + + +class TradesTest(BaseTest): + def test_get_last_trade(self): + last_trade = self.c.get_last_trade("AAPL") + expected = [ + LastTrade( + ticker="AAPL", + trf_timestamp=1651179319310588400, + sequence_number=7084210, + sip_timestamp=1651179319310617300, + participant_timestamp=1651179319308000000, + conditions=[12, 37], + correction=None, + id="237688", + price=166.25, + trf_id=202, + size=2, + exchange=4, + tape=3, + ) + ] + self.assertEqual(last_trade, expected) + + def test_get_last_trade_crypto(self): + last_trade_crypto = self.c.get_last_trade_crypto("BTC", "USD") + expected = [ + LastTradeCrypto( + last={ + "conditions": [2], + "exchange": 2, + "price": 39976.89682331, + "size": 0.005, + "timestamp": 1651180409688, + }, + ticker="BTC-USD", + status="success", + request_id="d67c9bfe1fa0c29db9177d78b3ab713c", + ) + ] + self.assertEqual(last_trade_crypto, expected) + + def test_trades(self): + trades = [t for t in self.c.list_trades(ticker="AAPL", limit=2)] + print(trades) + expected = [ + Trade( + conditions=[12, 37], + correction=1, + exchange=11, + id="183276", + participant_timestamp=1651181822461636600, + price=156.43, + sequence_number=7179341, + sip_timestamp=1651181822461979400, + size=10, + tape=3, + trf_id=3, + trf_timestamp=1651181557090806500, + ), + Trade( + conditions=[12, 37], + correction=1, + exchange=12, + id="183276", + participant_timestamp=1651181822461636600, + price=157.43, + sequence_number=7179341, + sip_timestamp=1651181822461979400, + size=10, + tape=3, + trf_id=3, + trf_timestamp=1651181557090806500, + ), + ] + self.assertEqual(trades, expected) From 4ebd168e8d6e3cf0ed4695e6c8ad9973b6f5605d Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Fri, 29 Apr 2022 11:44:05 -0400 Subject: [PATCH 035/448] add missing automethod docs (#138) * add missing automethod docs * fix name * formatting --- docs/source/Aggs.rst | 25 +++++++++++++++++++++++++ docs/source/Quotes.rst | 1 - docs/source/Trades.rst | 10 ++++++++++ docs/source/index.rst | 1 + 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 docs/source/Aggs.rst diff --git a/docs/source/Aggs.rst b/docs/source/Aggs.rst new file mode 100644 index 00000000..6db60e68 --- /dev/null +++ b/docs/source/Aggs.rst @@ -0,0 +1,25 @@ +.. _aggs_header: + +Aggs +========== + +=========== +Get aggs +=========== +.. automethod:: polygon.RESTClient.get_aggs + +============================ +Get grouped daily aggs +============================ +.. automethod:: polygon.RESTClient.get_grouped_daily_aggs + +============================ +Get daily open close agg +============================ +.. automethod:: polygon.RESTClient.get_daily_open_close_agg + +============================ +Get previous close agg +============================ +.. automethod:: polygon.RESTClient.get_previous_close_agg + diff --git a/docs/source/Quotes.rst b/docs/source/Quotes.rst index 4c379455..f5b7b824 100644 --- a/docs/source/Quotes.rst +++ b/docs/source/Quotes.rst @@ -6,7 +6,6 @@ Quotes =========== List quotes =========== - .. automethod:: polygon.RESTClient.list_quotes ============== diff --git a/docs/source/Trades.rst b/docs/source/Trades.rst index 50e628c4..fc3d9d96 100644 --- a/docs/source/Trades.rst +++ b/docs/source/Trades.rst @@ -7,3 +7,13 @@ Trades List trades =========== .. automethod:: polygon.RESTClient.list_trades + +=========== +Get last trade +=========== +.. automethod:: polygon.RESTClient.get_last_trade + +=========== +Get last trade (crypto) +=========== +.. automethod:: polygon.RESTClient.get_last_trade_crypto diff --git a/docs/source/index.rst b/docs/source/index.rst index 10a3a0cd..36bd6e23 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,6 +8,7 @@ This documentation is for the Python client only. For details about the response :caption: Contents: Getting-Started + Aggs Quotes Reference Trades From 09127590e8b6ffbfd56fe72aa22d7fdaba5abcb9 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Fri, 29 Apr 2022 11:45:10 -0400 Subject: [PATCH 036/448] Add tests for splits, dividends, conditions, exchanges (#139) --- polygon/rest/reference.py | 8 +- tests/mocks.py | 16 ++ tests/test_conditions.py | 250 ++++++++++++++++++++++++++++++++ tests/test_dividends.py | 110 ++++++++++++++ tests/test_exchanges.py | 298 ++++++++++++++++++++++++++++++++++++++ tests/test_splits.py | 32 ++++ 6 files changed, 712 insertions(+), 2 deletions(-) create mode 100644 tests/test_conditions.py create mode 100644 tests/test_dividends.py create mode 100644 tests/test_exchanges.py create mode 100644 tests/test_splits.py diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 4b278d31..e7acaa3d 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -385,7 +385,7 @@ def get_exchanges( locale: Optional[Union[str, Locale]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[Exchange, HTTPResponse]: + ) -> Union[List[Exchange], HTTPResponse]: """ List all exchanges that Polygon.io knows about. @@ -398,5 +398,9 @@ def get_exchanges( url = "/v3/reference/exchanges" return self._get( - path=url, params=params, deserializer=Exchange.from_dict, raw=raw + path=url, + params=params, + deserializer=Exchange.from_dict, + raw=raw, + result_key="results", ) diff --git a/tests/mocks.py b/tests/mocks.py index 62f54c20..f369ab14 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -59,6 +59,22 @@ "/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"}}', ), + ( + "/v3/reference/splits", + '{"results":[{"execution_date":"2022-07-18","split_from":1,"split_to":20,"ticker":"GOOGL"},{"execution_date":"2022-07-18","split_from":1,"split_to":20,"ticker":"GOOG"},{"execution_date":"2022-07-01","split_from":1,"split_to":3,"ticker":"CTO"},{"execution_date":"2022-06-29","split_from":1,"split_to":10,"ticker":"SHOP"},{"execution_date":"2022-06-22","split_from":1,"split_to":10,"ticker":"SHOP"},{"execution_date":"2022-06-10","split_from":1,"split_to":4,"ticker":"DXCM"},{"execution_date":"2022-06-06","split_from":1,"split_to":20,"ticker":"AMZN"},{"execution_date":"2022-05-20","split_from":2,"split_to":1,"ticker":"BRW"},{"execution_date":"2022-05-16","split_from":1,"split_to":2,"ticker":"CM"},{"execution_date":"2022-05-02","split_from":3,"split_to":4,"ticker":"CIG.C"}],"status":"OK","request_id":"b52de486daf5491e6b9ebdf5e0bf65bc"}', + ), + ( + "/v3/reference/dividends", + '{"results":[{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2025-06-12","frequency":4,"pay_date":"2025-06-30","record_date":"2025-06-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2025-03-13","frequency":4,"pay_date":"2025-03-31","record_date":"2025-03-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-12-12","frequency":4,"pay_date":"2024-12-31","record_date":"2024-12-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-09-12","frequency":4,"pay_date":"2024-09-30","record_date":"2024-09-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-06-13","frequency":4,"pay_date":"2024-06-30","record_date":"2024-06-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-03-14","frequency":4,"pay_date":"2024-03-31","record_date":"2024-03-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2023-12-14","frequency":4,"pay_date":"2023-12-31","record_date":"2023-12-15","ticker":"CSSEN"},{"cash_amount":0.5,"declaration_date":"2022-02-10","dividend_type":"CD","ex_dividend_date":"2023-11-13","frequency":4,"pay_date":"2023-11-15","record_date":"2023-11-14","ticker":"AIRTP"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2023-09-14","frequency":4,"pay_date":"2023-09-30","record_date":"2023-09-15","ticker":"CSSEN"},{"cash_amount":0.5,"declaration_date":"2022-02-10","dividend_type":"CD","ex_dividend_date":"2023-08-11","frequency":4,"pay_date":"2023-08-15","record_date":"2023-08-14","ticker":"AIRTP"}],"status":"OK","request_id":"0326f1f88a2867a7184c116f5b1edd00"}', + ), + ( + "/v3/reference/conditions", + '{"results":[{"id":1,"type":"sale_condition","name":"Acquisition","asset_class":"stocks","sip_mapping":{"UTP":"A"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":2,"type":"sale_condition","name":"Average Price Trade","asset_class":"stocks","sip_mapping":{"CTA":"B","UTP":"W"},"update_rules":{"consolidated":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":3,"type":"sale_condition","name":"Automatic Execution","asset_class":"stocks","sip_mapping":{"CTA":"E"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":4,"type":"sale_condition","name":"Bunched Trade","asset_class":"stocks","sip_mapping":{"UTP":"B"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":5,"type":"sale_condition","name":"Bunched Sold Trade","asset_class":"stocks","sip_mapping":{"UTP":"G"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":6,"type":"sale_condition","name":"CAP Election","asset_class":"stocks","sip_mapping":{"CTA":"I"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"],"legacy":true},{"id":7,"type":"sale_condition","name":"Cash Sale","asset_class":"stocks","sip_mapping":{"CTA":"C","UTP":"C"},"update_rules":{"consolidated":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":8,"type":"sale_condition","name":"Closing Prints","asset_class":"stocks","sip_mapping":{"UTP":"6"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":9,"type":"sale_condition","name":"Cross Trade","asset_class":"stocks","sip_mapping":{"CTA":"X","UTP":"X"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":10,"type":"sale_condition","name":"Derivatively Priced","asset_class":"stocks","sip_mapping":{"CTA":"4","UTP":"4"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]}],"status":"OK","request_id":"4c915a9cb249e40d08d031d70567d615","count":10}', + ), + ( + "/v3/reference/exchanges", + ' {"results":[{"id":1,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE American, LLC","acronym":"AMEX","mic":"XASE","operating_mic":"XNYS","participant_id":"A","url":"https://www.nyse.com/markets/nyse-american"},{"id":2,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq OMX BX, Inc.","mic":"XBOS","operating_mic":"XNAS","participant_id":"B","url":"https://www.nasdaq.com/solutions/nasdaq-bx-stock-market"},{"id":3,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE National, Inc.","acronym":"NSX","mic":"XCIS","operating_mic":"XNYS","participant_id":"C","url":"https://www.nyse.com/markets/nyse-national"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA NYSE TRF","mic":"FINY","operating_mic":"XNYS","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Carteret","mic":"FINN","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Chicago","mic":"FINC","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Alternative Display Facility","mic":"XADF","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":5,"type":"SIP","asset_class":"stocks","locale":"us","name":"Unlisted Trading Privileges","operating_mic":"XNAS","participant_id":"E","url":"https://www.utpplan.com"},{"id":6,"type":"TRF","asset_class":"stocks","locale":"us","name":"International Securities Exchange, LLC - Stocks","mic":"XISE","operating_mic":"XNAS","participant_id":"I","url":"https://nasdaq.com/solutions/nasdaq-ise"},{"id":7,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGA","mic":"EDGA","operating_mic":"XCBO","participant_id":"J","url":"https://www.cboe.com/us/equities"},{"id":8,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGX","mic":"EDGX","operating_mic":"XCBO","participant_id":"K","url":"https://www.cboe.com/us/equities"},{"id":9,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Chicago, Inc.","mic":"XCHI","operating_mic":"XNYS","participant_id":"M","url":"https://www.nyse.com/markets/nyse-chicago"},{"id":10,"type":"exchange","asset_class":"stocks","locale":"us","name":"New York Stock Exchange","mic":"XNYS","operating_mic":"XNYS","participant_id":"N","url":"https://www.nyse.com"},{"id":11,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Arca, Inc.","mic":"ARCX","operating_mic":"XNYS","participant_id":"P","url":"https://www.nyse.com/markets/nyse-arca"},{"id":12,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq","mic":"XNAS","operating_mic":"XNAS","participant_id":"T","url":"https://www.nasdaq.com"},{"id":13,"type":"SIP","asset_class":"stocks","locale":"us","name":"Consolidated Tape Association","operating_mic":"XNYS","participant_id":"S","url":"https://www.nyse.com/data/cta"},{"id":14,"type":"exchange","asset_class":"stocks","locale":"us","name":"Long-Term Stock Exchange","mic":"LTSE","operating_mic":"LTSE","participant_id":"L","url":"https://www.ltse.com"},{"id":15,"type":"exchange","asset_class":"stocks","locale":"us","name":"Investors Exchange","mic":"IEXG","operating_mic":"IEXG","participant_id":"V","url":"https://www.iextrading.com"},{"id":16,"type":"TRF","asset_class":"stocks","locale":"us","name":"Cboe Stock Exchange","mic":"CBSX","operating_mic":"XCBO","participant_id":"W","url":"https://www.cboe.com"},{"id":17,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq Philadelphia Exchange LLC","mic":"XPHL","operating_mic":"XNAS","participant_id":"X","url":"https://www.nasdaq.com/solutions/nasdaq-phlx"},{"id":18,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BYX","mic":"BATY","operating_mic":"XCBO","participant_id":"Y","url":"https://www.cboe.com/us/equities"},{"id":19,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BZX","mic":"BATS","operating_mic":"XCBO","participant_id":"Z","url":"https://www.cboe.com/us/equities"},{"id":20,"type":"exchange","asset_class":"stocks","locale":"us","name":"MIAX Pearl","mic":"EPRL","operating_mic":"MIHI","participant_id":"H","url":"https://www.miaxoptions.com/alerts/pearl-equities"},{"id":21,"type":"exchange","asset_class":"stocks","locale":"us","name":"Members Exchange","mic":"MEMX","operating_mic":"MEMX","participant_id":"U","url":"https://www.memx.com"}],"status":"OK","request_id":"c0109b8a70a931efe47cef085c7a7f5e","count":24}', + ), ] diff --git a/tests/test_conditions.py b/tests/test_conditions.py new file mode 100644 index 00000000..0e1b2fb1 --- /dev/null +++ b/tests/test_conditions.py @@ -0,0 +1,250 @@ +from polygon.rest.models import Condition +from mocks import BaseTest + + +class ConditionsTest(BaseTest): + def test_list_conditions(self): + conditions = [c for c in self.c.list_conditions("stocks")] + expected = [ + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=1, + legacy=None, + name="Acquisition", + sip_mapping={"UTP": "A"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=2, + legacy=None, + name="Average Price Trade", + sip_mapping={"CTA": "B", "UTP": "W"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": False, + "updates_open_close": False, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": False, + "updates_open_close": False, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=3, + legacy=None, + name="Automatic Execution", + sip_mapping={"CTA": "E"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=4, + legacy=None, + name="Bunched Trade", + sip_mapping={"UTP": "B"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=5, + legacy=None, + name="Bunched Sold Trade", + sip_mapping={"UTP": "G"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": False, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": False, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=6, + legacy=True, + name="CAP Election", + sip_mapping={"CTA": "I"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=7, + legacy=None, + name="Cash Sale", + sip_mapping={"CTA": "C", "UTP": "C"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": False, + "updates_open_close": False, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": False, + "updates_open_close": False, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=8, + legacy=None, + name="Closing Prints", + sip_mapping={"UTP": "6"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=9, + legacy=None, + name="Cross Trade", + sip_mapping={"CTA": "X", "UTP": "X"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": True, + "updates_volume": True, + }, + }, + ), + Condition( + abbreviation=None, + asset_class="stocks", + data_types=["trade"], + description=None, + exchange=None, + id=10, + legacy=None, + name="Derivatively Priced", + sip_mapping={"CTA": "4", "UTP": "4"}, + type="sale_condition", + update_rules={ + "consolidated": { + "updates_high_low": True, + "updates_open_close": False, + "updates_volume": True, + }, + "market_center": { + "updates_high_low": True, + "updates_open_close": False, + "updates_volume": True, + }, + }, + ), + ] + self.assertEqual(conditions, expected) diff --git a/tests/test_dividends.py b/tests/test_dividends.py new file mode 100644 index 00000000..925f1f2f --- /dev/null +++ b/tests/test_dividends.py @@ -0,0 +1,110 @@ +from polygon.rest.models import Dividend +from mocks import BaseTest + + +class DividendsTest(BaseTest): + def test_list_dividends(self): + dividends = [d for d in self.c.list_dividends()] + expected = [ + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2025-06-12", + frequency=4, + pay_date="2025-06-30", + record_date="2025-06-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2025-03-13", + frequency=4, + pay_date="2025-03-31", + record_date="2025-03-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2024-12-12", + frequency=4, + pay_date="2024-12-31", + record_date="2024-12-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2024-09-12", + frequency=4, + pay_date="2024-09-30", + record_date="2024-09-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2024-06-13", + frequency=4, + pay_date="2024-06-30", + record_date="2024-06-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2024-03-14", + frequency=4, + pay_date="2024-03-31", + record_date="2024-03-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2023-12-14", + frequency=4, + pay_date="2023-12-31", + record_date="2023-12-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.5, + declaration_date="2022-02-10", + dividend_type="CD", + ex_dividend_date="2023-11-13", + frequency=4, + pay_date="2023-11-15", + record_date="2023-11-14", + ticker="AIRTP", + ), + Dividend( + cash_amount=0.59375, + declaration_date="2020-09-09", + dividend_type="CD", + ex_dividend_date="2023-09-14", + frequency=4, + pay_date="2023-09-30", + record_date="2023-09-15", + ticker="CSSEN", + ), + Dividend( + cash_amount=0.5, + declaration_date="2022-02-10", + dividend_type="CD", + ex_dividend_date="2023-08-11", + frequency=4, + pay_date="2023-08-15", + record_date="2023-08-14", + ticker="AIRTP", + ), + ] + self.assertEqual(dividends, expected) diff --git a/tests/test_exchanges.py b/tests/test_exchanges.py new file mode 100644 index 00000000..13157437 --- /dev/null +++ b/tests/test_exchanges.py @@ -0,0 +1,298 @@ +from polygon.rest.models import Exchange +from mocks import BaseTest + + +class ExchangesTest(BaseTest): + def test_get_exchanges(self): + exchanges = self.c.get_exchanges("stocks") + expected = [ + Exchange( + acronym="AMEX", + asset_class="stocks", + id=1, + locale="us", + mic="XASE", + name="NYSE American, LLC", + operating_mic="XNYS", + participant_id="A", + type="exchange", + url="https://www.nyse.com/markets/nyse-american", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=2, + locale="us", + mic="XBOS", + name="Nasdaq OMX BX, Inc.", + operating_mic="XNAS", + participant_id="B", + type="exchange", + url="https://www.nasdaq.com/solutions/nasdaq-bx-stock-market", + ), + Exchange( + acronym="NSX", + asset_class="stocks", + id=3, + locale="us", + mic="XCIS", + name="NYSE National, Inc.", + operating_mic="XNYS", + participant_id="C", + type="exchange", + url="https://www.nyse.com/markets/nyse-national", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=4, + locale="us", + mic="FINY", + name="FINRA NYSE TRF", + operating_mic="XNYS", + participant_id="D", + type="TRF", + url="https://www.finra.org", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=4, + locale="us", + mic="FINN", + name="FINRA Nasdaq TRF Carteret", + operating_mic="FINR", + participant_id="D", + type="TRF", + url="https://www.finra.org", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=4, + locale="us", + mic="FINC", + name="FINRA Nasdaq TRF Chicago", + operating_mic="FINR", + participant_id="D", + type="TRF", + url="https://www.finra.org", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=4, + locale="us", + mic="XADF", + name="FINRA Alternative Display Facility", + operating_mic="FINR", + participant_id="D", + type="TRF", + url="https://www.finra.org", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=5, + locale="us", + mic=None, + name="Unlisted Trading Privileges", + operating_mic="XNAS", + participant_id="E", + type="SIP", + url="https://www.utpplan.com", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=6, + locale="us", + mic="XISE", + name="International Securities Exchange, LLC - Stocks", + operating_mic="XNAS", + participant_id="I", + type="TRF", + url="https://nasdaq.com/solutions/nasdaq-ise", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=7, + locale="us", + mic="EDGA", + name="Cboe EDGA", + operating_mic="XCBO", + participant_id="J", + type="exchange", + url="https://www.cboe.com/us/equities", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=8, + locale="us", + mic="EDGX", + name="Cboe EDGX", + operating_mic="XCBO", + participant_id="K", + type="exchange", + url="https://www.cboe.com/us/equities", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=9, + locale="us", + mic="XCHI", + name="NYSE Chicago, Inc.", + operating_mic="XNYS", + participant_id="M", + type="exchange", + url="https://www.nyse.com/markets/nyse-chicago", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=10, + locale="us", + mic="XNYS", + name="New York Stock Exchange", + operating_mic="XNYS", + participant_id="N", + type="exchange", + url="https://www.nyse.com", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=11, + locale="us", + mic="ARCX", + name="NYSE Arca, Inc.", + operating_mic="XNYS", + participant_id="P", + type="exchange", + url="https://www.nyse.com/markets/nyse-arca", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=12, + locale="us", + mic="XNAS", + name="Nasdaq", + operating_mic="XNAS", + participant_id="T", + type="exchange", + url="https://www.nasdaq.com", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=13, + locale="us", + mic=None, + name="Consolidated Tape Association", + operating_mic="XNYS", + participant_id="S", + type="SIP", + url="https://www.nyse.com/data/cta", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=14, + locale="us", + mic="LTSE", + name="Long-Term Stock Exchange", + operating_mic="LTSE", + participant_id="L", + type="exchange", + url="https://www.ltse.com", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=15, + locale="us", + mic="IEXG", + name="Investors Exchange", + operating_mic="IEXG", + participant_id="V", + type="exchange", + url="https://www.iextrading.com", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=16, + locale="us", + mic="CBSX", + name="Cboe Stock Exchange", + operating_mic="XCBO", + participant_id="W", + type="TRF", + url="https://www.cboe.com", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=17, + locale="us", + mic="XPHL", + name="Nasdaq Philadelphia Exchange LLC", + operating_mic="XNAS", + participant_id="X", + type="exchange", + url="https://www.nasdaq.com/solutions/nasdaq-phlx", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=18, + locale="us", + mic="BATY", + name="Cboe BYX", + operating_mic="XCBO", + participant_id="Y", + type="exchange", + url="https://www.cboe.com/us/equities", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=19, + locale="us", + mic="BATS", + name="Cboe BZX", + operating_mic="XCBO", + participant_id="Z", + type="exchange", + url="https://www.cboe.com/us/equities", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=20, + locale="us", + mic="EPRL", + name="MIAX Pearl", + operating_mic="MIHI", + participant_id="H", + type="exchange", + url="https://www.miaxoptions.com/alerts/pearl-equities", + ), + Exchange( + acronym=None, + asset_class="stocks", + id=21, + locale="us", + mic="MEMX", + name="Members Exchange", + operating_mic="MEMX", + participant_id="U", + type="exchange", + url="https://www.memx.com", + ), + ] + self.assertEqual(exchanges, expected) diff --git a/tests/test_splits.py b/tests/test_splits.py new file mode 100644 index 00000000..83b8f184 --- /dev/null +++ b/tests/test_splits.py @@ -0,0 +1,32 @@ +from polygon.rest.models import Split +from mocks import BaseTest + + +class SplitsTest(BaseTest): + def test_list_splits(self): + splits = [s for s in self.c.list_splits()] + expected = [ + Split( + execution_date="2022-07-18", split_from=1, split_to=20, ticker="GOOGL" + ), + Split( + execution_date="2022-07-18", split_from=1, split_to=20, ticker="GOOG" + ), + Split(execution_date="2022-07-01", split_from=1, split_to=3, ticker="CTO"), + Split( + execution_date="2022-06-29", split_from=1, split_to=10, ticker="SHOP" + ), + Split( + execution_date="2022-06-22", split_from=1, split_to=10, ticker="SHOP" + ), + Split(execution_date="2022-06-10", split_from=1, split_to=4, ticker="DXCM"), + Split( + execution_date="2022-06-06", split_from=1, split_to=20, ticker="AMZN" + ), + Split(execution_date="2022-05-20", split_from=2, split_to=1, ticker="BRW"), + Split(execution_date="2022-05-16", split_from=1, split_to=2, ticker="CM"), + Split( + execution_date="2022-05-02", split_from=3, split_to=4, ticker="CIG.C" + ), + ] + self.assertEqual(splits, expected) From 488f2ca5a0a237d4c2ff34ad045935d20ac8cda2 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Fri, 29 Apr 2022 12:48:24 -0400 Subject: [PATCH 037/448] Fix pagination and tests (#140) --- tests/mocks.py | 18 ++++++++++-------- tests/test_tickers.py | 36 ++++++++++++++++++++++++++++++++++++ tests/test_trades.py | 1 - 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/tests/mocks.py b/tests/mocks.py index f369ab14..5b12cc30 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -8,11 +8,11 @@ '{"ticker":"AAPL","queryCount":2,"resultsCount":2,"adjusted":true,"results":[{"v":6.42646396e+08,"vw":1.469,"o":1.5032,"c":1.4604,"h":1.5064,"l":1.4489,"t":1112331600000,"n":82132},{"v":5.78172308e+08,"vw":1.4589,"o":1.4639,"c":1.4675,"h":1.4754,"l":1.4343,"t":1112587200000,"n":65543}],"status":"OK","request_id":"12afda77aab3b1936c5fb6ef4241ae42","count":2}', ), ( - "/v2/aggs/grouped/locale/us/market/stocks/2005-04-04", + "/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True", '{"queryCount":1,"resultsCount":1,"adjusted": true,"results": [{"T":"GIK","v":895345,"vw":9.9979,"o":9.99,"c":10.02,"h":10.02,"l":9.9,"t":1602705600000,"n":96}],"status":"OK","request_id":"eae3ded2d6d43f978125b7a8a609fad9","count":1}', ), ( - "/v1/open-close/AAPL/2005-04-01", + "/v1/open-close/AAPL/2005-04-01?adjusted=True", '{"status": "OK","from": "2021-04-01","symbol": "AAPL","open": 123.66,"high": 124.18,"low": 122.49,"close": 123,"volume": 75089134,"afterHours": 123,"preMarket": 123.45}', ), ( @@ -32,7 +32,7 @@ '{"ticker":"AAPL","name":"Apple Inc.","market":"stocks","locale":"us","primary_exchange":"XNAS","type":"CS","active":true,"currency_name":"usd","cik":"0000320193","composite_figi":"BBG000B9XRY4","share_class_figi":"BBG001S5N8V8","market_cap":2.6714924917e+12,"phone_number":"(408) 996-1010","address":{"address1":"ONE APPLE PARK WAY","city":"CUPERTINO","state":"CA","postal_code":"95014"},"description":"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.","sic_code":"3571","sic_description":"ELECTRONIC COMPUTERS","ticker_root":"AAPL","homepage_url":"https://www.apple.com","total_employees":154000,"list_date":"1980-12-12","branding":{"logo_url":"https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg","icon_url":"https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png"},"share_class_shares_outstanding":16319440000,"weighted_shares_outstanding":16319441000}', ), ( - "/v2/reference/news", + "/v2/reference/news?ticker=NFLX", '{"results":[{"id":"JeJEhAVoKaqJ2zF9nzQYMg07UlEeWlis6Dsop33TPQY","publisher":{"name":"MarketWatch","homepage_url":"https://www.marketwatch.com/","logo_url":"https://s3.polygon.io/public/assets/news/logos/marketwatch.svg","favicon_url":"https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico"},"title":"Theres a big hole in the Feds theory of inflation—incomes are falling at a record 10.9 rate","author":"MarketWatch","published_utc":"2022-04-28T17:08:00Z","article_url":"https://www.marketwatch.com/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705","tickers":["MSFT","TSN","NFLX","AMZN"],"amp_url":"https://www.marketwatch.com/amp/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705","image_url":"https://images.mktw.net/im-533637/social","description":"If inflation is all due to an overly generous federal government giving its people too much money, then our inflation problem is about to go away."}],"status":"OK","request_id":"f5248459196e12f27520afd41cee5126","count":10}', ), ( @@ -48,7 +48,7 @@ '{"last":{"conditions":[2],"exchange":2,"price":39976.89682331,"size":0.005,"timestamp":1651180409688},"request_id":"d67c9bfe1fa0c29db9177d78b3ab713c","status":"success","symbol":"BTC-USD"}', ), ( - "/v3/trades/AAPL", + "/v3/trades/AAPL?limit=2", '{"results":[{"conditions":[12,37],"correction":1,"exchange":11,"id":"183276","participant_timestamp":1651181822461636600,"price":156.43,"sequence_number":7179341,"sip_timestamp":1651181822461979400,"size":10,"tape":3,"trf_id":3,"trf_timestamp":1651181557090806500},{"conditions":[12,37],"correction":1,"exchange":12,"id":"183276","participant_timestamp":1651181822461636600,"price":157.43,"sequence_number":7179341,"sip_timestamp":1651181822461979400,"size":10,"tape":3,"trf_id":3,"trf_timestamp":1651181557090806500}],"status":"OK","request_id":"756f9910624b35a47eb07f21a7a373bb"}', ), ( @@ -68,12 +68,12 @@ '{"results":[{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2025-06-12","frequency":4,"pay_date":"2025-06-30","record_date":"2025-06-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2025-03-13","frequency":4,"pay_date":"2025-03-31","record_date":"2025-03-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-12-12","frequency":4,"pay_date":"2024-12-31","record_date":"2024-12-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-09-12","frequency":4,"pay_date":"2024-09-30","record_date":"2024-09-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-06-13","frequency":4,"pay_date":"2024-06-30","record_date":"2024-06-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-03-14","frequency":4,"pay_date":"2024-03-31","record_date":"2024-03-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2023-12-14","frequency":4,"pay_date":"2023-12-31","record_date":"2023-12-15","ticker":"CSSEN"},{"cash_amount":0.5,"declaration_date":"2022-02-10","dividend_type":"CD","ex_dividend_date":"2023-11-13","frequency":4,"pay_date":"2023-11-15","record_date":"2023-11-14","ticker":"AIRTP"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2023-09-14","frequency":4,"pay_date":"2023-09-30","record_date":"2023-09-15","ticker":"CSSEN"},{"cash_amount":0.5,"declaration_date":"2022-02-10","dividend_type":"CD","ex_dividend_date":"2023-08-11","frequency":4,"pay_date":"2023-08-15","record_date":"2023-08-14","ticker":"AIRTP"}],"status":"OK","request_id":"0326f1f88a2867a7184c116f5b1edd00"}', ), ( - "/v3/reference/conditions", + "/v3/reference/conditions?asset.class=stocks", '{"results":[{"id":1,"type":"sale_condition","name":"Acquisition","asset_class":"stocks","sip_mapping":{"UTP":"A"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":2,"type":"sale_condition","name":"Average Price Trade","asset_class":"stocks","sip_mapping":{"CTA":"B","UTP":"W"},"update_rules":{"consolidated":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":3,"type":"sale_condition","name":"Automatic Execution","asset_class":"stocks","sip_mapping":{"CTA":"E"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":4,"type":"sale_condition","name":"Bunched Trade","asset_class":"stocks","sip_mapping":{"UTP":"B"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":5,"type":"sale_condition","name":"Bunched Sold Trade","asset_class":"stocks","sip_mapping":{"UTP":"G"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":6,"type":"sale_condition","name":"CAP Election","asset_class":"stocks","sip_mapping":{"CTA":"I"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"],"legacy":true},{"id":7,"type":"sale_condition","name":"Cash Sale","asset_class":"stocks","sip_mapping":{"CTA":"C","UTP":"C"},"update_rules":{"consolidated":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":8,"type":"sale_condition","name":"Closing Prints","asset_class":"stocks","sip_mapping":{"UTP":"6"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":9,"type":"sale_condition","name":"Cross Trade","asset_class":"stocks","sip_mapping":{"CTA":"X","UTP":"X"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":10,"type":"sale_condition","name":"Derivatively Priced","asset_class":"stocks","sip_mapping":{"CTA":"4","UTP":"4"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]}],"status":"OK","request_id":"4c915a9cb249e40d08d031d70567d615","count":10}', ), ( "/v3/reference/exchanges", - ' {"results":[{"id":1,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE American, LLC","acronym":"AMEX","mic":"XASE","operating_mic":"XNYS","participant_id":"A","url":"https://www.nyse.com/markets/nyse-american"},{"id":2,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq OMX BX, Inc.","mic":"XBOS","operating_mic":"XNAS","participant_id":"B","url":"https://www.nasdaq.com/solutions/nasdaq-bx-stock-market"},{"id":3,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE National, Inc.","acronym":"NSX","mic":"XCIS","operating_mic":"XNYS","participant_id":"C","url":"https://www.nyse.com/markets/nyse-national"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA NYSE TRF","mic":"FINY","operating_mic":"XNYS","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Carteret","mic":"FINN","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Chicago","mic":"FINC","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Alternative Display Facility","mic":"XADF","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":5,"type":"SIP","asset_class":"stocks","locale":"us","name":"Unlisted Trading Privileges","operating_mic":"XNAS","participant_id":"E","url":"https://www.utpplan.com"},{"id":6,"type":"TRF","asset_class":"stocks","locale":"us","name":"International Securities Exchange, LLC - Stocks","mic":"XISE","operating_mic":"XNAS","participant_id":"I","url":"https://nasdaq.com/solutions/nasdaq-ise"},{"id":7,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGA","mic":"EDGA","operating_mic":"XCBO","participant_id":"J","url":"https://www.cboe.com/us/equities"},{"id":8,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGX","mic":"EDGX","operating_mic":"XCBO","participant_id":"K","url":"https://www.cboe.com/us/equities"},{"id":9,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Chicago, Inc.","mic":"XCHI","operating_mic":"XNYS","participant_id":"M","url":"https://www.nyse.com/markets/nyse-chicago"},{"id":10,"type":"exchange","asset_class":"stocks","locale":"us","name":"New York Stock Exchange","mic":"XNYS","operating_mic":"XNYS","participant_id":"N","url":"https://www.nyse.com"},{"id":11,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Arca, Inc.","mic":"ARCX","operating_mic":"XNYS","participant_id":"P","url":"https://www.nyse.com/markets/nyse-arca"},{"id":12,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq","mic":"XNAS","operating_mic":"XNAS","participant_id":"T","url":"https://www.nasdaq.com"},{"id":13,"type":"SIP","asset_class":"stocks","locale":"us","name":"Consolidated Tape Association","operating_mic":"XNYS","participant_id":"S","url":"https://www.nyse.com/data/cta"},{"id":14,"type":"exchange","asset_class":"stocks","locale":"us","name":"Long-Term Stock Exchange","mic":"LTSE","operating_mic":"LTSE","participant_id":"L","url":"https://www.ltse.com"},{"id":15,"type":"exchange","asset_class":"stocks","locale":"us","name":"Investors Exchange","mic":"IEXG","operating_mic":"IEXG","participant_id":"V","url":"https://www.iextrading.com"},{"id":16,"type":"TRF","asset_class":"stocks","locale":"us","name":"Cboe Stock Exchange","mic":"CBSX","operating_mic":"XCBO","participant_id":"W","url":"https://www.cboe.com"},{"id":17,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq Philadelphia Exchange LLC","mic":"XPHL","operating_mic":"XNAS","participant_id":"X","url":"https://www.nasdaq.com/solutions/nasdaq-phlx"},{"id":18,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BYX","mic":"BATY","operating_mic":"XCBO","participant_id":"Y","url":"https://www.cboe.com/us/equities"},{"id":19,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BZX","mic":"BATS","operating_mic":"XCBO","participant_id":"Z","url":"https://www.cboe.com/us/equities"},{"id":20,"type":"exchange","asset_class":"stocks","locale":"us","name":"MIAX Pearl","mic":"EPRL","operating_mic":"MIHI","participant_id":"H","url":"https://www.miaxoptions.com/alerts/pearl-equities"},{"id":21,"type":"exchange","asset_class":"stocks","locale":"us","name":"Members Exchange","mic":"MEMX","operating_mic":"MEMX","participant_id":"U","url":"https://www.memx.com"}],"status":"OK","request_id":"c0109b8a70a931efe47cef085c7a7f5e","count":24}', + '{"results":[{"id":1,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE American, LLC","acronym":"AMEX","mic":"XASE","operating_mic":"XNYS","participant_id":"A","url":"https://www.nyse.com/markets/nyse-american"},{"id":2,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq OMX BX, Inc.","mic":"XBOS","operating_mic":"XNAS","participant_id":"B","url":"https://www.nasdaq.com/solutions/nasdaq-bx-stock-market"},{"id":3,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE National, Inc.","acronym":"NSX","mic":"XCIS","operating_mic":"XNYS","participant_id":"C","url":"https://www.nyse.com/markets/nyse-national"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA NYSE TRF","mic":"FINY","operating_mic":"XNYS","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Carteret","mic":"FINN","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Chicago","mic":"FINC","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Alternative Display Facility","mic":"XADF","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":5,"type":"SIP","asset_class":"stocks","locale":"us","name":"Unlisted Trading Privileges","operating_mic":"XNAS","participant_id":"E","url":"https://www.utpplan.com"},{"id":6,"type":"TRF","asset_class":"stocks","locale":"us","name":"International Securities Exchange, LLC - Stocks","mic":"XISE","operating_mic":"XNAS","participant_id":"I","url":"https://nasdaq.com/solutions/nasdaq-ise"},{"id":7,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGA","mic":"EDGA","operating_mic":"XCBO","participant_id":"J","url":"https://www.cboe.com/us/equities"},{"id":8,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGX","mic":"EDGX","operating_mic":"XCBO","participant_id":"K","url":"https://www.cboe.com/us/equities"},{"id":9,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Chicago, Inc.","mic":"XCHI","operating_mic":"XNYS","participant_id":"M","url":"https://www.nyse.com/markets/nyse-chicago"},{"id":10,"type":"exchange","asset_class":"stocks","locale":"us","name":"New York Stock Exchange","mic":"XNYS","operating_mic":"XNYS","participant_id":"N","url":"https://www.nyse.com"},{"id":11,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Arca, Inc.","mic":"ARCX","operating_mic":"XNYS","participant_id":"P","url":"https://www.nyse.com/markets/nyse-arca"},{"id":12,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq","mic":"XNAS","operating_mic":"XNAS","participant_id":"T","url":"https://www.nasdaq.com"},{"id":13,"type":"SIP","asset_class":"stocks","locale":"us","name":"Consolidated Tape Association","operating_mic":"XNYS","participant_id":"S","url":"https://www.nyse.com/data/cta"},{"id":14,"type":"exchange","asset_class":"stocks","locale":"us","name":"Long-Term Stock Exchange","mic":"LTSE","operating_mic":"LTSE","participant_id":"L","url":"https://www.ltse.com"},{"id":15,"type":"exchange","asset_class":"stocks","locale":"us","name":"Investors Exchange","mic":"IEXG","operating_mic":"IEXG","participant_id":"V","url":"https://www.iextrading.com"},{"id":16,"type":"TRF","asset_class":"stocks","locale":"us","name":"Cboe Stock Exchange","mic":"CBSX","operating_mic":"XCBO","participant_id":"W","url":"https://www.cboe.com"},{"id":17,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq Philadelphia Exchange LLC","mic":"XPHL","operating_mic":"XNAS","participant_id":"X","url":"https://www.nasdaq.com/solutions/nasdaq-phlx"},{"id":18,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BYX","mic":"BATY","operating_mic":"XCBO","participant_id":"Y","url":"https://www.cboe.com/us/equities"},{"id":19,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BZX","mic":"BATS","operating_mic":"XCBO","participant_id":"Z","url":"https://www.cboe.com/us/equities"},{"id":20,"type":"exchange","asset_class":"stocks","locale":"us","name":"MIAX Pearl","mic":"EPRL","operating_mic":"MIHI","participant_id":"H","url":"https://www.miaxoptions.com/alerts/pearl-equities"},{"id":21,"type":"exchange","asset_class":"stocks","locale":"us","name":"Members Exchange","mic":"MEMX","operating_mic":"MEMX","participant_id":"U","url":"https://www.memx.com"}],"status":"OK","request_id":"c0109b8a70a931efe47cef085c7a7f5e","count":24}', ), ] @@ -82,7 +82,9 @@ class BaseTest(unittest.TestCase): @classmethod def setUpClass(cls): cls.maxDiff = None - cls.c = RESTClient("") + cls.c = RESTClient("", verbose=True) httpretty.enable(verbose=True, allow_net_connect=False) for m in mocks: - httpretty.register_uri(httpretty.GET, cls.c.BASE + m[0], m[1]) + httpretty.register_uri( + httpretty.GET, cls.c.BASE + m[0], m[1], match_querystring=True + ) diff --git a/tests/test_tickers.py b/tests/test_tickers.py index bcdf5be6..58d60adc 100644 --- a/tests/test_tickers.py +++ b/tests/test_tickers.py @@ -11,6 +11,42 @@ class TickersTest(BaseTest): def test_list_tickers(self): tickers = [t for t in self.c.list_tickers()] expected = [ + Ticker( + active=True, + cik="0001090872", + composite_figi="BBG000C2V3D6", + currency_name="usd", + currency_symbol=None, + base_currency_symbol=None, + base_currency_name=None, + delisted_utc=None, + last_updated_utc="2022-04-27T00:00:00Z", + locale="us", + market="stocks", + name="Agilent Technologies Inc.", + primary_exchange="XNYS", + share_class_figi="BBG001SCTQY4", + ticker="A", + type="CS", + ), + Ticker( + active=True, + cik="0001675149", + composite_figi="BBG00B3T3HD3", + currency_name="usd", + currency_symbol=None, + base_currency_symbol=None, + base_currency_name=None, + delisted_utc=None, + last_updated_utc="2022-04-27T00:00:00Z", + locale="us", + market="stocks", + name="Alcoa Corporation", + primary_exchange="XNYS", + share_class_figi="BBG00B3T3HF1", + ticker="AA", + type="CS", + ), Ticker( active=True, cik=None, diff --git a/tests/test_trades.py b/tests/test_trades.py index a1717a0e..3c7e9bbb 100644 --- a/tests/test_trades.py +++ b/tests/test_trades.py @@ -49,7 +49,6 @@ def test_get_last_trade_crypto(self): def test_trades(self): trades = [t for t in self.c.list_trades(ticker="AAPL", limit=2)] - print(trades) expected = [ Trade( conditions=[12, 37], From 7ca81872fcca4c6486fcd1c9666f356bb2e7c2ad Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Fri, 29 Apr 2022 12:55:50 -0400 Subject: [PATCH 038/448] add snapshot (#141) * add snapshot * style --- polygon/rest/aggs.py | 2 +- polygon/rest/models/__init__.py | 3 +- polygon/rest/models/aggs.py | 10 +- polygon/rest/models/shared.py | 11 ++ polygon/rest/models/snapshot.py | 177 ++++++++++++++++++++++++++++++++ polygon/rest/snapshot.py | 136 ++++++++++++++++++++++++ 6 files changed, 332 insertions(+), 7 deletions(-) create mode 100644 polygon/rest/models/snapshot.py create mode 100644 polygon/rest/snapshot.py diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 1822471e..da77d97e 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -4,7 +4,7 @@ from urllib3 import HTTPResponse from datetime import datetime, date -# https://polygon.io/docs/stocks + class AggsClient(BaseClient): def get_aggs( self, diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 85139477..29c99ecd 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -1,3 +1,4 @@ +from .shared import * from .aggs import * from .trades import * from .quotes import * @@ -7,4 +8,4 @@ from .dividends import * from .conditions import * from .exchanges import * -from .shared import * +from .snapshot import * diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index 5b947523..892ab197 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -4,11 +4,11 @@ @dataclass class Agg: - open: float - high: float - low: float - close: float - volume: float + open: Optional[float] + high: Optional[float] + low: Optional[float] + close: Optional[float] + volume: Optional[float] vwap: Optional[float] timestamp: Optional[int] transactions: Optional[int] diff --git a/polygon/rest/models/shared.py b/polygon/rest/models/shared.py index 3b7b3d4a..c3f0d851 100644 --- a/polygon/rest/models/shared.py +++ b/polygon/rest/models/shared.py @@ -60,3 +60,14 @@ class ExchangeType(Enum): EXCHANGE = "exchange" TRF = "TRF" SIP = "SIP" + + +class Direction(Enum): + GAINERS = "gainers" + LOSERS = "losers" + + +class SnapshotMarketType(Enum): + STOCKS = "stocks" + FOREX = "forex" + CRYPTO = "crypto" diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py new file mode 100644 index 00000000..4681d8f9 --- /dev/null +++ b/polygon/rest/models/snapshot.py @@ -0,0 +1,177 @@ +from dataclasses import dataclass +from typing import Optional, List, Dict +from .aggs import Agg +from .quotes import LastQuote +from .trades import LastTrade + + +@dataclass +class SnapshotMin: + "Most recent minute bar" + accumulated_volume: Optional[float] + open: Optional[float] + high: Optional[float] + low: Optional[float] + close: Optional[float] + volume: Optional[float] + vwap: Optional[float] + + @staticmethod + def from_dict(d): + return SnapshotMin( + d.get("ac", None), + d.get("o", None), + d.get("h", None), + d.get("l", None), + d.get("c", None), + d.get("v", None), + d.get("vw", None), + ) + + +@dataclass +class Snapshot: + day: Optional[Agg] + last_quote: Optional[LastQuote] + last_trade: Optional[LastTrade] + min: Optional[SnapshotMin] + prev_day: Optional[Agg] + ticker: str + todays_change: float + todays_change_percent: float + updated: int + + @staticmethod + def from_dict(d): + return Snapshot( + d.get("day", None), + d.get("lastQuote", None), + d.get("lastTrade", None), + d.get("min", None), + d.get("prevDay", None), + d.get("ticker", None), + d.get("todaysChange", None), + d.get("todaysChangePercent", None), + d.get("updated", None), + ) + + +@dataclass +class DayOptionContractSnapshot: + change: Optional[float] + change_percent: Optional[float] + close: Optional[float] + high: Optional[float] + last_updated: Optional[int] + low: Optional[float] + open: Optional[float] + previous_close: Optional[float] + volume: Optional[float] + vwap: Optional[float] + + @staticmethod + def from_dict(d): + return DayOptionContractSnapshot(**d) + + +@dataclass +class OptionDetails: + contract_type: str + exercise_style: str + expiration_date: str + shares_per_contract: float + strike_price: float + ticker: str + + @staticmethod + def from_dict(d): + return OptionDetails(**d) + + +@dataclass +class OptionLastQuote: + ask: Optional[float] + ask_size: Optional[float] + bid: Optional[float] + bid_size: Optional[float] + last_updated: Optional[int] + midpoint: Optional[float] + timeframe: Optional[str] + + @staticmethod + def from_dict(d): + return OptionLastQuote(**d) + + +@dataclass +class OptionGreeks: + delta: Optional[float] + gamma: Optional[float] + theta: Optional[float] + vega: Optional[float] + + @staticmethod + def from_dict(d): + return OptionGreeks(**d) + + +@dataclass +class UnderlyingAsset: + change_to_break_even: Optional[float] + last_updated: Optional[int] + price: Optional[float] + ticker: Optional[str] + timeframe: Optional[str] + + @staticmethod + def from_dict(d): + return UnderlyingAsset(**d) + + +@dataclass +class OptionContractSnapshot: + break_even_price: Optional[float] + day: Optional[Agg] + details: Optional[OptionDetails] + greeks: Optional[OptionGreeks] + implied_volatility: Optional[float] + last_quote: Optional[OptionLastQuote] + open_interest: Optional[float] + underlying_asset: Optional[float] + + @staticmethod + def from_dict(d): + return OptionContractSnapshot(**d) + + +@dataclass +class OrderBookQuote: + price: Optional[float] + exchange_shares: Dict[str, float] + + @staticmethod + def from_dict(d): + return OrderBookQuote(**d) + + +@dataclass +class SnapshotTickerFullBook: + ticker: Optional[str] + bids: Optional[List[OrderBookQuote]] + asks: Optional[List[OrderBookQuote]] + bid_count: Optional[float] + ask_count: Optional[float] + spread: Optional[float] + updated: int + + @staticmethod + def from_dict(d): + return SnapshotTickerFullBook( + d.get("ticker", None), + d.get("bids", None), + d.get("asks", None), + d.get("bidCount", None), + d.get("askCount", None), + d.get("spread", None), + d.get("updated", None), + ) diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py new file mode 100644 index 00000000..7c8b06df --- /dev/null +++ b/polygon/rest/snapshot.py @@ -0,0 +1,136 @@ +from .base import BaseClient +from typing import Optional, Any, Dict, List, Union +from .models import ( + Snapshot, + Direction, + OptionContractSnapshot, + SnapshotMarketType, + SnapshotTickerFullBook, +) +from urllib3 import HTTPResponse + + +class SnapshotClient(BaseClient): + def get_snapshot_all( + self, + market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", + tickers: Optional[Union[str, List[str]]] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[List[Snapshot], HTTPResponse]: + """ + Get the most up-to-date market data for all traded stock symbols. + + Note: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST. + + :param market_type: Which market to get a snapshot of. + :param tickers: A comma separated list of tickers to get snapshots for. + :return: List of Snapshots + """ + url = f"/v2/snapshot/locale/us/markets/{market_type}/tickers" + if type(tickers) is list: + tickers = ",".join(tickers) + return self._get( + path=url, + params=self._get_params(self.get_snapshot_all, locals()), + deserializer=Snapshot.from_dict, + raw=raw, + ) + + def get_snapshot_direction( + self, + direction: Union[str, Direction], + market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[List[Snapshot], HTTPResponse]: + """ + Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets. + + Top gainers are those tickers whose price has increased by the highest percentage since the previous day's close. Top losers are those tickers whose price has decreased by the highest percentage since the previous day's close. + + Note: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. + + :param market_type: Which market to get a snapshot of. + :param direction: The direction ("gainers" or "losers") + :return: List of Snapshots + """ + url = f"/v2/snapshot/locale/us/markets/{market_type}/{direction}" + return self._get( + path=url, + params=self._get_params(self.get_snapshot_direction, locals()), + result_key="tickers", + deserializer=Snapshot.from_dict, + raw=raw, + ) + + def get_snapshot_ticker( + self, + ticker: str, + market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[Snapshot, HTTPResponse]: + """ + Get the most up-to-date market data for all traded stock symbols. + + Note: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST. + + :param market_type: Which market to get a snapshot of. + :param ticker: The ticker symbol. + :return: List of Snapshots + """ + url = f"/v2/snapshot/locale/us/markets/{market_type}/tickers/{ticker}" + return self._get( + path=url, + params=self._get_params(self.get_snapshot_ticker, locals()), + result_key="ticker", + deserializer=Snapshot.from_dict, + raw=raw, + ) + + def get_snapshot_option( + self, + underlying_asset: str, + option_contract: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[OptionContractSnapshot, HTTPResponse]: + """ + Get the snapshot of an option contract for a stock equity. + + :param underlying_asset: The underlying ticker symbol of the option contract. + :param option_contract: The option contract identifier. + :return: List of Snapshots + """ + url = f"/v2/snapshot/options/{underlying_asset}/{option_contract}" + return self._get( + path=url, + params=self._get_params(self.get_snapshot_option, locals()), + result_key="results", + deserializer=OptionContractSnapshot.from_dict, + raw=raw, + ) + + def get_snapshot_crypto_book( + self, + ticker: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[SnapshotTickerFullBook, HTTPResponse]: + """ + Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges. + + Note: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. + + :param ticker: The ticker symbol. + :return: List of Snapshots + """ + url = f" /v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" + return self._get( + path=url, + params=self._get_params(self.get_snapshot_crypto_book, locals()), + result_key="data", + deserializer=SnapshotTickerFullBook.from_dict, + raw=raw, + ) From 48b421eba84dbb5c8420ea96876f599673e36a2c Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Fri, 29 Apr 2022 15:11:31 -0400 Subject: [PATCH 039/448] Snapshot tests (#143) --- polygon/rest/__init__.py | 2 + polygon/rest/models/snapshot.py | 130 +++++++-------- polygon/rest/snapshot.py | 5 +- tests/mocks.py | 20 +++ tests/test_snapshots.py | 277 ++++++++++++++++++++++++++++++++ 5 files changed, 367 insertions(+), 67 deletions(-) create mode 100644 tests/test_snapshots.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 31f100f1..4be8a032 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -1,6 +1,7 @@ from .aggs import AggsClient from .trades import TradesClient from .quotes import QuotesClient +from .snapshot import SnapshotClient from .reference import ( MarketsClient, TickersClient, @@ -15,6 +16,7 @@ class RESTClient( AggsClient, TradesClient, QuotesClient, + SnapshotClient, MarketsClient, TickersClient, SplitsClient, diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 4681d8f9..4a814d28 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -8,13 +8,13 @@ @dataclass class SnapshotMin: "Most recent minute bar" - accumulated_volume: Optional[float] - open: Optional[float] - high: Optional[float] - low: Optional[float] - close: Optional[float] - volume: Optional[float] - vwap: Optional[float] + accumulated_volume: Optional[float] = None + open: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + close: Optional[float] = None + volume: Optional[float] = None + vwap: Optional[float] = None @staticmethod def from_dict(d): @@ -31,15 +31,15 @@ def from_dict(d): @dataclass class Snapshot: - day: Optional[Agg] - last_quote: Optional[LastQuote] - last_trade: Optional[LastTrade] - min: Optional[SnapshotMin] - prev_day: Optional[Agg] - ticker: str - todays_change: float - todays_change_percent: float - updated: int + day: Optional[Agg] = None + last_quote: Optional[LastQuote] = None + last_trade: Optional[LastTrade] = None + min: Optional[SnapshotMin] = None + prev_day: Optional[Agg] = None + ticker: Optional[str] = None + todays_change: Optional[float] = None + todays_change_percent: Optional[float] = None + updated: Optional[int] = None @staticmethod def from_dict(d): @@ -58,16 +58,16 @@ def from_dict(d): @dataclass class DayOptionContractSnapshot: - change: Optional[float] - change_percent: Optional[float] - close: Optional[float] - high: Optional[float] - last_updated: Optional[int] - low: Optional[float] - open: Optional[float] - previous_close: Optional[float] - volume: Optional[float] - vwap: Optional[float] + change: Optional[float] = None + change_percent: Optional[float] = None + close: Optional[float] = None + high: Optional[float] = None + last_updated: Optional[int] = None + low: Optional[float] = None + open: Optional[float] = None + previous_close: Optional[float] = None + volume: Optional[float] = None + vwap: Optional[float] = None @staticmethod def from_dict(d): @@ -76,12 +76,12 @@ def from_dict(d): @dataclass class OptionDetails: - contract_type: str - exercise_style: str - expiration_date: str - shares_per_contract: float - strike_price: float - ticker: str + contract_type: Optional[str] = None + exercise_style: Optional[str] = None + expiration_date: Optional[str] = None + shares_per_contract: Optional[float] = None + strike_price: Optional[float] = None + ticker: Optional[str] = None @staticmethod def from_dict(d): @@ -90,13 +90,13 @@ def from_dict(d): @dataclass class OptionLastQuote: - ask: Optional[float] - ask_size: Optional[float] - bid: Optional[float] - bid_size: Optional[float] - last_updated: Optional[int] - midpoint: Optional[float] - timeframe: Optional[str] + ask: Optional[float] = None + ask_size: Optional[float] = None + bid: Optional[float] = None + bid_size: Optional[float] = None + last_updated: Optional[int] = None + midpoint: Optional[float] = None + timeframe: Optional[str] = None @staticmethod def from_dict(d): @@ -105,10 +105,10 @@ def from_dict(d): @dataclass class OptionGreeks: - delta: Optional[float] - gamma: Optional[float] - theta: Optional[float] - vega: Optional[float] + delta: Optional[float] = None + gamma: Optional[float] = None + theta: Optional[float] = None + vega: Optional[float] = None @staticmethod def from_dict(d): @@ -117,11 +117,11 @@ def from_dict(d): @dataclass class UnderlyingAsset: - change_to_break_even: Optional[float] - last_updated: Optional[int] - price: Optional[float] - ticker: Optional[str] - timeframe: Optional[str] + change_to_break_even: Optional[float] = None + last_updated: Optional[int] = None + price: Optional[float] = None + ticker: Optional[str] = None + timeframe: Optional[str] = None @staticmethod def from_dict(d): @@ -130,14 +130,14 @@ def from_dict(d): @dataclass class OptionContractSnapshot: - break_even_price: Optional[float] - day: Optional[Agg] - details: Optional[OptionDetails] - greeks: Optional[OptionGreeks] - implied_volatility: Optional[float] - last_quote: Optional[OptionLastQuote] - open_interest: Optional[float] - underlying_asset: Optional[float] + break_even_price: Optional[float] = None + day: Optional[Agg] = None + details: Optional[OptionDetails] = None + greeks: Optional[OptionGreeks] = None + implied_volatility: Optional[float] = None + last_quote: Optional[OptionLastQuote] = None + open_interest: Optional[float] = None + underlying_asset: Optional[float] = None @staticmethod def from_dict(d): @@ -146,8 +146,8 @@ def from_dict(d): @dataclass class OrderBookQuote: - price: Optional[float] - exchange_shares: Dict[str, float] + price: Optional[float] = None + exchange_shares: Optional[Dict[str, float]] = None @staticmethod def from_dict(d): @@ -156,13 +156,13 @@ def from_dict(d): @dataclass class SnapshotTickerFullBook: - ticker: Optional[str] - bids: Optional[List[OrderBookQuote]] - asks: Optional[List[OrderBookQuote]] - bid_count: Optional[float] - ask_count: Optional[float] - spread: Optional[float] - updated: int + ticker: Optional[str] = None + bids: Optional[List[OrderBookQuote]] = None + asks: Optional[List[OrderBookQuote]] = None + bid_count: Optional[float] = None + ask_count: Optional[float] = None + spread: Optional[float] = None + updated: Optional[int] = None @staticmethod def from_dict(d): diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 7c8b06df..2aa5eefa 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -35,6 +35,7 @@ def get_snapshot_all( params=self._get_params(self.get_snapshot_all, locals()), deserializer=Snapshot.from_dict, raw=raw, + result_key="tickers", ) def get_snapshot_direction( @@ -103,7 +104,7 @@ def get_snapshot_option( :param option_contract: The option contract identifier. :return: List of Snapshots """ - url = f"/v2/snapshot/options/{underlying_asset}/{option_contract}" + url = f"/v3/snapshot/options/{underlying_asset}/{option_contract}" return self._get( path=url, params=self._get_params(self.get_snapshot_option, locals()), @@ -126,7 +127,7 @@ def get_snapshot_crypto_book( :param ticker: The ticker symbol. :return: List of Snapshots """ - url = f" /v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" + url = f"/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" return self._get( path=url, params=self._get_params(self.get_snapshot_crypto_book, locals()), diff --git a/tests/mocks.py b/tests/mocks.py index 5b12cc30..6a6491ae 100644 --- a/tests/mocks.py +++ b/tests/mocks.py @@ -75,6 +75,26 @@ "/v3/reference/exchanges", '{"results":[{"id":1,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE American, LLC","acronym":"AMEX","mic":"XASE","operating_mic":"XNYS","participant_id":"A","url":"https://www.nyse.com/markets/nyse-american"},{"id":2,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq OMX BX, Inc.","mic":"XBOS","operating_mic":"XNAS","participant_id":"B","url":"https://www.nasdaq.com/solutions/nasdaq-bx-stock-market"},{"id":3,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE National, Inc.","acronym":"NSX","mic":"XCIS","operating_mic":"XNYS","participant_id":"C","url":"https://www.nyse.com/markets/nyse-national"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA NYSE TRF","mic":"FINY","operating_mic":"XNYS","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Carteret","mic":"FINN","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Chicago","mic":"FINC","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Alternative Display Facility","mic":"XADF","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":5,"type":"SIP","asset_class":"stocks","locale":"us","name":"Unlisted Trading Privileges","operating_mic":"XNAS","participant_id":"E","url":"https://www.utpplan.com"},{"id":6,"type":"TRF","asset_class":"stocks","locale":"us","name":"International Securities Exchange, LLC - Stocks","mic":"XISE","operating_mic":"XNAS","participant_id":"I","url":"https://nasdaq.com/solutions/nasdaq-ise"},{"id":7,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGA","mic":"EDGA","operating_mic":"XCBO","participant_id":"J","url":"https://www.cboe.com/us/equities"},{"id":8,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGX","mic":"EDGX","operating_mic":"XCBO","participant_id":"K","url":"https://www.cboe.com/us/equities"},{"id":9,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Chicago, Inc.","mic":"XCHI","operating_mic":"XNYS","participant_id":"M","url":"https://www.nyse.com/markets/nyse-chicago"},{"id":10,"type":"exchange","asset_class":"stocks","locale":"us","name":"New York Stock Exchange","mic":"XNYS","operating_mic":"XNYS","participant_id":"N","url":"https://www.nyse.com"},{"id":11,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Arca, Inc.","mic":"ARCX","operating_mic":"XNYS","participant_id":"P","url":"https://www.nyse.com/markets/nyse-arca"},{"id":12,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq","mic":"XNAS","operating_mic":"XNAS","participant_id":"T","url":"https://www.nasdaq.com"},{"id":13,"type":"SIP","asset_class":"stocks","locale":"us","name":"Consolidated Tape Association","operating_mic":"XNYS","participant_id":"S","url":"https://www.nyse.com/data/cta"},{"id":14,"type":"exchange","asset_class":"stocks","locale":"us","name":"Long-Term Stock Exchange","mic":"LTSE","operating_mic":"LTSE","participant_id":"L","url":"https://www.ltse.com"},{"id":15,"type":"exchange","asset_class":"stocks","locale":"us","name":"Investors Exchange","mic":"IEXG","operating_mic":"IEXG","participant_id":"V","url":"https://www.iextrading.com"},{"id":16,"type":"TRF","asset_class":"stocks","locale":"us","name":"Cboe Stock Exchange","mic":"CBSX","operating_mic":"XCBO","participant_id":"W","url":"https://www.cboe.com"},{"id":17,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq Philadelphia Exchange LLC","mic":"XPHL","operating_mic":"XNAS","participant_id":"X","url":"https://www.nasdaq.com/solutions/nasdaq-phlx"},{"id":18,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BYX","mic":"BATY","operating_mic":"XCBO","participant_id":"Y","url":"https://www.cboe.com/us/equities"},{"id":19,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BZX","mic":"BATS","operating_mic":"XCBO","participant_id":"Z","url":"https://www.cboe.com/us/equities"},{"id":20,"type":"exchange","asset_class":"stocks","locale":"us","name":"MIAX Pearl","mic":"EPRL","operating_mic":"MIHI","participant_id":"H","url":"https://www.miaxoptions.com/alerts/pearl-equities"},{"id":21,"type":"exchange","asset_class":"stocks","locale":"us","name":"Members Exchange","mic":"MEMX","operating_mic":"MEMX","participant_id":"U","url":"https://www.memx.com"}],"status":"OK","request_id":"c0109b8a70a931efe47cef085c7a7f5e","count":24}', ), + ( + "/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks", + '{"count": 1,"status": "OK","tickers": [{"day": {"c": 20.506,"h": 20.64,"l": 20.506,"o": 20.64,"v": 37216,"vw": 20.616},"lastQuote": {"P": 20.6,"S": 22,"p": 20.5,"s": 13,"t": 1605192959994246100},"lastTrade": {"c": [14,41],"i": "71675577320245","p": 20.506,"s": 2416,"t": 1605192894630916600,"x": 4},"min": {"av": 37216,"c": 20.506,"h": 20.506,"l": 20.506,"o": 20.506,"v": 5000,"vw": 20.5105},"prevDay": {"c": 20.63,"h": 21,"l": 20.5,"o": 20.79,"v": 292738,"vw": 20.6939},"ticker": "BCAT","todaysChange": -0.124,"todaysChangePerc": -0.601,"updated": 1605192894630916600}]}', + ), + ( + "/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks", + '{"status":"OK","tickers":[{"day":{"c":6.42,"h":6.99,"l":6.4,"o":6.81,"v":115782,"vw":6.656},"lastQuote":{"P":6.43,"S":1,"p":6.4,"s":1,"t":1651251738312628478},"lastTrade":{"c":[14,41],"i":"100","p":6.42,"s":200,"t":1651251334045891221,"x":8},"min":{"av":115689,"c":6.42,"h":6.542,"l":6.42,"o":6.49,"v":2671,"vw":6.4604},"prevDay":{"c":0.29,"h":0.348,"l":0.29,"o":0.3443,"v":1488660,"vw":0.317},"ticker":"NVCN","todaysChange":6.13,"todaysChangePerc":2113.793,"updated":1651251360000000000},{"day":{"c":4.2107,"h":4.95,"l":4.21,"o":4.31,"v":453199,"vw":4.4181},"lastQuote":{"P":4.22,"S":9,"p":4.21,"s":11,"t":1651251781709136903},"lastTrade":{"c":null,"i":"1084","p":4.2116,"s":241,"t":1651251789345841015,"x":4},"min":{"av":453189,"c":4.2107,"h":4.2107,"l":4.2107,"o":4.2107,"v":1012,"vw":4.2107},"prevDay":{"c":0.1953,"h":0.2966,"l":0.195,"o":0.29,"v":8784033,"vw":0.2278},"ticker":"BIOL","todaysChange":4.016,"todaysChangePerc":2056.477,"updated":1651251789345841015}]}', + ), + ( + "/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks", + '{"request_id":"957db942cab2d6b0633b9b4820db0cb2","status":"OK","ticker":{"day":{"c":160.315,"h":166.2,"l":159.8,"o":161.84,"v":68840127,"vw":162.7124},"lastQuote":{"P":159.99,"S":5,"p":159.98,"s":3,"t":1651251948407646487},"lastTrade":{"c":null,"i":"121351","p":159.99,"s":200,"t":1651251948294080343,"x":12},"min":{"av":68834255,"c":160.3,"h":160.71,"l":160.3,"o":160.71,"v":197226,"vw":160.5259},"prevDay":{"c":163.64,"h":164.515,"l":158.93,"o":159.25,"v":130149192,"vw":161.8622},"ticker":"AAPL","todaysChange":-3.65,"todaysChangePerc":-2.231,"updated":1651251948294080343}}', + ), + ( + "/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book", + '{"data": {"askCount": 593.1412981600005,"asks": [{"p": 11454,"x": {"2": 1}},{"p": 11455,"x": {"2": 1}}],"bidCount": 694.951789670001,"bids": [{"p": 16303.17,"x": {"1": 2}},{"p": 16302.94,"x": {"1": 0.02859424,"6": 0.023455}}],"spread": -4849.17,"ticker": "X:BTCUSD","updated": 1605295074162},"status": "OK"}', + ), + ( + "/v3/snapshot/options/AAPL/O:AAPL230616C00150000", + '{"request_id":"104d9b901d0c9e81d284cb8b41c5cdd3","results":{"break_even_price":179.075,"day":{"change":-2.3999999999999986,"change_percent":-7.643312101910824,"close":29,"high":32.25,"last_updated":1651204800000000000,"low":29,"open":29.99,"previous_close":31.4,"volume":8,"vwap":30.7738},"details":{"contract_type":"call","exercise_style":"american","expiration_date":"2023-06-16","shares_per_contract":100,"strike_price":150,"ticker":"O:AAPL230616C00150000"},"greeks":{"delta":0.6436614934293701,"gamma":0.0061735291012820675,"theta":-0.028227189324641973,"vega":0.6381159723175714},"implied_volatility":0.3570277203465058,"last_quote":{"ask":29.25,"ask_size":209,"bid":28.9,"bid_size":294,"last_updated":1651254260800059648,"midpoint":29.075,"timeframe":"REAL-TIME"},"open_interest":8133,"underlying_asset":{"change_to_break_even":19.11439999999999,"last_updated":1651254263172073152,"price":159.9606,"ticker":"AAPL","timeframe":"REAL-TIME"}},"status":"OK"}', + ), ] diff --git a/tests/test_snapshots.py b/tests/test_snapshots.py new file mode 100644 index 00000000..5de72195 --- /dev/null +++ b/tests/test_snapshots.py @@ -0,0 +1,277 @@ +from polygon.rest.models import Snapshot, OptionContractSnapshot, SnapshotTickerFullBook +from mocks import BaseTest + + +class SnapshotsTest(BaseTest): + def test_get_snapshot_all(self): + snapshots = self.c.get_snapshot_all() + expected = [ + Snapshot( + day={ + "c": 20.506, + "h": 20.64, + "l": 20.506, + "o": 20.64, + "v": 37216, + "vw": 20.616, + }, + last_quote={ + "P": 20.6, + "S": 22, + "p": 20.5, + "s": 13, + "t": 1605192959994246100, + }, + last_trade={ + "c": [14, 41], + "i": "71675577320245", + "p": 20.506, + "s": 2416, + "t": 1605192894630916600, + "x": 4, + }, + min={ + "av": 37216, + "c": 20.506, + "h": 20.506, + "l": 20.506, + "o": 20.506, + "v": 5000, + "vw": 20.5105, + }, + prev_day={ + "c": 20.63, + "h": 21, + "l": 20.5, + "o": 20.79, + "v": 292738, + "vw": 20.6939, + }, + ticker="BCAT", + todays_change=-0.124, + todays_change_percent=None, + updated=1605192894630916600, + ) + ] + self.assertEqual(snapshots, expected) + + def test_get_snapshot_direction(self): + snapshots = self.c.get_snapshot_direction("gainers") + expected = [ + Snapshot( + day={ + "c": 6.42, + "h": 6.99, + "l": 6.4, + "o": 6.81, + "v": 115782, + "vw": 6.656, + }, + last_quote={ + "P": 6.43, + "S": 1, + "p": 6.4, + "s": 1, + "t": 1651251738312628478, + }, + last_trade={ + "c": [14, 41], + "i": "100", + "p": 6.42, + "s": 200, + "t": 1651251334045891221, + "x": 8, + }, + min={ + "av": 115689, + "c": 6.42, + "h": 6.542, + "l": 6.42, + "o": 6.49, + "v": 2671, + "vw": 6.4604, + }, + prev_day={ + "c": 0.29, + "h": 0.348, + "l": 0.29, + "o": 0.3443, + "v": 1488660, + "vw": 0.317, + }, + ticker="NVCN", + todays_change=6.13, + todays_change_percent=None, + updated=1651251360000000000, + ), + Snapshot( + day={ + "c": 4.2107, + "h": 4.95, + "l": 4.21, + "o": 4.31, + "v": 453199, + "vw": 4.4181, + }, + last_quote={ + "P": 4.22, + "S": 9, + "p": 4.21, + "s": 11, + "t": 1651251781709136903, + }, + last_trade={ + "c": None, + "i": "1084", + "p": 4.2116, + "s": 241, + "t": 1651251789345841015, + "x": 4, + }, + min={ + "av": 453189, + "c": 4.2107, + "h": 4.2107, + "l": 4.2107, + "o": 4.2107, + "v": 1012, + "vw": 4.2107, + }, + prev_day={ + "c": 0.1953, + "h": 0.2966, + "l": 0.195, + "o": 0.29, + "v": 8784033, + "vw": 0.2278, + }, + ticker="BIOL", + todays_change=4.016, + todays_change_percent=None, + updated=1651251789345841015, + ), + ] + self.assertEqual(snapshots, expected) + + def test_get_snapshot_ticker(self): + snapshots = self.c.get_snapshot_ticker("AAPL") + expected = [ + Snapshot( + day={ + "c": 160.315, + "h": 166.2, + "l": 159.8, + "o": 161.84, + "v": 68840127, + "vw": 162.7124, + }, + last_quote={ + "P": 159.99, + "S": 5, + "p": 159.98, + "s": 3, + "t": 1651251948407646487, + }, + last_trade={ + "c": None, + "i": "121351", + "p": 159.99, + "s": 200, + "t": 1651251948294080343, + "x": 12, + }, + min={ + "av": 68834255, + "c": 160.3, + "h": 160.71, + "l": 160.3, + "o": 160.71, + "v": 197226, + "vw": 160.5259, + }, + prev_day={ + "c": 163.64, + "h": 164.515, + "l": 158.93, + "o": 159.25, + "v": 130149192, + "vw": 161.8622, + }, + ticker="AAPL", + todays_change=-3.65, + todays_change_percent=None, + updated=1651251948294080343, + ) + ] + self.assertEqual(snapshots, expected) + + def test_get_snapshot_option(self): + snapshots = self.c.get_snapshot_option("AAPL", "O:AAPL230616C00150000") + expected = [ + OptionContractSnapshot( + break_even_price=179.075, + day={ + "change": -2.3999999999999986, + "change_percent": -7.643312101910824, + "close": 29, + "high": 32.25, + "last_updated": 1651204800000000000, + "low": 29, + "open": 29.99, + "previous_close": 31.4, + "volume": 8, + "vwap": 30.7738, + }, + details={ + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2023-06-16", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:AAPL230616C00150000", + }, + greeks={ + "delta": 0.6436614934293701, + "gamma": 0.0061735291012820675, + "theta": -0.028227189324641973, + "vega": 0.6381159723175714, + }, + implied_volatility=0.3570277203465058, + last_quote={ + "ask": 29.25, + "ask_size": 209, + "bid": 28.9, + "bid_size": 294, + "last_updated": 1651254260800059648, + "midpoint": 29.075, + "timeframe": "REAL-TIME", + }, + open_interest=8133, + underlying_asset={ + "change_to_break_even": 19.11439999999999, + "last_updated": 1651254263172073152, + "price": 159.9606, + "ticker": "AAPL", + "timeframe": "REAL-TIME", + }, + ) + ] + self.assertEqual(snapshots, expected) + + def test_get_snapshot_crypto_book(self): + snapshots = self.c.get_snapshot_crypto_book("X:BTCUSD") + expected = [ + SnapshotTickerFullBook( + ticker="X:BTCUSD", + bids=[ + {"p": 16303.17, "x": {"1": 2}}, + {"p": 16302.94, "x": {"1": 0.02859424, "6": 0.023455}}, + ], + asks=[{"p": 11454, "x": {"2": 1}}, {"p": 11455, "x": {"2": 1}}], + bid_count=694.951789670001, + ask_count=593.1412981600005, + spread=-4849.17, + updated=1605295074162, + ) + ] + self.assertEqual(snapshots, expected) From 1f4f121af072600417f1f52a37281867261e4841 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Fri, 29 Apr 2022 15:42:17 -0400 Subject: [PATCH 040/448] Snapshot rst (#144) --- docs/source/Snapshot.rst | 29 +++++++++++++++++++++++++++++ docs/source/index.rst | 1 + polygon/rest/reference.py | 6 +++--- 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 docs/source/Snapshot.rst diff --git a/docs/source/Snapshot.rst b/docs/source/Snapshot.rst new file mode 100644 index 00000000..274341e1 --- /dev/null +++ b/docs/source/Snapshot.rst @@ -0,0 +1,29 @@ +.. _snapshot_header: + +Snapshot +================================= + +================================= +Get all snapshots +================================= +.. automethod:: polygon.RESTClient.get_snapshot_all + +================================= +Get gainers/losers snapshot +================================= +.. automethod:: polygon.RESTClient.get_snapshot_direction + +================================= +Get ticker snapshot +================================= +.. automethod:: polygon.RESTClient.get_snapshot_ticker + +================================= +Get options snapshot +================================= +.. automethod:: polygon.RESTClient.get_snapshot_option + +================================= +Get crypto L2 book snapshot +================================= +.. automethod:: polygon.RESTClient.get_snapshot_crypto_book \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index 36bd6e23..fbcb3e3d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -9,6 +9,7 @@ This documentation is for the Python client only. For details about the response Getting-Started Aggs + Snapshot Quotes Reference Trades diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index e7acaa3d..5082e35b 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -33,7 +33,7 @@ def get_market_holidays( :param params: Any additional query params :param raw: Return HTTPResponse object instead of results object - :return: List of quotes + :return: List of market holidays """ url = "/v1/marketstatus/upcoming" @@ -53,7 +53,7 @@ def get_market_status( :param params: Any additional query params :param raw: Return HTTPResponse object instead of results object - :return: List of quotes + :return: Market status """ url = "/v1/marketstatus/now" @@ -393,7 +393,7 @@ def get_exchanges( :param locale: Filter by locale. :param params: Any additional query params :param raw: Return HTTPResponse object instead of results object - :return: List of quotes + :return: List of exchanges """ url = "/v3/reference/exchanges" From cd6d379f8a9bab96754061f100e6fc88e6fe796f Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Fri, 29 Apr 2022 16:06:03 -0400 Subject: [PATCH 041/448] v1.0.0.beta1 --- pyproject.toml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 26207f9f..65236816 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] -name = "client-python" -version = "0.3.0" +name = "polygon-api-client" +version = "1.0.0.beta1" description = "Official Polygon.io REST and Websocket client." authors = ["polygon.io"] license = "MIT" @@ -19,6 +19,9 @@ keywords = [ "websocket", "client" ] +packages = [ + { include = "polygon" } +] [tool.poetry.dependencies] python = "^3.7" From 77e1084920668b456a242ff89340bf153b3b5b32 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 2 May 2022 11:35:42 -0400 Subject: [PATCH 042/448] move mocks to json files (#147) * move mocks to json files on disk * fix style --- tests/base.py | 30 ++ tests/mocks.py | 110 ------- tests/mocks/v1/last/crypto/BTC/USD.json | 14 + tests/mocks/v1/marketstatus/now.json | 15 + tests/mocks/v1/marketstatus/upcoming.json | 90 ++++++ .../AAPL/2005-04-01?adjusted=True.json | 12 + .../stocks/2005-04-04?adjusted=True.json | 21 ++ tests/mocks/v2/aggs/ticker/AAPL/prev.json | 22 ++ .../range/1/day/2005-04-01/2005-04-04.json | 31 ++ tests/mocks/v2/last/trade/AAPL.json | 21 ++ .../mocks/v2/reference/news?ticker=NFLX.json | 29 ++ .../markets/crypto/tickers/X:BTCUSD/book.json | 39 +++ .../stocks/gainers?market.type=stocks.json | 100 +++++++ .../tickers/AAPL?market.type=stocks.json | 50 ++++ .../stocks/tickers?market.type=stocks.json | 55 ++++ .../conditions?asset.class=stocks.json | 252 ++++++++++++++++ tests/mocks/v3/reference/dividends.json | 106 +++++++ tests/mocks/v3/reference/exchanges.json | 271 ++++++++++++++++++ tests/mocks/v3/reference/splits.json | 66 +++++ tests/mocks/v3/reference/tickers.json | 36 +++ tests/mocks/v3/reference/tickers/AAPL.json | 34 +++ tests/mocks/v3/reference/tickers/types.json | 97 +++++++ ...GU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json | 34 +++ .../options/AAPL/O:AAPL230616C00150000.json | 51 ++++ tests/mocks/v3/trades/AAPL?limit=2.json | 40 +++ tests/test_aggs.py | 2 +- tests/test_conditions.py | 2 +- tests/test_dividends.py | 2 +- tests/test_exchanges.py | 2 +- tests/test_markets.py | 3 +- tests/test_snapshots.py | 2 +- tests/test_splits.py | 2 +- tests/test_tickers.py | 2 +- tests/test_trades.py | 3 +- 34 files changed, 1525 insertions(+), 121 deletions(-) create mode 100644 tests/base.py delete mode 100644 tests/mocks.py create mode 100644 tests/mocks/v1/last/crypto/BTC/USD.json create mode 100644 tests/mocks/v1/marketstatus/now.json create mode 100644 tests/mocks/v1/marketstatus/upcoming.json create mode 100644 tests/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json create mode 100644 tests/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json create mode 100644 tests/mocks/v2/aggs/ticker/AAPL/prev.json create mode 100644 tests/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json create mode 100644 tests/mocks/v2/last/trade/AAPL.json create mode 100644 tests/mocks/v2/reference/news?ticker=NFLX.json create mode 100644 tests/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json create mode 100644 tests/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json create mode 100644 tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json create mode 100644 tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json create mode 100644 tests/mocks/v3/reference/conditions?asset.class=stocks.json create mode 100644 tests/mocks/v3/reference/dividends.json create mode 100644 tests/mocks/v3/reference/exchanges.json create mode 100644 tests/mocks/v3/reference/splits.json create mode 100644 tests/mocks/v3/reference/tickers.json create mode 100644 tests/mocks/v3/reference/tickers/AAPL.json create mode 100644 tests/mocks/v3/reference/tickers/types.json create mode 100644 tests/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json create mode 100644 tests/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json create mode 100644 tests/mocks/v3/trades/AAPL?limit=2.json diff --git a/tests/base.py b/tests/base.py new file mode 100644 index 00000000..12250ae9 --- /dev/null +++ b/tests/base.py @@ -0,0 +1,30 @@ +from polygon import RESTClient + +import os +import unittest +import httpretty # type: ignore + +# mocks are stored in file tree +mocks = [] +dirname = os.path.dirname(__file__) +mockdir = os.path.join(dirname, "mocks") +for dname, _, files in os.walk(mockdir): + for fname in files: + if fname.endswith(".json"): + abspath = os.path.join(dname, fname) + with open(abspath, "r") as f: + urllpath = abspath.replace(mockdir, "").replace(".json", "") + mocks.append((urllpath, f.read())) + # print('load', urllpath) + + +class BaseTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.maxDiff = None + cls.c = RESTClient("", verbose=True) + httpretty.enable(verbose=True, allow_net_connect=False) + for m in mocks: + url = cls.c.BASE + m[0] + # print('register', url) + httpretty.register_uri(httpretty.GET, url, m[1], match_querystring=True) diff --git a/tests/mocks.py b/tests/mocks.py deleted file mode 100644 index 6a6491ae..00000000 --- a/tests/mocks.py +++ /dev/null @@ -1,110 +0,0 @@ -from polygon import RESTClient -import unittest -import httpretty # type: ignore - -mocks = [ - ( - "/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04", - '{"ticker":"AAPL","queryCount":2,"resultsCount":2,"adjusted":true,"results":[{"v":6.42646396e+08,"vw":1.469,"o":1.5032,"c":1.4604,"h":1.5064,"l":1.4489,"t":1112331600000,"n":82132},{"v":5.78172308e+08,"vw":1.4589,"o":1.4639,"c":1.4675,"h":1.4754,"l":1.4343,"t":1112587200000,"n":65543}],"status":"OK","request_id":"12afda77aab3b1936c5fb6ef4241ae42","count":2}', - ), - ( - "/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True", - '{"queryCount":1,"resultsCount":1,"adjusted": true,"results": [{"T":"GIK","v":895345,"vw":9.9979,"o":9.99,"c":10.02,"h":10.02,"l":9.9,"t":1602705600000,"n":96}],"status":"OK","request_id":"eae3ded2d6d43f978125b7a8a609fad9","count":1}', - ), - ( - "/v1/open-close/AAPL/2005-04-01?adjusted=True", - '{"status": "OK","from": "2021-04-01","symbol": "AAPL","open": 123.66,"high": 124.18,"low": 122.49,"close": 123,"volume": 75089134,"afterHours": 123,"preMarket": 123.45}', - ), - ( - "/v2/aggs/ticker/AAPL/prev", - '{"ticker":"AAPL","queryCount":1,"resultsCount":1,"adjusted":true,"results":[{"T":"AAPL","v":9.5595226e+07,"vw":158.6074,"o":162.25,"c":156.8,"h":162.34,"l":156.72,"t":1651003200000,"n":899965}],"status":"OK","request_id":"5e5378d5ecaf3df794bb52e45d015d2e","count":1}', - ), - ( - "/v3/reference/tickers", - '{"results":[{"ticker":"A","name":"Agilent Technologies Inc.","market":"stocks","locale":"us","primary_exchange":"XNYS","type":"CS","active":true,"currency_name":"usd","cik":"0001090872","composite_figi":"BBG000C2V3D6","share_class_figi":"BBG001SCTQY4","last_updated_utc":"2022-04-27T00:00:00Z"},{"ticker":"AA","name":"Alcoa Corporation","market":"stocks","locale":"us","primary_exchange":"XNYS","type":"CS","active":true,"currency_name":"usd","cik":"0001675149","composite_figi":"BBG00B3T3HD3","share_class_figi":"BBG00B3T3HF1","last_updated_utc":"2022-04-27T00:00:00Z"}],"status":"OK","request_id":"37089bb3b4ef99a796cdc82ff971e447","count":2,"next_url":"https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg"}', - ), - ( - "/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg", - '{"results":[{"ticker":"AAA","name":"AAF First Priority CLO Bond ETF","market":"stocks","locale":"us","primary_exchange":"ARCX","type":"ETF","active":true,"currency_name":"usd","composite_figi":"BBG00X5FSP48","share_class_figi":"BBG00X5FSPZ4","last_updated_utc":"2022-04-27T00:00:00Z"},{"ticker":"AAAU","name":"Goldman Sachs Physical Gold ETF Shares","market":"stocks","locale":"us","primary_exchange":"BATS","type":"ETF","active":true,"currency_name":"usd","cik":"0001708646","composite_figi":"BBG00LPXX872","share_class_figi":"BBG00LPXX8Z1","last_updated_utc":"2022-04-27T00:00:00Z"}],"status":"OK","request_id":"40d60d83fa0628503b4d13387b7bde2a","count":2}', - ), - ( - "/v3/reference/tickers/AAPL", - '{"ticker":"AAPL","name":"Apple Inc.","market":"stocks","locale":"us","primary_exchange":"XNAS","type":"CS","active":true,"currency_name":"usd","cik":"0000320193","composite_figi":"BBG000B9XRY4","share_class_figi":"BBG001S5N8V8","market_cap":2.6714924917e+12,"phone_number":"(408) 996-1010","address":{"address1":"ONE APPLE PARK WAY","city":"CUPERTINO","state":"CA","postal_code":"95014"},"description":"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.","sic_code":"3571","sic_description":"ELECTRONIC COMPUTERS","ticker_root":"AAPL","homepage_url":"https://www.apple.com","total_employees":154000,"list_date":"1980-12-12","branding":{"logo_url":"https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg","icon_url":"https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png"},"share_class_shares_outstanding":16319440000,"weighted_shares_outstanding":16319441000}', - ), - ( - "/v2/reference/news?ticker=NFLX", - '{"results":[{"id":"JeJEhAVoKaqJ2zF9nzQYMg07UlEeWlis6Dsop33TPQY","publisher":{"name":"MarketWatch","homepage_url":"https://www.marketwatch.com/","logo_url":"https://s3.polygon.io/public/assets/news/logos/marketwatch.svg","favicon_url":"https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico"},"title":"Theres a big hole in the Feds theory of inflation—incomes are falling at a record 10.9 rate","author":"MarketWatch","published_utc":"2022-04-28T17:08:00Z","article_url":"https://www.marketwatch.com/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705","tickers":["MSFT","TSN","NFLX","AMZN"],"amp_url":"https://www.marketwatch.com/amp/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705","image_url":"https://images.mktw.net/im-533637/social","description":"If inflation is all due to an overly generous federal government giving its people too much money, then our inflation problem is about to go away."}],"status":"OK","request_id":"f5248459196e12f27520afd41cee5126","count":10}', - ), - ( - "/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}', - ), - ( - "/v2/last/trade/AAPL", - '{"results":{"c":[12,37],"i":"237688","p":166.25,"s":2,"x":4,"r":202,"z":3,"T":"AAPL","t":1651179319310617300,"y":1651179319308000000,"f":1651179319310588400,"q":7084210},"status":"OK","request_id":"d4bafa50e72cf9ed19ac538ae1a3185a"}', - ), - ( - "/v1/last/crypto/BTC/USD", - '{"last":{"conditions":[2],"exchange":2,"price":39976.89682331,"size":0.005,"timestamp":1651180409688},"request_id":"d67c9bfe1fa0c29db9177d78b3ab713c","status":"success","symbol":"BTC-USD"}', - ), - ( - "/v3/trades/AAPL?limit=2", - '{"results":[{"conditions":[12,37],"correction":1,"exchange":11,"id":"183276","participant_timestamp":1651181822461636600,"price":156.43,"sequence_number":7179341,"sip_timestamp":1651181822461979400,"size":10,"tape":3,"trf_id":3,"trf_timestamp":1651181557090806500},{"conditions":[12,37],"correction":1,"exchange":12,"id":"183276","participant_timestamp":1651181822461636600,"price":157.43,"sequence_number":7179341,"sip_timestamp":1651181822461979400,"size":10,"tape":3,"trf_id":3,"trf_timestamp":1651181557090806500}],"status":"OK","request_id":"756f9910624b35a47eb07f21a7a373bb"}', - ), - ( - "/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"}}', - ), - ( - "/v3/reference/splits", - '{"results":[{"execution_date":"2022-07-18","split_from":1,"split_to":20,"ticker":"GOOGL"},{"execution_date":"2022-07-18","split_from":1,"split_to":20,"ticker":"GOOG"},{"execution_date":"2022-07-01","split_from":1,"split_to":3,"ticker":"CTO"},{"execution_date":"2022-06-29","split_from":1,"split_to":10,"ticker":"SHOP"},{"execution_date":"2022-06-22","split_from":1,"split_to":10,"ticker":"SHOP"},{"execution_date":"2022-06-10","split_from":1,"split_to":4,"ticker":"DXCM"},{"execution_date":"2022-06-06","split_from":1,"split_to":20,"ticker":"AMZN"},{"execution_date":"2022-05-20","split_from":2,"split_to":1,"ticker":"BRW"},{"execution_date":"2022-05-16","split_from":1,"split_to":2,"ticker":"CM"},{"execution_date":"2022-05-02","split_from":3,"split_to":4,"ticker":"CIG.C"}],"status":"OK","request_id":"b52de486daf5491e6b9ebdf5e0bf65bc"}', - ), - ( - "/v3/reference/dividends", - '{"results":[{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2025-06-12","frequency":4,"pay_date":"2025-06-30","record_date":"2025-06-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2025-03-13","frequency":4,"pay_date":"2025-03-31","record_date":"2025-03-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-12-12","frequency":4,"pay_date":"2024-12-31","record_date":"2024-12-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-09-12","frequency":4,"pay_date":"2024-09-30","record_date":"2024-09-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-06-13","frequency":4,"pay_date":"2024-06-30","record_date":"2024-06-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2024-03-14","frequency":4,"pay_date":"2024-03-31","record_date":"2024-03-15","ticker":"CSSEN"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2023-12-14","frequency":4,"pay_date":"2023-12-31","record_date":"2023-12-15","ticker":"CSSEN"},{"cash_amount":0.5,"declaration_date":"2022-02-10","dividend_type":"CD","ex_dividend_date":"2023-11-13","frequency":4,"pay_date":"2023-11-15","record_date":"2023-11-14","ticker":"AIRTP"},{"cash_amount":0.59375,"declaration_date":"2020-09-09","dividend_type":"CD","ex_dividend_date":"2023-09-14","frequency":4,"pay_date":"2023-09-30","record_date":"2023-09-15","ticker":"CSSEN"},{"cash_amount":0.5,"declaration_date":"2022-02-10","dividend_type":"CD","ex_dividend_date":"2023-08-11","frequency":4,"pay_date":"2023-08-15","record_date":"2023-08-14","ticker":"AIRTP"}],"status":"OK","request_id":"0326f1f88a2867a7184c116f5b1edd00"}', - ), - ( - "/v3/reference/conditions?asset.class=stocks", - '{"results":[{"id":1,"type":"sale_condition","name":"Acquisition","asset_class":"stocks","sip_mapping":{"UTP":"A"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":2,"type":"sale_condition","name":"Average Price Trade","asset_class":"stocks","sip_mapping":{"CTA":"B","UTP":"W"},"update_rules":{"consolidated":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":3,"type":"sale_condition","name":"Automatic Execution","asset_class":"stocks","sip_mapping":{"CTA":"E"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":4,"type":"sale_condition","name":"Bunched Trade","asset_class":"stocks","sip_mapping":{"UTP":"B"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":5,"type":"sale_condition","name":"Bunched Sold Trade","asset_class":"stocks","sip_mapping":{"UTP":"G"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":6,"type":"sale_condition","name":"CAP Election","asset_class":"stocks","sip_mapping":{"CTA":"I"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"],"legacy":true},{"id":7,"type":"sale_condition","name":"Cash Sale","asset_class":"stocks","sip_mapping":{"CTA":"C","UTP":"C"},"update_rules":{"consolidated":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":false,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]},{"id":8,"type":"sale_condition","name":"Closing Prints","asset_class":"stocks","sip_mapping":{"UTP":"6"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":9,"type":"sale_condition","name":"Cross Trade","asset_class":"stocks","sip_mapping":{"CTA":"X","UTP":"X"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":true,"updates_volume":true}},"data_types":["trade"]},{"id":10,"type":"sale_condition","name":"Derivatively Priced","asset_class":"stocks","sip_mapping":{"CTA":"4","UTP":"4"},"update_rules":{"consolidated":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true},"market_center":{"updates_high_low":true,"updates_open_close":false,"updates_volume":true}},"data_types":["trade"]}],"status":"OK","request_id":"4c915a9cb249e40d08d031d70567d615","count":10}', - ), - ( - "/v3/reference/exchanges", - '{"results":[{"id":1,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE American, LLC","acronym":"AMEX","mic":"XASE","operating_mic":"XNYS","participant_id":"A","url":"https://www.nyse.com/markets/nyse-american"},{"id":2,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq OMX BX, Inc.","mic":"XBOS","operating_mic":"XNAS","participant_id":"B","url":"https://www.nasdaq.com/solutions/nasdaq-bx-stock-market"},{"id":3,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE National, Inc.","acronym":"NSX","mic":"XCIS","operating_mic":"XNYS","participant_id":"C","url":"https://www.nyse.com/markets/nyse-national"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA NYSE TRF","mic":"FINY","operating_mic":"XNYS","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Carteret","mic":"FINN","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Nasdaq TRF Chicago","mic":"FINC","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":4,"type":"TRF","asset_class":"stocks","locale":"us","name":"FINRA Alternative Display Facility","mic":"XADF","operating_mic":"FINR","participant_id":"D","url":"https://www.finra.org"},{"id":5,"type":"SIP","asset_class":"stocks","locale":"us","name":"Unlisted Trading Privileges","operating_mic":"XNAS","participant_id":"E","url":"https://www.utpplan.com"},{"id":6,"type":"TRF","asset_class":"stocks","locale":"us","name":"International Securities Exchange, LLC - Stocks","mic":"XISE","operating_mic":"XNAS","participant_id":"I","url":"https://nasdaq.com/solutions/nasdaq-ise"},{"id":7,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGA","mic":"EDGA","operating_mic":"XCBO","participant_id":"J","url":"https://www.cboe.com/us/equities"},{"id":8,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe EDGX","mic":"EDGX","operating_mic":"XCBO","participant_id":"K","url":"https://www.cboe.com/us/equities"},{"id":9,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Chicago, Inc.","mic":"XCHI","operating_mic":"XNYS","participant_id":"M","url":"https://www.nyse.com/markets/nyse-chicago"},{"id":10,"type":"exchange","asset_class":"stocks","locale":"us","name":"New York Stock Exchange","mic":"XNYS","operating_mic":"XNYS","participant_id":"N","url":"https://www.nyse.com"},{"id":11,"type":"exchange","asset_class":"stocks","locale":"us","name":"NYSE Arca, Inc.","mic":"ARCX","operating_mic":"XNYS","participant_id":"P","url":"https://www.nyse.com/markets/nyse-arca"},{"id":12,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq","mic":"XNAS","operating_mic":"XNAS","participant_id":"T","url":"https://www.nasdaq.com"},{"id":13,"type":"SIP","asset_class":"stocks","locale":"us","name":"Consolidated Tape Association","operating_mic":"XNYS","participant_id":"S","url":"https://www.nyse.com/data/cta"},{"id":14,"type":"exchange","asset_class":"stocks","locale":"us","name":"Long-Term Stock Exchange","mic":"LTSE","operating_mic":"LTSE","participant_id":"L","url":"https://www.ltse.com"},{"id":15,"type":"exchange","asset_class":"stocks","locale":"us","name":"Investors Exchange","mic":"IEXG","operating_mic":"IEXG","participant_id":"V","url":"https://www.iextrading.com"},{"id":16,"type":"TRF","asset_class":"stocks","locale":"us","name":"Cboe Stock Exchange","mic":"CBSX","operating_mic":"XCBO","participant_id":"W","url":"https://www.cboe.com"},{"id":17,"type":"exchange","asset_class":"stocks","locale":"us","name":"Nasdaq Philadelphia Exchange LLC","mic":"XPHL","operating_mic":"XNAS","participant_id":"X","url":"https://www.nasdaq.com/solutions/nasdaq-phlx"},{"id":18,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BYX","mic":"BATY","operating_mic":"XCBO","participant_id":"Y","url":"https://www.cboe.com/us/equities"},{"id":19,"type":"exchange","asset_class":"stocks","locale":"us","name":"Cboe BZX","mic":"BATS","operating_mic":"XCBO","participant_id":"Z","url":"https://www.cboe.com/us/equities"},{"id":20,"type":"exchange","asset_class":"stocks","locale":"us","name":"MIAX Pearl","mic":"EPRL","operating_mic":"MIHI","participant_id":"H","url":"https://www.miaxoptions.com/alerts/pearl-equities"},{"id":21,"type":"exchange","asset_class":"stocks","locale":"us","name":"Members Exchange","mic":"MEMX","operating_mic":"MEMX","participant_id":"U","url":"https://www.memx.com"}],"status":"OK","request_id":"c0109b8a70a931efe47cef085c7a7f5e","count":24}', - ), - ( - "/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks", - '{"count": 1,"status": "OK","tickers": [{"day": {"c": 20.506,"h": 20.64,"l": 20.506,"o": 20.64,"v": 37216,"vw": 20.616},"lastQuote": {"P": 20.6,"S": 22,"p": 20.5,"s": 13,"t": 1605192959994246100},"lastTrade": {"c": [14,41],"i": "71675577320245","p": 20.506,"s": 2416,"t": 1605192894630916600,"x": 4},"min": {"av": 37216,"c": 20.506,"h": 20.506,"l": 20.506,"o": 20.506,"v": 5000,"vw": 20.5105},"prevDay": {"c": 20.63,"h": 21,"l": 20.5,"o": 20.79,"v": 292738,"vw": 20.6939},"ticker": "BCAT","todaysChange": -0.124,"todaysChangePerc": -0.601,"updated": 1605192894630916600}]}', - ), - ( - "/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks", - '{"status":"OK","tickers":[{"day":{"c":6.42,"h":6.99,"l":6.4,"o":6.81,"v":115782,"vw":6.656},"lastQuote":{"P":6.43,"S":1,"p":6.4,"s":1,"t":1651251738312628478},"lastTrade":{"c":[14,41],"i":"100","p":6.42,"s":200,"t":1651251334045891221,"x":8},"min":{"av":115689,"c":6.42,"h":6.542,"l":6.42,"o":6.49,"v":2671,"vw":6.4604},"prevDay":{"c":0.29,"h":0.348,"l":0.29,"o":0.3443,"v":1488660,"vw":0.317},"ticker":"NVCN","todaysChange":6.13,"todaysChangePerc":2113.793,"updated":1651251360000000000},{"day":{"c":4.2107,"h":4.95,"l":4.21,"o":4.31,"v":453199,"vw":4.4181},"lastQuote":{"P":4.22,"S":9,"p":4.21,"s":11,"t":1651251781709136903},"lastTrade":{"c":null,"i":"1084","p":4.2116,"s":241,"t":1651251789345841015,"x":4},"min":{"av":453189,"c":4.2107,"h":4.2107,"l":4.2107,"o":4.2107,"v":1012,"vw":4.2107},"prevDay":{"c":0.1953,"h":0.2966,"l":0.195,"o":0.29,"v":8784033,"vw":0.2278},"ticker":"BIOL","todaysChange":4.016,"todaysChangePerc":2056.477,"updated":1651251789345841015}]}', - ), - ( - "/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks", - '{"request_id":"957db942cab2d6b0633b9b4820db0cb2","status":"OK","ticker":{"day":{"c":160.315,"h":166.2,"l":159.8,"o":161.84,"v":68840127,"vw":162.7124},"lastQuote":{"P":159.99,"S":5,"p":159.98,"s":3,"t":1651251948407646487},"lastTrade":{"c":null,"i":"121351","p":159.99,"s":200,"t":1651251948294080343,"x":12},"min":{"av":68834255,"c":160.3,"h":160.71,"l":160.3,"o":160.71,"v":197226,"vw":160.5259},"prevDay":{"c":163.64,"h":164.515,"l":158.93,"o":159.25,"v":130149192,"vw":161.8622},"ticker":"AAPL","todaysChange":-3.65,"todaysChangePerc":-2.231,"updated":1651251948294080343}}', - ), - ( - "/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book", - '{"data": {"askCount": 593.1412981600005,"asks": [{"p": 11454,"x": {"2": 1}},{"p": 11455,"x": {"2": 1}}],"bidCount": 694.951789670001,"bids": [{"p": 16303.17,"x": {"1": 2}},{"p": 16302.94,"x": {"1": 0.02859424,"6": 0.023455}}],"spread": -4849.17,"ticker": "X:BTCUSD","updated": 1605295074162},"status": "OK"}', - ), - ( - "/v3/snapshot/options/AAPL/O:AAPL230616C00150000", - '{"request_id":"104d9b901d0c9e81d284cb8b41c5cdd3","results":{"break_even_price":179.075,"day":{"change":-2.3999999999999986,"change_percent":-7.643312101910824,"close":29,"high":32.25,"last_updated":1651204800000000000,"low":29,"open":29.99,"previous_close":31.4,"volume":8,"vwap":30.7738},"details":{"contract_type":"call","exercise_style":"american","expiration_date":"2023-06-16","shares_per_contract":100,"strike_price":150,"ticker":"O:AAPL230616C00150000"},"greeks":{"delta":0.6436614934293701,"gamma":0.0061735291012820675,"theta":-0.028227189324641973,"vega":0.6381159723175714},"implied_volatility":0.3570277203465058,"last_quote":{"ask":29.25,"ask_size":209,"bid":28.9,"bid_size":294,"last_updated":1651254260800059648,"midpoint":29.075,"timeframe":"REAL-TIME"},"open_interest":8133,"underlying_asset":{"change_to_break_even":19.11439999999999,"last_updated":1651254263172073152,"price":159.9606,"ticker":"AAPL","timeframe":"REAL-TIME"}},"status":"OK"}', - ), -] - - -class BaseTest(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls.maxDiff = None - cls.c = RESTClient("", verbose=True) - httpretty.enable(verbose=True, allow_net_connect=False) - for m in mocks: - httpretty.register_uri( - httpretty.GET, cls.c.BASE + m[0], m[1], match_querystring=True - ) diff --git a/tests/mocks/v1/last/crypto/BTC/USD.json b/tests/mocks/v1/last/crypto/BTC/USD.json new file mode 100644 index 00000000..d9204670 --- /dev/null +++ b/tests/mocks/v1/last/crypto/BTC/USD.json @@ -0,0 +1,14 @@ +{ + "last": { + "conditions": [ + 2 + ], + "exchange": 2, + "price": 39976.89682331, + "size": 0.005, + "timestamp": 1651180409688 + }, + "request_id": "d67c9bfe1fa0c29db9177d78b3ab713c", + "status": "success", + "symbol": "BTC-USD" +} \ No newline at end of file diff --git a/tests/mocks/v1/marketstatus/now.json b/tests/mocks/v1/marketstatus/now.json new file mode 100644 index 00000000..51172de1 --- /dev/null +++ b/tests/mocks/v1/marketstatus/now.json @@ -0,0 +1,15 @@ +{ + "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" + } +} \ No newline at end of file diff --git a/tests/mocks/v1/marketstatus/upcoming.json b/tests/mocks/v1/marketstatus/upcoming.json new file mode 100644 index 00000000..0090f783 --- /dev/null +++ b/tests/mocks/v1/marketstatus/upcoming.json @@ -0,0 +1,90 @@ +[ + { + "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" + } +] \ No newline at end of file diff --git a/tests/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json b/tests/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json new file mode 100644 index 00000000..9600b11c --- /dev/null +++ b/tests/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json @@ -0,0 +1,12 @@ +{ + "status": "OK", + "from": "2021-04-01", + "symbol": "AAPL", + "open": 123.66, + "high": 124.18, + "low": 122.49, + "close": 123, + "volume": 75089134, + "afterHours": 123, + "preMarket": 123.45 +} \ No newline at end of file diff --git a/tests/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json b/tests/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json new file mode 100644 index 00000000..160e577e --- /dev/null +++ b/tests/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json @@ -0,0 +1,21 @@ +{ + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "T": "GIK", + "v": 895345, + "vw": 9.9979, + "o": 9.99, + "c": 10.02, + "h": 10.02, + "l": 9.9, + "t": 1602705600000, + "n": 96 + } + ], + "status": "OK", + "request_id": "eae3ded2d6d43f978125b7a8a609fad9", + "count": 1 +} \ No newline at end of file diff --git a/tests/mocks/v2/aggs/ticker/AAPL/prev.json b/tests/mocks/v2/aggs/ticker/AAPL/prev.json new file mode 100644 index 00000000..61b5e3ae --- /dev/null +++ b/tests/mocks/v2/aggs/ticker/AAPL/prev.json @@ -0,0 +1,22 @@ +{ + "ticker": "AAPL", + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "T": "AAPL", + "v": 95595226.0, + "vw": 158.6074, + "o": 162.25, + "c": 156.8, + "h": 162.34, + "l": 156.72, + "t": 1651003200000, + "n": 899965 + } + ], + "status": "OK", + "request_id": "5e5378d5ecaf3df794bb52e45d015d2e", + "count": 1 +} \ No newline at end of file diff --git a/tests/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json b/tests/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json new file mode 100644 index 00000000..82c09f8b --- /dev/null +++ b/tests/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json @@ -0,0 +1,31 @@ +{ + "ticker": "AAPL", + "queryCount": 2, + "resultsCount": 2, + "adjusted": true, + "results": [ + { + "v": 642646396.0, + "vw": 1.469, + "o": 1.5032, + "c": 1.4604, + "h": 1.5064, + "l": 1.4489, + "t": 1112331600000, + "n": 82132 + }, + { + "v": 578172308.0, + "vw": 1.4589, + "o": 1.4639, + "c": 1.4675, + "h": 1.4754, + "l": 1.4343, + "t": 1112587200000, + "n": 65543 + } + ], + "status": "OK", + "request_id": "12afda77aab3b1936c5fb6ef4241ae42", + "count": 2 +} \ No newline at end of file diff --git a/tests/mocks/v2/last/trade/AAPL.json b/tests/mocks/v2/last/trade/AAPL.json new file mode 100644 index 00000000..1df54d78 --- /dev/null +++ b/tests/mocks/v2/last/trade/AAPL.json @@ -0,0 +1,21 @@ +{ + "results": { + "c": [ + 12, + 37 + ], + "i": "237688", + "p": 166.25, + "s": 2, + "x": 4, + "r": 202, + "z": 3, + "T": "AAPL", + "t": 1651179319310617300, + "y": 1651179319308000000, + "f": 1651179319310588400, + "q": 7084210 + }, + "status": "OK", + "request_id": "d4bafa50e72cf9ed19ac538ae1a3185a" +} \ No newline at end of file diff --git a/tests/mocks/v2/reference/news?ticker=NFLX.json b/tests/mocks/v2/reference/news?ticker=NFLX.json new file mode 100644 index 00000000..84fa63ba --- /dev/null +++ b/tests/mocks/v2/reference/news?ticker=NFLX.json @@ -0,0 +1,29 @@ +{ + "results": [ + { + "id": "JeJEhAVoKaqJ2zF9nzQYMg07UlEeWlis6Dsop33TPQY", + "publisher": { + "name": "MarketWatch", + "homepage_url": "https://www.marketwatch.com/", + "logo_url": "https://s3.polygon.io/public/assets/news/logos/marketwatch.svg", + "favicon_url": "https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico" + }, + "title": "Theres a big hole in the Feds theory of inflation\u2014incomes are falling at a record 10.9 rate", + "author": "MarketWatch", + "published_utc": "2022-04-28T17:08:00Z", + "article_url": "https://www.marketwatch.com/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705", + "tickers": [ + "MSFT", + "TSN", + "NFLX", + "AMZN" + ], + "amp_url": "https://www.marketwatch.com/amp/story/theres-a-big-hole-in-the-feds-theory-of-inflationincomes-are-falling-at-a-record-10-9-rate-11651165705", + "image_url": "https://images.mktw.net/im-533637/social", + "description": "If inflation is all due to an overly generous federal government giving its people too much money, then our inflation problem is about to go away." + } + ], + "status": "OK", + "request_id": "f5248459196e12f27520afd41cee5126", + "count": 10 +} \ No newline at end of file diff --git a/tests/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json b/tests/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json new file mode 100644 index 00000000..cdbb5ae3 --- /dev/null +++ b/tests/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json @@ -0,0 +1,39 @@ +{ + "data": { + "askCount": 593.1412981600005, + "asks": [ + { + "p": 11454, + "x": { + "2": 1 + } + }, + { + "p": 11455, + "x": { + "2": 1 + } + } + ], + "bidCount": 694.951789670001, + "bids": [ + { + "p": 16303.17, + "x": { + "1": 2 + } + }, + { + "p": 16302.94, + "x": { + "1": 0.02859424, + "6": 0.023455 + } + } + ], + "spread": -4849.17, + "ticker": "X:BTCUSD", + "updated": 1605295074162 + }, + "status": "OK" +} \ No newline at end of file diff --git a/tests/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json b/tests/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json new file mode 100644 index 00000000..a4778bdc --- /dev/null +++ b/tests/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json @@ -0,0 +1,100 @@ +{ + "status": "OK", + "tickers": [ + { + "day": { + "c": 6.42, + "h": 6.99, + "l": 6.4, + "o": 6.81, + "v": 115782, + "vw": 6.656 + }, + "lastQuote": { + "P": 6.43, + "S": 1, + "p": 6.4, + "s": 1, + "t": 1651251738312628478 + }, + "lastTrade": { + "c": [ + 14, + 41 + ], + "i": "100", + "p": 6.42, + "s": 200, + "t": 1651251334045891221, + "x": 8 + }, + "min": { + "av": 115689, + "c": 6.42, + "h": 6.542, + "l": 6.42, + "o": 6.49, + "v": 2671, + "vw": 6.4604 + }, + "prevDay": { + "c": 0.29, + "h": 0.348, + "l": 0.29, + "o": 0.3443, + "v": 1488660, + "vw": 0.317 + }, + "ticker": "NVCN", + "todaysChange": 6.13, + "todaysChangePerc": 2113.793, + "updated": 1651251360000000000 + }, + { + "day": { + "c": 4.2107, + "h": 4.95, + "l": 4.21, + "o": 4.31, + "v": 453199, + "vw": 4.4181 + }, + "lastQuote": { + "P": 4.22, + "S": 9, + "p": 4.21, + "s": 11, + "t": 1651251781709136903 + }, + "lastTrade": { + "c": null, + "i": "1084", + "p": 4.2116, + "s": 241, + "t": 1651251789345841015, + "x": 4 + }, + "min": { + "av": 453189, + "c": 4.2107, + "h": 4.2107, + "l": 4.2107, + "o": 4.2107, + "v": 1012, + "vw": 4.2107 + }, + "prevDay": { + "c": 0.1953, + "h": 0.2966, + "l": 0.195, + "o": 0.29, + "v": 8784033, + "vw": 0.2278 + }, + "ticker": "BIOL", + "todaysChange": 4.016, + "todaysChangePerc": 2056.477, + "updated": 1651251789345841015 + } + ] +} \ No newline at end of file diff --git a/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json b/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json new file mode 100644 index 00000000..396fdd7e --- /dev/null +++ b/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json @@ -0,0 +1,50 @@ +{ + "request_id": "957db942cab2d6b0633b9b4820db0cb2", + "status": "OK", + "ticker": { + "day": { + "c": 160.315, + "h": 166.2, + "l": 159.8, + "o": 161.84, + "v": 68840127, + "vw": 162.7124 + }, + "lastQuote": { + "P": 159.99, + "S": 5, + "p": 159.98, + "s": 3, + "t": 1651251948407646487 + }, + "lastTrade": { + "c": null, + "i": "121351", + "p": 159.99, + "s": 200, + "t": 1651251948294080343, + "x": 12 + }, + "min": { + "av": 68834255, + "c": 160.3, + "h": 160.71, + "l": 160.3, + "o": 160.71, + "v": 197226, + "vw": 160.5259 + }, + "prevDay": { + "c": 163.64, + "h": 164.515, + "l": 158.93, + "o": 159.25, + "v": 130149192, + "vw": 161.8622 + }, + "ticker": "AAPL", + "todaysChange": -3.65, + "todaysChangePerc": -2.231, + "updated": 1651251948294080343 + } +} \ No newline at end of file diff --git a/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json b/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json new file mode 100644 index 00000000..5aabb0ae --- /dev/null +++ b/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json @@ -0,0 +1,55 @@ +{ + "count": 1, + "status": "OK", + "tickers": [ + { + "day": { + "c": 20.506, + "h": 20.64, + "l": 20.506, + "o": 20.64, + "v": 37216, + "vw": 20.616 + }, + "lastQuote": { + "P": 20.6, + "S": 22, + "p": 20.5, + "s": 13, + "t": 1605192959994246100 + }, + "lastTrade": { + "c": [ + 14, + 41 + ], + "i": "71675577320245", + "p": 20.506, + "s": 2416, + "t": 1605192894630916600, + "x": 4 + }, + "min": { + "av": 37216, + "c": 20.506, + "h": 20.506, + "l": 20.506, + "o": 20.506, + "v": 5000, + "vw": 20.5105 + }, + "prevDay": { + "c": 20.63, + "h": 21, + "l": 20.5, + "o": 20.79, + "v": 292738, + "vw": 20.6939 + }, + "ticker": "BCAT", + "todaysChange": -0.124, + "todaysChangePerc": -0.601, + "updated": 1605192894630916600 + } + ] +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/conditions?asset.class=stocks.json b/tests/mocks/v3/reference/conditions?asset.class=stocks.json new file mode 100644 index 00000000..9cd894df --- /dev/null +++ b/tests/mocks/v3/reference/conditions?asset.class=stocks.json @@ -0,0 +1,252 @@ +{ + "results": [ + { + "id": 1, + "type": "sale_condition", + "name": "Acquisition", + "asset_class": "stocks", + "sip_mapping": { + "UTP": "A" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 2, + "type": "sale_condition", + "name": "Average Price Trade", + "asset_class": "stocks", + "sip_mapping": { + "CTA": "B", + "UTP": "W" + }, + "update_rules": { + "consolidated": { + "updates_high_low": false, + "updates_open_close": false, + "updates_volume": true + }, + "market_center": { + "updates_high_low": false, + "updates_open_close": false, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 3, + "type": "sale_condition", + "name": "Automatic Execution", + "asset_class": "stocks", + "sip_mapping": { + "CTA": "E" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 4, + "type": "sale_condition", + "name": "Bunched Trade", + "asset_class": "stocks", + "sip_mapping": { + "UTP": "B" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 5, + "type": "sale_condition", + "name": "Bunched Sold Trade", + "asset_class": "stocks", + "sip_mapping": { + "UTP": "G" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": false, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": false, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 6, + "type": "sale_condition", + "name": "CAP Election", + "asset_class": "stocks", + "sip_mapping": { + "CTA": "I" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ], + "legacy": true + }, + { + "id": 7, + "type": "sale_condition", + "name": "Cash Sale", + "asset_class": "stocks", + "sip_mapping": { + "CTA": "C", + "UTP": "C" + }, + "update_rules": { + "consolidated": { + "updates_high_low": false, + "updates_open_close": false, + "updates_volume": true + }, + "market_center": { + "updates_high_low": false, + "updates_open_close": false, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 8, + "type": "sale_condition", + "name": "Closing Prints", + "asset_class": "stocks", + "sip_mapping": { + "UTP": "6" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 9, + "type": "sale_condition", + "name": "Cross Trade", + "asset_class": "stocks", + "sip_mapping": { + "CTA": "X", + "UTP": "X" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": true, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + }, + { + "id": 10, + "type": "sale_condition", + "name": "Derivatively Priced", + "asset_class": "stocks", + "sip_mapping": { + "CTA": "4", + "UTP": "4" + }, + "update_rules": { + "consolidated": { + "updates_high_low": true, + "updates_open_close": false, + "updates_volume": true + }, + "market_center": { + "updates_high_low": true, + "updates_open_close": false, + "updates_volume": true + } + }, + "data_types": [ + "trade" + ] + } + ], + "status": "OK", + "request_id": "4c915a9cb249e40d08d031d70567d615", + "count": 10 +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/dividends.json b/tests/mocks/v3/reference/dividends.json new file mode 100644 index 00000000..1150e0d8 --- /dev/null +++ b/tests/mocks/v3/reference/dividends.json @@ -0,0 +1,106 @@ +{ + "results": [ + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2025-06-12", + "frequency": 4, + "pay_date": "2025-06-30", + "record_date": "2025-06-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2025-03-13", + "frequency": 4, + "pay_date": "2025-03-31", + "record_date": "2025-03-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2024-12-12", + "frequency": 4, + "pay_date": "2024-12-31", + "record_date": "2024-12-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2024-09-12", + "frequency": 4, + "pay_date": "2024-09-30", + "record_date": "2024-09-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2024-06-13", + "frequency": 4, + "pay_date": "2024-06-30", + "record_date": "2024-06-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2024-03-14", + "frequency": 4, + "pay_date": "2024-03-31", + "record_date": "2024-03-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2023-12-14", + "frequency": 4, + "pay_date": "2023-12-31", + "record_date": "2023-12-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.5, + "declaration_date": "2022-02-10", + "dividend_type": "CD", + "ex_dividend_date": "2023-11-13", + "frequency": 4, + "pay_date": "2023-11-15", + "record_date": "2023-11-14", + "ticker": "AIRTP" + }, + { + "cash_amount": 0.59375, + "declaration_date": "2020-09-09", + "dividend_type": "CD", + "ex_dividend_date": "2023-09-14", + "frequency": 4, + "pay_date": "2023-09-30", + "record_date": "2023-09-15", + "ticker": "CSSEN" + }, + { + "cash_amount": 0.5, + "declaration_date": "2022-02-10", + "dividend_type": "CD", + "ex_dividend_date": "2023-08-11", + "frequency": 4, + "pay_date": "2023-08-15", + "record_date": "2023-08-14", + "ticker": "AIRTP" + } + ], + "status": "OK", + "request_id": "0326f1f88a2867a7184c116f5b1edd00" +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/exchanges.json b/tests/mocks/v3/reference/exchanges.json new file mode 100644 index 00000000..05e67e2f --- /dev/null +++ b/tests/mocks/v3/reference/exchanges.json @@ -0,0 +1,271 @@ +{ + "results": [ + { + "id": 1, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "NYSE American, LLC", + "acronym": "AMEX", + "mic": "XASE", + "operating_mic": "XNYS", + "participant_id": "A", + "url": "https://www.nyse.com/markets/nyse-american" + }, + { + "id": 2, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Nasdaq OMX BX, Inc.", + "mic": "XBOS", + "operating_mic": "XNAS", + "participant_id": "B", + "url": "https://www.nasdaq.com/solutions/nasdaq-bx-stock-market" + }, + { + "id": 3, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "NYSE National, Inc.", + "acronym": "NSX", + "mic": "XCIS", + "operating_mic": "XNYS", + "participant_id": "C", + "url": "https://www.nyse.com/markets/nyse-national" + }, + { + "id": 4, + "type": "TRF", + "asset_class": "stocks", + "locale": "us", + "name": "FINRA NYSE TRF", + "mic": "FINY", + "operating_mic": "XNYS", + "participant_id": "D", + "url": "https://www.finra.org" + }, + { + "id": 4, + "type": "TRF", + "asset_class": "stocks", + "locale": "us", + "name": "FINRA Nasdaq TRF Carteret", + "mic": "FINN", + "operating_mic": "FINR", + "participant_id": "D", + "url": "https://www.finra.org" + }, + { + "id": 4, + "type": "TRF", + "asset_class": "stocks", + "locale": "us", + "name": "FINRA Nasdaq TRF Chicago", + "mic": "FINC", + "operating_mic": "FINR", + "participant_id": "D", + "url": "https://www.finra.org" + }, + { + "id": 4, + "type": "TRF", + "asset_class": "stocks", + "locale": "us", + "name": "FINRA Alternative Display Facility", + "mic": "XADF", + "operating_mic": "FINR", + "participant_id": "D", + "url": "https://www.finra.org" + }, + { + "id": 5, + "type": "SIP", + "asset_class": "stocks", + "locale": "us", + "name": "Unlisted Trading Privileges", + "operating_mic": "XNAS", + "participant_id": "E", + "url": "https://www.utpplan.com" + }, + { + "id": 6, + "type": "TRF", + "asset_class": "stocks", + "locale": "us", + "name": "International Securities Exchange, LLC - Stocks", + "mic": "XISE", + "operating_mic": "XNAS", + "participant_id": "I", + "url": "https://nasdaq.com/solutions/nasdaq-ise" + }, + { + "id": 7, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Cboe EDGA", + "mic": "EDGA", + "operating_mic": "XCBO", + "participant_id": "J", + "url": "https://www.cboe.com/us/equities" + }, + { + "id": 8, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Cboe EDGX", + "mic": "EDGX", + "operating_mic": "XCBO", + "participant_id": "K", + "url": "https://www.cboe.com/us/equities" + }, + { + "id": 9, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "NYSE Chicago, Inc.", + "mic": "XCHI", + "operating_mic": "XNYS", + "participant_id": "M", + "url": "https://www.nyse.com/markets/nyse-chicago" + }, + { + "id": 10, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "New York Stock Exchange", + "mic": "XNYS", + "operating_mic": "XNYS", + "participant_id": "N", + "url": "https://www.nyse.com" + }, + { + "id": 11, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "NYSE Arca, Inc.", + "mic": "ARCX", + "operating_mic": "XNYS", + "participant_id": "P", + "url": "https://www.nyse.com/markets/nyse-arca" + }, + { + "id": 12, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Nasdaq", + "mic": "XNAS", + "operating_mic": "XNAS", + "participant_id": "T", + "url": "https://www.nasdaq.com" + }, + { + "id": 13, + "type": "SIP", + "asset_class": "stocks", + "locale": "us", + "name": "Consolidated Tape Association", + "operating_mic": "XNYS", + "participant_id": "S", + "url": "https://www.nyse.com/data/cta" + }, + { + "id": 14, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Long-Term Stock Exchange", + "mic": "LTSE", + "operating_mic": "LTSE", + "participant_id": "L", + "url": "https://www.ltse.com" + }, + { + "id": 15, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Investors Exchange", + "mic": "IEXG", + "operating_mic": "IEXG", + "participant_id": "V", + "url": "https://www.iextrading.com" + }, + { + "id": 16, + "type": "TRF", + "asset_class": "stocks", + "locale": "us", + "name": "Cboe Stock Exchange", + "mic": "CBSX", + "operating_mic": "XCBO", + "participant_id": "W", + "url": "https://www.cboe.com" + }, + { + "id": 17, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Nasdaq Philadelphia Exchange LLC", + "mic": "XPHL", + "operating_mic": "XNAS", + "participant_id": "X", + "url": "https://www.nasdaq.com/solutions/nasdaq-phlx" + }, + { + "id": 18, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Cboe BYX", + "mic": "BATY", + "operating_mic": "XCBO", + "participant_id": "Y", + "url": "https://www.cboe.com/us/equities" + }, + { + "id": 19, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Cboe BZX", + "mic": "BATS", + "operating_mic": "XCBO", + "participant_id": "Z", + "url": "https://www.cboe.com/us/equities" + }, + { + "id": 20, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "MIAX Pearl", + "mic": "EPRL", + "operating_mic": "MIHI", + "participant_id": "H", + "url": "https://www.miaxoptions.com/alerts/pearl-equities" + }, + { + "id": 21, + "type": "exchange", + "asset_class": "stocks", + "locale": "us", + "name": "Members Exchange", + "mic": "MEMX", + "operating_mic": "MEMX", + "participant_id": "U", + "url": "https://www.memx.com" + } + ], + "status": "OK", + "request_id": "c0109b8a70a931efe47cef085c7a7f5e", + "count": 24 +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/splits.json b/tests/mocks/v3/reference/splits.json new file mode 100644 index 00000000..3c60d759 --- /dev/null +++ b/tests/mocks/v3/reference/splits.json @@ -0,0 +1,66 @@ +{ + "results": [ + { + "execution_date": "2022-07-18", + "split_from": 1, + "split_to": 20, + "ticker": "GOOGL" + }, + { + "execution_date": "2022-07-18", + "split_from": 1, + "split_to": 20, + "ticker": "GOOG" + }, + { + "execution_date": "2022-07-01", + "split_from": 1, + "split_to": 3, + "ticker": "CTO" + }, + { + "execution_date": "2022-06-29", + "split_from": 1, + "split_to": 10, + "ticker": "SHOP" + }, + { + "execution_date": "2022-06-22", + "split_from": 1, + "split_to": 10, + "ticker": "SHOP" + }, + { + "execution_date": "2022-06-10", + "split_from": 1, + "split_to": 4, + "ticker": "DXCM" + }, + { + "execution_date": "2022-06-06", + "split_from": 1, + "split_to": 20, + "ticker": "AMZN" + }, + { + "execution_date": "2022-05-20", + "split_from": 2, + "split_to": 1, + "ticker": "BRW" + }, + { + "execution_date": "2022-05-16", + "split_from": 1, + "split_to": 2, + "ticker": "CM" + }, + { + "execution_date": "2022-05-02", + "split_from": 3, + "split_to": 4, + "ticker": "CIG.C" + } + ], + "status": "OK", + "request_id": "b52de486daf5491e6b9ebdf5e0bf65bc" +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/tickers.json b/tests/mocks/v3/reference/tickers.json new file mode 100644 index 00000000..0dd09f5c --- /dev/null +++ b/tests/mocks/v3/reference/tickers.json @@ -0,0 +1,36 @@ +{ + "results": [ + { + "ticker": "A", + "name": "Agilent Technologies Inc.", + "market": "stocks", + "locale": "us", + "primary_exchange": "XNYS", + "type": "CS", + "active": true, + "currency_name": "usd", + "cik": "0001090872", + "composite_figi": "BBG000C2V3D6", + "share_class_figi": "BBG001SCTQY4", + "last_updated_utc": "2022-04-27T00:00:00Z" + }, + { + "ticker": "AA", + "name": "Alcoa Corporation", + "market": "stocks", + "locale": "us", + "primary_exchange": "XNYS", + "type": "CS", + "active": true, + "currency_name": "usd", + "cik": "0001675149", + "composite_figi": "BBG00B3T3HD3", + "share_class_figi": "BBG00B3T3HF1", + "last_updated_utc": "2022-04-27T00:00:00Z" + } + ], + "status": "OK", + "request_id": "37089bb3b4ef99a796cdc82ff971e447", + "count": 2, + "next_url": "https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg" +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/tickers/AAPL.json b/tests/mocks/v3/reference/tickers/AAPL.json new file mode 100644 index 00000000..1bc153d5 --- /dev/null +++ b/tests/mocks/v3/reference/tickers/AAPL.json @@ -0,0 +1,34 @@ +{ + "ticker": "AAPL", + "name": "Apple Inc.", + "market": "stocks", + "locale": "us", + "primary_exchange": "XNAS", + "type": "CS", + "active": true, + "currency_name": "usd", + "cik": "0000320193", + "composite_figi": "BBG000B9XRY4", + "share_class_figi": "BBG001S5N8V8", + "market_cap": 2671492491700.0, + "phone_number": "(408) 996-1010", + "address": { + "address1": "ONE APPLE PARK WAY", + "city": "CUPERTINO", + "state": "CA", + "postal_code": "95014" + }, + "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.", + "sic_code": "3571", + "sic_description": "ELECTRONIC COMPUTERS", + "ticker_root": "AAPL", + "homepage_url": "https://www.apple.com", + "total_employees": 154000, + "list_date": "1980-12-12", + "branding": { + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png" + }, + "share_class_shares_outstanding": 16319440000, + "weighted_shares_outstanding": 16319441000 +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/tickers/types.json b/tests/mocks/v3/reference/tickers/types.json new file mode 100644 index 00000000..25fa9e04 --- /dev/null +++ b/tests/mocks/v3/reference/tickers/types.json @@ -0,0 +1,97 @@ +{ + "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 +} \ No newline at end of file diff --git a/tests/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json b/tests/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json new file mode 100644 index 00000000..0cad5983 --- /dev/null +++ b/tests/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json @@ -0,0 +1,34 @@ +{ + "results": [ + { + "ticker": "AAA", + "name": "AAF First Priority CLO Bond ETF", + "market": "stocks", + "locale": "us", + "primary_exchange": "ARCX", + "type": "ETF", + "active": true, + "currency_name": "usd", + "composite_figi": "BBG00X5FSP48", + "share_class_figi": "BBG00X5FSPZ4", + "last_updated_utc": "2022-04-27T00:00:00Z" + }, + { + "ticker": "AAAU", + "name": "Goldman Sachs Physical Gold ETF Shares", + "market": "stocks", + "locale": "us", + "primary_exchange": "BATS", + "type": "ETF", + "active": true, + "currency_name": "usd", + "cik": "0001708646", + "composite_figi": "BBG00LPXX872", + "share_class_figi": "BBG00LPXX8Z1", + "last_updated_utc": "2022-04-27T00:00:00Z" + } + ], + "status": "OK", + "request_id": "40d60d83fa0628503b4d13387b7bde2a", + "count": 2 +} \ No newline at end of file diff --git a/tests/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json b/tests/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json new file mode 100644 index 00000000..da4210f8 --- /dev/null +++ b/tests/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json @@ -0,0 +1,51 @@ +{ + "request_id": "104d9b901d0c9e81d284cb8b41c5cdd3", + "results": { + "break_even_price": 179.075, + "day": { + "change": -2.3999999999999986, + "change_percent": -7.643312101910824, + "close": 29, + "high": 32.25, + "last_updated": 1651204800000000000, + "low": 29, + "open": 29.99, + "previous_close": 31.4, + "volume": 8, + "vwap": 30.7738 + }, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2023-06-16", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:AAPL230616C00150000" + }, + "greeks": { + "delta": 0.6436614934293701, + "gamma": 0.0061735291012820675, + "theta": -0.028227189324641973, + "vega": 0.6381159723175714 + }, + "implied_volatility": 0.3570277203465058, + "last_quote": { + "ask": 29.25, + "ask_size": 209, + "bid": 28.9, + "bid_size": 294, + "last_updated": 1651254260800059648, + "midpoint": 29.075, + "timeframe": "REAL-TIME" + }, + "open_interest": 8133, + "underlying_asset": { + "change_to_break_even": 19.11439999999999, + "last_updated": 1651254263172073152, + "price": 159.9606, + "ticker": "AAPL", + "timeframe": "REAL-TIME" + } + }, + "status": "OK" +} \ No newline at end of file diff --git a/tests/mocks/v3/trades/AAPL?limit=2.json b/tests/mocks/v3/trades/AAPL?limit=2.json new file mode 100644 index 00000000..1ce58194 --- /dev/null +++ b/tests/mocks/v3/trades/AAPL?limit=2.json @@ -0,0 +1,40 @@ +{ + "results": [ + { + "conditions": [ + 12, + 37 + ], + "correction": 1, + "exchange": 11, + "id": "183276", + "participant_timestamp": 1651181822461636600, + "price": 156.43, + "sequence_number": 7179341, + "sip_timestamp": 1651181822461979400, + "size": 10, + "tape": 3, + "trf_id": 3, + "trf_timestamp": 1651181557090806500 + }, + { + "conditions": [ + 12, + 37 + ], + "correction": 1, + "exchange": 12, + "id": "183276", + "participant_timestamp": 1651181822461636600, + "price": 157.43, + "sequence_number": 7179341, + "sip_timestamp": 1651181822461979400, + "size": 10, + "tape": 3, + "trf_id": 3, + "trf_timestamp": 1651181557090806500 + } + ], + "status": "OK", + "request_id": "756f9910624b35a47eb07f21a7a373bb" +} \ No newline at end of file diff --git a/tests/test_aggs.py b/tests/test_aggs.py index 5e651786..f5e0edb8 100644 --- a/tests/test_aggs.py +++ b/tests/test_aggs.py @@ -1,4 +1,4 @@ -from mocks import BaseTest +from base import BaseTest from polygon.rest.models import ( Agg, GroupedDailyAgg, diff --git a/tests/test_conditions.py b/tests/test_conditions.py index 0e1b2fb1..b62b8236 100644 --- a/tests/test_conditions.py +++ b/tests/test_conditions.py @@ -1,5 +1,5 @@ from polygon.rest.models import Condition -from mocks import BaseTest +from base import BaseTest class ConditionsTest(BaseTest): diff --git a/tests/test_dividends.py b/tests/test_dividends.py index 925f1f2f..3c422425 100644 --- a/tests/test_dividends.py +++ b/tests/test_dividends.py @@ -1,5 +1,5 @@ from polygon.rest.models import Dividend -from mocks import BaseTest +from base import BaseTest class DividendsTest(BaseTest): diff --git a/tests/test_exchanges.py b/tests/test_exchanges.py index 13157437..ab51cd58 100644 --- a/tests/test_exchanges.py +++ b/tests/test_exchanges.py @@ -1,5 +1,5 @@ from polygon.rest.models import Exchange -from mocks import BaseTest +from base import BaseTest class ExchangesTest(BaseTest): diff --git a/tests/test_markets.py b/tests/test_markets.py index 5076babc..61fa4dba 100644 --- a/tests/test_markets.py +++ b/tests/test_markets.py @@ -1,6 +1,5 @@ -from polygon import RESTClient from polygon.rest.models import MarketHoliday, MarketStatus -from mocks import BaseTest +from base import BaseTest class MarketsTest(BaseTest): diff --git a/tests/test_snapshots.py b/tests/test_snapshots.py index 5de72195..3e9729db 100644 --- a/tests/test_snapshots.py +++ b/tests/test_snapshots.py @@ -1,5 +1,5 @@ from polygon.rest.models import Snapshot, OptionContractSnapshot, SnapshotTickerFullBook -from mocks import BaseTest +from base import BaseTest class SnapshotsTest(BaseTest): diff --git a/tests/test_splits.py b/tests/test_splits.py index 83b8f184..4635e45e 100644 --- a/tests/test_splits.py +++ b/tests/test_splits.py @@ -1,5 +1,5 @@ from polygon.rest.models import Split -from mocks import BaseTest +from base import BaseTest class SplitsTest(BaseTest): diff --git a/tests/test_tickers.py b/tests/test_tickers.py index 58d60adc..18b9c733 100644 --- a/tests/test_tickers.py +++ b/tests/test_tickers.py @@ -4,7 +4,7 @@ TickerNews, TickerTypes, ) -from mocks import BaseTest +from base import BaseTest class TickersTest(BaseTest): diff --git a/tests/test_trades.py b/tests/test_trades.py index 3c7e9bbb..91f5ba66 100644 --- a/tests/test_trades.py +++ b/tests/test_trades.py @@ -1,8 +1,7 @@ -from mocks import BaseTest +from base import BaseTest from polygon.rest.models import ( Trade, LastTrade, - Last, LastTradeCrypto, ) From 5f25dabac07723dad16dfb70de1d731f56397858 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 2 May 2022 12:03:36 -0400 Subject: [PATCH 043/448] fix non-list return types (#148) --- polygon/rest/aggs.py | 2 +- polygon/rest/base.py | 10 +- polygon/rest/models/trades.py | 17 --- polygon/rest/trades.py | 7 +- tests/test_aggs.py | 27 ++--- tests/test_markets.py | 26 ++-- tests/test_snapshots.py | 216 +++++++++++++++++----------------- tests/test_tickers.py | 72 ++++++------ tests/test_trades.py | 56 ++++----- 9 files changed, 198 insertions(+), 235 deletions(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index da77d97e..26ef7153 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -56,7 +56,7 @@ def get_grouped_daily_aggs( adjusted: Optional[bool] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[List[GroupedDailyAgg], HTTPResponse]: + ) -> Union[GroupedDailyAgg, HTTPResponse]: """ Get the daily open, high, low, and close (OHLC) for the entire market. diff --git a/polygon/rest/base.py b/polygon/rest/base.py index f719a8e9..ac970d3c 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -72,13 +72,11 @@ def _get( if result_key: obj = obj[result_key] - # If obj is not yet a list, need to turn it into a list - # This is for the Daily Open/Close and Last Trade endpoints - if type(obj) != list: - obj = [obj] - if deserializer: - obj = [deserializer(o) for o in obj] + if type(obj) == list: + obj = [deserializer(o) for o in obj] + else: + obj = deserializer(obj) return obj diff --git a/polygon/rest/models/trades.py b/polygon/rest/models/trades.py index e14cfa0b..0ff3195e 100644 --- a/polygon/rest/models/trades.py +++ b/polygon/rest/models/trades.py @@ -69,20 +69,3 @@ class Last: @staticmethod def from_dict(d): return Last(**d) - - -@dataclass -class LastTradeCrypto: - last: Last - ticker: str - status: str - request_id: str - - @staticmethod - def from_dict(d): - return LastTradeCrypto( - d.get("last", None), - d.get("symbol", None), - d.get("status", None), - d.get("request_id", None), - ) diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 89dd24eb..b02e2f1e 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -1,6 +1,6 @@ from .base import BaseClient from typing import Optional, Any, Dict, Union, Iterator -from .models import Trade, LastTrade, LastTradeCrypto, Sort, Order +from .models import Trade, LastTrade, Last, Sort, Order from urllib3 import HTTPResponse from datetime import datetime, date @@ -75,7 +75,7 @@ def get_last_trade_crypto( to: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[LastTrade, HTTPResponse]: + ) -> Union[Last, HTTPResponse]: """ Get the most recent trade for a ticker. @@ -89,6 +89,7 @@ def get_last_trade_crypto( return self._get( path=url, params=self._get_params(self.get_last_trade_crypto, locals()), - deserializer=LastTradeCrypto.from_dict, + result_key="last", + deserializer=Last.from_dict, raw=raw, ) diff --git a/tests/test_aggs.py b/tests/test_aggs.py index f5e0edb8..08706c53 100644 --- a/tests/test_aggs.py +++ b/tests/test_aggs.py @@ -53,20 +53,19 @@ def test_get_grouped_daily_aggs(self): def test_get_daily_open_close_agg(self): aggs = self.c.get_daily_open_close_agg("AAPL", "2005-04-01", True) - expected = [ - DailyOpenCloseAgg( - after_hours=123, - close=123, - from_="2021-04-01", - high=124.18, - low=122.49, - open=123.66, - pre_market=123.45, - status="OK", - symbol="AAPL", - volume=75089134, - ) - ] + expected = DailyOpenCloseAgg( + after_hours=123, + close=123, + from_="2021-04-01", + high=124.18, + low=122.49, + open=123.66, + pre_market=123.45, + status="OK", + symbol="AAPL", + volume=75089134, + ) + self.assertEqual(aggs, expected) def test_get_previous_close_agg(self): diff --git a/tests/test_markets.py b/tests/test_markets.py index 61fa4dba..c0654747 100644 --- a/tests/test_markets.py +++ b/tests/test_markets.py @@ -123,18 +123,16 @@ def test_get_market_holidays(self): 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", - ) - ] + 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) diff --git a/tests/test_snapshots.py b/tests/test_snapshots.py index 3e9729db..ba97b1a9 100644 --- a/tests/test_snapshots.py +++ b/tests/test_snapshots.py @@ -155,123 +155,117 @@ def test_get_snapshot_direction(self): def test_get_snapshot_ticker(self): snapshots = self.c.get_snapshot_ticker("AAPL") - expected = [ - Snapshot( - day={ - "c": 160.315, - "h": 166.2, - "l": 159.8, - "o": 161.84, - "v": 68840127, - "vw": 162.7124, - }, - last_quote={ - "P": 159.99, - "S": 5, - "p": 159.98, - "s": 3, - "t": 1651251948407646487, - }, - last_trade={ - "c": None, - "i": "121351", - "p": 159.99, - "s": 200, - "t": 1651251948294080343, - "x": 12, - }, - min={ - "av": 68834255, - "c": 160.3, - "h": 160.71, - "l": 160.3, - "o": 160.71, - "v": 197226, - "vw": 160.5259, - }, - prev_day={ - "c": 163.64, - "h": 164.515, - "l": 158.93, - "o": 159.25, - "v": 130149192, - "vw": 161.8622, - }, - ticker="AAPL", - todays_change=-3.65, - todays_change_percent=None, - updated=1651251948294080343, - ) - ] + expected = Snapshot( + day={ + "c": 160.315, + "h": 166.2, + "l": 159.8, + "o": 161.84, + "v": 68840127, + "vw": 162.7124, + }, + last_quote={ + "P": 159.99, + "S": 5, + "p": 159.98, + "s": 3, + "t": 1651251948407646487, + }, + last_trade={ + "c": None, + "i": "121351", + "p": 159.99, + "s": 200, + "t": 1651251948294080343, + "x": 12, + }, + min={ + "av": 68834255, + "c": 160.3, + "h": 160.71, + "l": 160.3, + "o": 160.71, + "v": 197226, + "vw": 160.5259, + }, + prev_day={ + "c": 163.64, + "h": 164.515, + "l": 158.93, + "o": 159.25, + "v": 130149192, + "vw": 161.8622, + }, + ticker="AAPL", + todays_change=-3.65, + todays_change_percent=None, + updated=1651251948294080343, + ) self.assertEqual(snapshots, expected) def test_get_snapshot_option(self): snapshots = self.c.get_snapshot_option("AAPL", "O:AAPL230616C00150000") - expected = [ - OptionContractSnapshot( - break_even_price=179.075, - day={ - "change": -2.3999999999999986, - "change_percent": -7.643312101910824, - "close": 29, - "high": 32.25, - "last_updated": 1651204800000000000, - "low": 29, - "open": 29.99, - "previous_close": 31.4, - "volume": 8, - "vwap": 30.7738, - }, - details={ - "contract_type": "call", - "exercise_style": "american", - "expiration_date": "2023-06-16", - "shares_per_contract": 100, - "strike_price": 150, - "ticker": "O:AAPL230616C00150000", - }, - greeks={ - "delta": 0.6436614934293701, - "gamma": 0.0061735291012820675, - "theta": -0.028227189324641973, - "vega": 0.6381159723175714, - }, - implied_volatility=0.3570277203465058, - last_quote={ - "ask": 29.25, - "ask_size": 209, - "bid": 28.9, - "bid_size": 294, - "last_updated": 1651254260800059648, - "midpoint": 29.075, - "timeframe": "REAL-TIME", - }, - open_interest=8133, - underlying_asset={ - "change_to_break_even": 19.11439999999999, - "last_updated": 1651254263172073152, - "price": 159.9606, - "ticker": "AAPL", - "timeframe": "REAL-TIME", - }, - ) - ] + expected = OptionContractSnapshot( + break_even_price=179.075, + day={ + "change": -2.3999999999999986, + "change_percent": -7.643312101910824, + "close": 29, + "high": 32.25, + "last_updated": 1651204800000000000, + "low": 29, + "open": 29.99, + "previous_close": 31.4, + "volume": 8, + "vwap": 30.7738, + }, + details={ + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2023-06-16", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:AAPL230616C00150000", + }, + greeks={ + "delta": 0.6436614934293701, + "gamma": 0.0061735291012820675, + "theta": -0.028227189324641973, + "vega": 0.6381159723175714, + }, + implied_volatility=0.3570277203465058, + last_quote={ + "ask": 29.25, + "ask_size": 209, + "bid": 28.9, + "bid_size": 294, + "last_updated": 1651254260800059648, + "midpoint": 29.075, + "timeframe": "REAL-TIME", + }, + open_interest=8133, + underlying_asset={ + "change_to_break_even": 19.11439999999999, + "last_updated": 1651254263172073152, + "price": 159.9606, + "ticker": "AAPL", + "timeframe": "REAL-TIME", + }, + ) self.assertEqual(snapshots, expected) def test_get_snapshot_crypto_book(self): snapshots = self.c.get_snapshot_crypto_book("X:BTCUSD") - expected = [ - SnapshotTickerFullBook( - ticker="X:BTCUSD", - bids=[ - {"p": 16303.17, "x": {"1": 2}}, - {"p": 16302.94, "x": {"1": 0.02859424, "6": 0.023455}}, - ], - asks=[{"p": 11454, "x": {"2": 1}}, {"p": 11455, "x": {"2": 1}}], - bid_count=694.951789670001, - ask_count=593.1412981600005, - spread=-4849.17, - updated=1605295074162, - ) - ] + expected = SnapshotTickerFullBook( + ticker="X:BTCUSD", + bids=[ + {"p": 16303.17, "x": {"1": 2}}, + {"p": 16302.94, "x": {"1": 0.02859424, "6": 0.023455}}, + ], + asks=[{"p": 11454, "x": {"2": 1}}, {"p": 11455, "x": {"2": 1}}], + bid_count=694.951789670001, + ask_count=593.1412981600005, + spread=-4849.17, + updated=1605295074162, + ) self.assertEqual(snapshots, expected) diff --git a/tests/test_tickers.py b/tests/test_tickers.py index 18b9c733..6af121c4 100644 --- a/tests/test_tickers.py +++ b/tests/test_tickers.py @@ -88,43 +88,41 @@ def test_list_tickers(self): def test_get_ticker_details(self): details = self.c.get_ticker_details("AAPL") - expected = [ - TickerDetails( - active=True, - address={ - "address1": "ONE APPLE PARK WAY", - "city": "CUPERTINO", - "state": "CA", - "postal_code": "95014", - }, - branding={ - "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", - "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png", - }, - cik="0000320193", - composite_figi="BBG000B9XRY4", - currency_name="usd", - delisted_utc=None, - description="Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.", - ticker_root="AAPL", - homepage_url="https://www.apple.com", - list_date="1980-12-12", - locale="us", - market="stocks", - market_cap=2671492491700.0, - name="Apple Inc.", - phone_number="(408) 996-1010", - primary_exchange="XNAS", - share_class_figi="BBG001S5N8V8", - share_class_shares_outstanding=16319440000, - sic_code="3571", - sic_description="ELECTRONIC COMPUTERS", - ticker="AAPL", - total_employees=154000, - type="CS", - weighted_shares_outstanding=16319441000, - ) - ] + expected = TickerDetails( + active=True, + address={ + "address1": "ONE APPLE PARK WAY", + "city": "CUPERTINO", + "state": "CA", + "postal_code": "95014", + }, + branding={ + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png", + }, + cik="0000320193", + composite_figi="BBG000B9XRY4", + currency_name="usd", + delisted_utc=None, + description="Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.", + ticker_root="AAPL", + homepage_url="https://www.apple.com", + list_date="1980-12-12", + locale="us", + market="stocks", + market_cap=2671492491700.0, + name="Apple Inc.", + phone_number="(408) 996-1010", + primary_exchange="XNAS", + share_class_figi="BBG001S5N8V8", + share_class_shares_outstanding=16319440000, + sic_code="3571", + sic_description="ELECTRONIC COMPUTERS", + ticker="AAPL", + total_employees=154000, + type="CS", + weighted_shares_outstanding=16319441000, + ) self.assertEqual(details, expected) def test_list_ticker_news(self): diff --git a/tests/test_trades.py b/tests/test_trades.py index 91f5ba66..7ea38e60 100644 --- a/tests/test_trades.py +++ b/tests/test_trades.py @@ -2,48 +2,40 @@ from polygon.rest.models import ( Trade, LastTrade, - LastTradeCrypto, + Last, ) class TradesTest(BaseTest): def test_get_last_trade(self): last_trade = self.c.get_last_trade("AAPL") - expected = [ - LastTrade( - ticker="AAPL", - trf_timestamp=1651179319310588400, - sequence_number=7084210, - sip_timestamp=1651179319310617300, - participant_timestamp=1651179319308000000, - conditions=[12, 37], - correction=None, - id="237688", - price=166.25, - trf_id=202, - size=2, - exchange=4, - tape=3, - ) - ] + expected = LastTrade( + ticker="AAPL", + trf_timestamp=1651179319310588400, + sequence_number=7084210, + sip_timestamp=1651179319310617300, + participant_timestamp=1651179319308000000, + conditions=[12, 37], + correction=None, + id="237688", + price=166.25, + trf_id=202, + size=2, + exchange=4, + tape=3, + ) + self.assertEqual(last_trade, expected) def test_get_last_trade_crypto(self): last_trade_crypto = self.c.get_last_trade_crypto("BTC", "USD") - expected = [ - LastTradeCrypto( - last={ - "conditions": [2], - "exchange": 2, - "price": 39976.89682331, - "size": 0.005, - "timestamp": 1651180409688, - }, - ticker="BTC-USD", - status="success", - request_id="d67c9bfe1fa0c29db9177d78b3ab713c", - ) - ] + expected = Last( + conditions=[2], + exchange=2, + price=39976.89682331, + size=0.005, + timestamp=1651180409688, + ) self.assertEqual(last_trade_crypto, expected) def test_trades(self): From c67465fe695e71f9a02a73bec6eb78d8d8b56b03 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 2 May 2022 13:33:02 -0400 Subject: [PATCH 044/448] setup releasing on pushing a tag (#149) --- .github/workflows/release.yml | 31 +++++++++++++++++++++++++++++++ poetry.lock | 20 ++++++++++---------- pyproject.toml | 13 ++++++++++--- 3 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..2ef1fd27 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: release +on: + push: + tags: + - v* + branches: + - master +permissions: + contents: read +jobs: + test: + runs-on: ubuntu-latest + name: Release to PyPi + steps: + - uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v3 + with: + python-version: 3.10 + - name: Setup Poetry + uses: abatilo/actions-poetry@v2.0.0 + with: + poetry-version: 1.2.0b1 + - name: Setup release plugin + run: poetry plugin add poetry-dynamic-versioning-plugin + - name: Install pypi deps + run: poetry install + - name: Build + run: poetry build + - name: Publish to PyPi + run: poetry publish diff --git a/poetry.lock b/poetry.lock index 6c2f429a..def50ffe 100644 --- a/poetry.lock +++ b/poetry.lock @@ -61,7 +61,7 @@ unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "8.1.2" +version = "8.1.3" description = "Composable command line interface toolkit" category = "dev" optional = false @@ -130,7 +130,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [[package]] name = "jinja2" -version = "3.1.1" +version = "3.1.2" description = "A very fast and expressive template engine." category = "dev" optional = false @@ -412,7 +412,7 @@ python-versions = ">=3.6" [[package]] name = "types-urllib3" -version = "1.26.13" +version = "1.26.14" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -454,7 +454,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "8ea6c39c95fde83519380774c4bff55aacb6249c9a0b61437fadd4946cb2aaef" +content-hash = "956071dc59d375c7724b3056feda9d5725eaa5460e182eb2696e62ad2f65c9d0" [metadata.files] alabaster = [ @@ -499,8 +499,8 @@ charset-normalizer = [ {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ - {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"}, - {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"}, + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, @@ -526,8 +526,8 @@ importlib-metadata = [ {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, ] jinja2 = [ - {file = "Jinja2-3.1.1-py3-none-any.whl", hash = "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119"}, - {file = "Jinja2-3.1.1.tar.gz", hash = "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9"}, + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] markupsafe = [ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, @@ -699,8 +699,8 @@ typed-ast = [ {file = "typed_ast-1.5.3.tar.gz", hash = "sha256:27f25232e2dd0edfe1f019d6bfaaf11e86e657d9bdb7b0956db95f560cceb2b3"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.13.tar.gz", hash = "sha256:40f8fb5e8cd7d57e8aefdee3fdd5e930aa1a1bb4179cdadd55226cea588af790"}, - {file = "types_urllib3-1.26.13-py3-none-any.whl", hash = "sha256:ff7500641824f881b2c7bde4cc57e6c3abf03d1e005bae83aca752e77213a5da"}, + {file = "types-urllib3-1.26.14.tar.gz", hash = "sha256:2a2578e4b36341ccd240b00fccda9826988ff0589a44ba4a664bbd69ef348d27"}, + {file = "types_urllib3-1.26.14-py3-none-any.whl", hash = "sha256:5d2388aa76395b1e3999ff789ea5b3283677dad8e9bcf3d9117ba19271fd35d9"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, diff --git a/pyproject.toml b/pyproject.toml index 65236816..c07173d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "polygon-api-client" -version = "1.0.0.beta1" +version = "0.0.0" description = "Official Polygon.io REST and Websocket client." authors = ["polygon.io"] license = "MIT" @@ -38,5 +38,12 @@ sphinx-rtd-theme = "^1.0.0" sphinx-autodoc-typehints = "^1.18.1" [build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +# so releasing doesn't have to touch the "version" in this file +# we have to use a beta release of poetry and this plugin: +# https://pypi.org/project/poetry-dynamic-versioning-plugin/ +requires = ["poetry>=1.2.0b1", "poetry-dynamic-versioning-plugin"] +build-backend = "poetry.masonry.api" + +[tool.poetry-dynamic-versioning] +enable = true +style = "semver" From 1c7c4fe87901de6e20648bcd7ee392351e5ac423 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 2 May 2022 13:34:13 -0400 Subject: [PATCH 045/448] fix releasing (1) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2ef1fd27..67f1953d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v3 with: - python-version: 3.10 + python-version: "3.10" - name: Setup Poetry uses: abatilo/actions-poetry@v2.0.0 with: From 3636dc955c89fb92cd687e23659a89913d6a9d9c Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 2 May 2022 13:41:33 -0400 Subject: [PATCH 046/448] fix releasing (2) --- .github/workflows/release.yml | 8 +++----- pyproject.toml | 11 ++--------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 67f1953d..1b2cd9e6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,13 +19,11 @@ jobs: python-version: "3.10" - name: Setup Poetry uses: abatilo/actions-poetry@v2.0.0 - with: - poetry-version: 1.2.0b1 - - name: Setup release plugin - run: poetry plugin add poetry-dynamic-versioning-plugin - name: Install pypi deps run: poetry install + - name: Version + run: poetry version ${{ github.event.release.tag_name }} - name: Build run: poetry build - name: Publish to PyPi - run: poetry publish + run: poetry publish --dry-run diff --git a/pyproject.toml b/pyproject.toml index c07173d9..8a8981d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,12 +38,5 @@ sphinx-rtd-theme = "^1.0.0" sphinx-autodoc-typehints = "^1.18.1" [build-system] -# so releasing doesn't have to touch the "version" in this file -# we have to use a beta release of poetry and this plugin: -# https://pypi.org/project/poetry-dynamic-versioning-plugin/ -requires = ["poetry>=1.2.0b1", "poetry-dynamic-versioning-plugin"] -build-backend = "poetry.masonry.api" - -[tool.poetry-dynamic-versioning] -enable = true -style = "semver" +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" From 6e2d5a9e36533443b6936053cc022757dec0cf7d Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 2 May 2022 13:45:27 -0400 Subject: [PATCH 047/448] fix releasing (3) --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b2cd9e6..2358401f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,8 +3,6 @@ on: push: tags: - v* - branches: - - master permissions: contents: read jobs: @@ -21,9 +19,11 @@ jobs: uses: abatilo/actions-poetry@v2.0.0 - name: Install pypi deps run: poetry install - - name: Version + - name: Version according to tag run: poetry version ${{ github.event.release.tag_name }} - name: Build run: poetry build + - name: Poetry publish config + run: poetry config pypi-token.pypi $POETRY_HTTP_BASIC_PYPI_PASSWORD - name: Publish to PyPi run: poetry publish --dry-run From 6d4c15f20cde3a52dbd9a56fda3dabe5264156b5 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 2 May 2022 13:51:39 -0400 Subject: [PATCH 048/448] fix releasing (4) --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2358401f..ae7618b7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,8 @@ jobs: python-version: "3.10" - name: Setup Poetry uses: abatilo/actions-poetry@v2.0.0 + with: + poetry-version: "1.1.13" - name: Install pypi deps run: poetry install - name: Version according to tag From e77432ff695a65dc4b07e61f6d259679a08c3db6 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 2 May 2022 13:54:50 -0400 Subject: [PATCH 049/448] fix releasing (5) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae7618b7..3b3ed067 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,6 +26,6 @@ jobs: - name: Build run: poetry build - name: Poetry publish config - run: poetry config pypi-token.pypi $POETRY_HTTP_BASIC_PYPI_PASSWORD + run: poetry config pypi-token.pypi ${{ secrets.POETRY_HTTP_BASIC_PYPI_PASSWORD }} - name: Publish to PyPi run: poetry publish --dry-run From 96b83c71fc247bc8d694f8fd8ee1f6c7745dc8cf Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 2 May 2022 13:57:40 -0400 Subject: [PATCH 050/448] fix releasing (6) --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3b3ed067..6e8759ee 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,13 +19,13 @@ jobs: uses: abatilo/actions-poetry@v2.0.0 with: poetry-version: "1.1.13" + - name: Configure Poetry + run: poetry config pypi-token.pypi ${{ secrets.POETRY_HTTP_BASIC_PYPI_PASSWORD }} - name: Install pypi deps run: poetry install - name: Version according to tag - run: poetry version ${{ github.event.release.tag_name }} + run: poetry version $(git describe --tags --abrev=0) - name: Build run: poetry build - - name: Poetry publish config - run: poetry config pypi-token.pypi ${{ secrets.POETRY_HTTP_BASIC_PYPI_PASSWORD }} - name: Publish to PyPi - run: poetry publish --dry-run + run: poetry publish From d757c3394d03e1498cd55c50d57e55e39c9c509d Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Mon, 2 May 2022 16:58:48 -0400 Subject: [PATCH 051/448] Add Models to Docs (#146) --- docs/source/Models.rst | 197 +++++++++++++++ docs/source/Trades.rst | 18 +- docs/source/index.rst | 1 + polygon/rest/models/aggs.py | 74 +++--- polygon/rest/models/conditions.py | 45 +++- polygon/rest/models/markets.py | 34 ++- polygon/rest/models/snapshot.py | 81 ++++-- polygon/rest/models/tickers.py | 64 ++++- polygon/rest/models/trades.py | 42 ++-- polygon/rest/trades.py | 10 +- tests/base.py | 3 +- tests/test_conditions.py | 328 +++++++++++++++---------- tests/test_markets.py | 25 +- tests/test_snapshots.py | 395 ++++++++++++++---------------- tests/test_tickers.py | 41 ++-- tests/test_trades.py | 8 +- 16 files changed, 888 insertions(+), 478 deletions(-) create mode 100644 docs/source/Models.rst diff --git a/docs/source/Models.rst b/docs/source/Models.rst new file mode 100644 index 00000000..c003b4c9 --- /dev/null +++ b/docs/source/Models.rst @@ -0,0 +1,197 @@ +.. _models_header: + +Models +============================================================== + +============================================================== +Agg +============================================================== +.. autoclass:: polygon.rest.models.Agg + +============================================================== +Grouped Daily Agg +============================================================== +.. autoclass:: polygon.rest.models.GroupedDailyAgg + +============================================================== +Daily Open Close Agg +============================================================== +.. autoclass:: polygon.rest.models.DailyOpenCloseAgg + +============================================================== +Previous Close Agg +============================================================== +.. autoclass:: polygon.rest.models.PreviousCloseAgg + +============================================================== +Trade +============================================================== +.. autoclass:: polygon.rest.models.Trade + +============================================================== +Last Trade +============================================================== +.. autoclass:: polygon.rest.models.LastTrade + +============================================================== +Crypto Trade +============================================================== +.. autoclass:: polygon.rest.models.CryptoTrade + +============================================================== +Quote +============================================================== +.. autoclass:: polygon.rest.models.Quote + +============================================================== +Last Quote +============================================================== +.. autoclass:: polygon.rest.models.LastQuote + +============================================================== +Snapshot Min +============================================================== +.. autoclass:: polygon.rest.models.SnapshotMin + +============================================================== +Snapshot +============================================================== +.. autoclass:: polygon.rest.models.Snapshot + +============================================================== +Day Option Contract Snapshot +============================================================== +.. autoclass:: polygon.rest.models.DayOptionContractSnapshot + +============================================================== +Option Details +============================================================== +.. autoclass:: polygon.rest.models.OptionDetails + +============================================================== +Option Last Quote +============================================================== +.. autoclass:: polygon.rest.models.OptionLastQuote + +============================================================== +Option Greeks +============================================================== +.. autoclass:: polygon.rest.models.OptionGreeks + +============================================================== +Underlying Asset +============================================================== +.. autoclass:: polygon.rest.models.UnderlyingAsset + +============================================================== +Option Contract Snapshot +============================================================== +.. autoclass:: polygon.rest.models.OptionContractSnapshot + +============================================================== +Order Book Quote +============================================================== +.. autoclass:: polygon.rest.models.OrderBookQuote + +============================================================== +Snapshot Ticker Full Book +============================================================== +.. autoclass:: polygon.rest.models.SnapshotTickerFullBook + +============================================================== +Ticker +============================================================== +.. autoclass:: polygon.rest.models.Ticker + +============================================================== +Address +============================================================== +.. autoclass:: polygon.rest.models.Address + +============================================================== +Branding +============================================================== +.. autoclass:: polygon.rest.models.Branding + +============================================================== +Publisher +============================================================== +.. autoclass:: polygon.rest.models.Publisher + +============================================================== +Ticker Details +============================================================== +.. autoclass:: polygon.rest.models.TickerDetails + +============================================================== +Ticker News +============================================================== +.. autoclass:: polygon.rest.models.TickerNews + +============================================================== +Ticker Types +============================================================== +.. autoclass:: polygon.rest.models.TickerTypes + +============================================================== +Market Holiday +============================================================== +.. autoclass:: polygon.rest.models.MarketHoliday + +============================================================== +Market Currencies +============================================================== +.. autoclass:: polygon.rest.models.MarketCurrencies + +============================================================== +Market Exchanges +============================================================== +.. autoclass:: polygon.rest.models.MarketExchanges + +============================================================== +Market Status +============================================================== +.. autoclass:: polygon.rest.models.MarketStatus + +============================================================== +Split +============================================================== +.. autoclass:: polygon.rest.models.Split + +============================================================== +Dividend +============================================================== +.. autoclass:: polygon.rest.models.Dividend + +============================================================== +Sip Mapping +============================================================== +.. autoclass:: polygon.rest.models.SipMapping + +============================================================== +Consolidated +============================================================== +.. autoclass:: polygon.rest.models.Consolidated + +============================================================== +Market Center +============================================================== +.. autoclass:: polygon.rest.models.MarketCenter + +============================================================== +Update Rules +============================================================== +.. autoclass:: polygon.rest.models.UpdateRules + +============================================================== +Condition +============================================================== +.. autoclass:: polygon.rest.models.Condition + +============================================================== +Exchange +============================================================== +.. autoclass:: polygon.rest.models.Exchange + + + diff --git a/docs/source/Trades.rst b/docs/source/Trades.rst index fc3d9d96..c7f1aacb 100644 --- a/docs/source/Trades.rst +++ b/docs/source/Trades.rst @@ -1,19 +1,19 @@ .. _trades_header: Trades -============= +================================================================== -=========== +================================================================== List trades -=========== +================================================================== .. automethod:: polygon.RESTClient.list_trades -=========== +================================================================== Get last trade -=========== +================================================================== .. automethod:: polygon.RESTClient.get_last_trade -=========== -Get last trade (crypto) -=========== -.. automethod:: polygon.RESTClient.get_last_trade_crypto +================================================================== +Get last crypto trade +================================================================== +.. automethod:: polygon.RESTClient.get_last_crypto_trade \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index fbcb3e3d..da924f16 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,6 +13,7 @@ This documentation is for the Python client only. For details about the response Quotes Reference Trades + Models Indices and tables diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index 892ab197..b14d4969 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -4,14 +4,15 @@ @dataclass class Agg: - open: Optional[float] - high: Optional[float] - low: Optional[float] - close: Optional[float] - volume: Optional[float] - vwap: Optional[float] - timestamp: Optional[int] - transactions: Optional[int] + "Contains aggregate data for a given ticker symbol over a given date range in a custom time window size." + open: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + close: Optional[float] = None + volume: Optional[float] = None + vwap: Optional[float] = None + timestamp: Optional[int] = None + transactions: Optional[int] = None @staticmethod def from_dict(d): @@ -29,15 +30,16 @@ def from_dict(d): @dataclass class GroupedDailyAgg: - ticker: str - open: float - high: float - low: float - close: float - volume: float - vwap: Optional[float] - timestamp: Optional[int] - transactions: Optional[int] + "Contains daily open, high, low, and close (OHLC) data for a given date." + ticker: Optional[str] = None + open: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + close: Optional[float] = None + volume: Optional[float] = None + vwap: Optional[float] = None + timestamp: Optional[int] = None + transactions: Optional[int] = None @staticmethod def from_dict(d): @@ -56,16 +58,17 @@ def from_dict(d): @dataclass class DailyOpenCloseAgg: - after_hours: Optional[float] - close: float - from_: str - high: float - low: float - open: float - pre_market: Optional[float] - status: Optional[str] - symbol: str - volume: float + "Contains data for open, close and afterhours prices of a ticker symbol on a specified date." + after_hours: Optional[float] = None + close: Optional[float] = None + from_: Optional[str] = None + high: Optional[float] = None + low: Optional[float] = None + open: Optional[float] = None + pre_market: Optional[float] = None + status: Optional[str] = None + symbol: Optional[str] = None + volume: Optional[float] = None @staticmethod def from_dict(d): @@ -85,14 +88,15 @@ def from_dict(d): @dataclass class PreviousCloseAgg: - ticker: str - close: float - high: float - low: float - open: float - timestamp: Optional[float] - volume: float - vwap: Optional[float] + "Contains data for the previous day's open, high, low, and close (OHLC) of the specified stock ticker." + ticker: Optional[str] = None + close: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + open: Optional[float] = None + timestamp: Optional[float] = None + volume: Optional[float] = None + vwap: Optional[float] = None @staticmethod def from_dict(d): diff --git a/polygon/rest/models/conditions.py b/polygon/rest/models/conditions.py index 81949353..d1cb2801 100644 --- a/polygon/rest/models/conditions.py +++ b/polygon/rest/models/conditions.py @@ -5,30 +5,57 @@ @dataclass class SipMapping: + "Contains data for a mapping to a symbol for each SIP that has a given condition." CTA: Optional[str] = None OPRA: Optional[str] = None UTP: Optional[str] = None + @staticmethod + def from_dict(d): + return SipMapping(**d) + @dataclass class Consolidated: + "Contains data for aggregation rules on a consolidated (all exchanges) basis." updates_high_low: Optional[bool] = None updates_open_close: Optional[bool] = None updates_volume: Optional[bool] = None + @staticmethod + def from_dict(d): + return Consolidated(**d) + @dataclass class MarketCenter: + "Contains data for aggregation rules on a per-market-center basis." updates_high_low: Optional[bool] = None updates_open_close: Optional[bool] = None updates_volume: Optional[bool] = None + @staticmethod + def from_dict(d): + return MarketCenter(**d) + @dataclass class UpdateRules: + "Contains data for a list of aggregation rules." consolidated: Optional[Consolidated] = None market_center: Optional[MarketCenter] = None + @staticmethod + def from_dict(d): + return UpdateRules( + consolidated=None + if "consolidated" not in d + else [Consolidated.from_dict(d["consolidated"])], + market_center=None + if "market_center" not in d + else [MarketCenter.from_dict(d["market_center"])], + ) + @dataclass class Condition: @@ -47,4 +74,20 @@ class Condition: @staticmethod def from_dict(d): - return Condition(**d) + return Condition( + abbreviation=d.get("abbreviation", None), + asset_class=d.get("asset_class", None), + data_types=d.get("data_types", None), + description=d.get("description", None), + exchange=d.get("exchange", None), + id=d.get("id", None), + legacy=d.get("legacy", None), + name=d.get("name", None), + sip_mapping=None + if "sip_mapping" not in d + else [SipMapping.from_dict(d["sip_mapping"])], + type=d.get("type", None), + update_rules=None + if "update_rules" not in d + else [UpdateRules.from_dict(d["update_rules"])], + ) diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 85adfa7b..248e0e8e 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -3,17 +3,27 @@ @dataclass -class Currencies: +class MarketCurrencies: + "Contains currency market status data." crypto: Optional[str] = None fx: Optional[str] = None + @staticmethod + def from_dict(d): + return MarketCurrencies(**d) + @dataclass -class Exchanges: +class MarketExchanges: + "Contains exchange market status data." nasdaq: Optional[str] = None nyse: Optional[str] = None otc: Optional[str] = None + @staticmethod + def from_dict(d): + return MarketExchanges(**d) + @dataclass class MarketHoliday: @@ -34,19 +44,23 @@ def from_dict(d): class MarketStatus: "MarketStatus contains data for the current trading status of the exchanges and overall financial markets." after_hours: Optional[bool] = None - currencies: Optional[Currencies] = None + currencies: Optional[MarketCurrencies] = None early_hours: Optional[bool] = None - exchanges: Optional[Exchanges] = None + exchanges: Optional[MarketExchanges] = None market: Optional[str] = None server_time: Optional[str] = None @staticmethod def from_dict(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), + after_hours=d.get("after_hours", None), + currencies=None + if "currencies" not in d + else [MarketCurrencies.from_dict(d["currencies"])], + early_hours=d.get("early_hours", None), + exchanges=None + if "exchanges" not in d + else [MarketExchanges.from_dict(d["exchanges"])], + market=d.get("market", None), + server_time=d.get("server_time", None), ) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 4a814d28..2cdbb2bf 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -7,7 +7,7 @@ @dataclass class SnapshotMin: - "Most recent minute bar" + "Most recent minute bar." accumulated_volume: Optional[float] = None open: Optional[float] = None high: Optional[float] = None @@ -19,7 +19,7 @@ class SnapshotMin: @staticmethod def from_dict(d): return SnapshotMin( - d.get("ac", None), + d.get("av", None), d.get("o", None), d.get("h", None), d.get("l", None), @@ -31,6 +31,7 @@ def from_dict(d): @dataclass class Snapshot: + "Contains the most up-to-date market data for all traded ticker symbols." day: Optional[Agg] = None last_quote: Optional[LastQuote] = None last_trade: Optional[LastTrade] = None @@ -44,20 +45,25 @@ class Snapshot: @staticmethod def from_dict(d): return Snapshot( - d.get("day", None), - d.get("lastQuote", None), - d.get("lastTrade", None), - d.get("min", None), - d.get("prevDay", None), - d.get("ticker", None), - d.get("todaysChange", None), - d.get("todaysChangePercent", None), - d.get("updated", None), + day=None if "day" not in d else [Agg.from_dict(d["day"])], + last_quote=None + if "last_quote" not in d + else [LastQuote.from_dict(d["last_quote"])], + last_trade=None + if "last_trade" not in d + else [LastTrade.from_dict(d["last_trade"])], + min=None if "min" not in d else [SnapshotMin.from_dict(d["min"])], + prev_day=None if "prev_day" not in d else [Agg.from_dict(d["prev_day"])], + ticker=d.get("ticker", None), + todays_change=d.get("todays_change", None), + todays_change_percent=d.get("todays_change_percent", None), + updated=d.get("updated", None), ) @dataclass class DayOptionContractSnapshot: + "Contains data for the most recent daily bar in an options contract." change: Optional[float] = None change_percent: Optional[float] = None close: Optional[float] = None @@ -76,6 +82,7 @@ def from_dict(d): @dataclass class OptionDetails: + "Contains details for an options contract." contract_type: Optional[str] = None exercise_style: Optional[str] = None expiration_date: Optional[str] = None @@ -90,6 +97,7 @@ def from_dict(d): @dataclass class OptionLastQuote: + "Contains data for the most recent quote in an options contract." ask: Optional[float] = None ask_size: Optional[float] = None bid: Optional[float] = None @@ -105,6 +113,7 @@ def from_dict(d): @dataclass class OptionGreeks: + "Contains data for the greeks in an options contract." delta: Optional[float] = None gamma: Optional[float] = None theta: Optional[float] = None @@ -117,6 +126,7 @@ def from_dict(d): @dataclass class UnderlyingAsset: + "Contains data for the underlying stock in an options contract." change_to_break_even: Optional[float] = None last_updated: Optional[int] = None price: Optional[float] = None @@ -130,32 +140,55 @@ def from_dict(d): @dataclass class OptionContractSnapshot: + "Contains data for the snapshot of an option contract of a stock equity." break_even_price: Optional[float] = None - day: Optional[Agg] = None + day: Optional[DayOptionContractSnapshot] = None details: Optional[OptionDetails] = None greeks: Optional[OptionGreeks] = None implied_volatility: Optional[float] = None last_quote: Optional[OptionLastQuote] = None open_interest: Optional[float] = None - underlying_asset: Optional[float] = None + underlying_asset: Optional[UnderlyingAsset] = None @staticmethod def from_dict(d): - return OptionContractSnapshot(**d) + return OptionContractSnapshot( + break_even_price=d.get("break_even_price", None), + day=None + if "day" not in d + else [DayOptionContractSnapshot.from_dict(d["day"])], + details=None + if "details" not in d + else [OptionDetails.from_dict(d["details"])], + greeks=None if "greeks" not in d else [OptionGreeks.from_dict(d["greeks"])], + implied_volatility=d.get("implied_volatility", None), + last_quote=None + if "last_quote" not in d + else [OptionLastQuote.from_dict(d["last_quote"])], + open_interest=d.get("open_interest", None), + underlying_asset=None + if "underlying_asset" not in d + else [UnderlyingAsset.from_dict(d["underlying_asset"])], + ) @dataclass class OrderBookQuote: + "Contains data for a book bid or ask." price: Optional[float] = None exchange_shares: Optional[Dict[str, float]] = None @staticmethod def from_dict(d): - return OrderBookQuote(**d) + return OrderBookQuote( + d.get("p", None), + d.get("x", None), + ) @dataclass class SnapshotTickerFullBook: + "Contains the current level 2 book of a single ticker. This is the combined book from all of the exchanges." ticker: Optional[str] = None bids: Optional[List[OrderBookQuote]] = None asks: Optional[List[OrderBookQuote]] = None @@ -167,11 +200,15 @@ class SnapshotTickerFullBook: @staticmethod def from_dict(d): return SnapshotTickerFullBook( - d.get("ticker", None), - d.get("bids", None), - d.get("asks", None), - d.get("bidCount", None), - d.get("askCount", None), - d.get("spread", None), - d.get("updated", None), + ticker=d.get("ticker", None), + bids=None + if "bids" not in d + else [OrderBookQuote.from_dict(o) for o in d["bids"]], + asks=None + if "asks" not in d + else [OrderBookQuote.from_dict(o) for o in d["asks"]], + bid_count=d.get("bid_count", None), + ask_count=d.get("ask_count", None), + spread=d.get("spread", None), + updated=d.get("updated", None), ) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index a7c2b0ca..f0b52e48 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -5,24 +5,40 @@ @dataclass class Address: + "Contains address data for a ticker detail." address1: Optional[str] = None city: Optional[str] = None state: Optional[str] = None + postal_code: Optional[str] = None + + @staticmethod + def from_dict(d): + return Address(**d) @dataclass class Branding: + "Contains branding data for a ticker detail." icon_url: Optional[str] = None logo_url: Optional[str] = None + @staticmethod + def from_dict(d): + return Branding(**d) + @dataclass class Publisher: + "Contains publisher data for ticker news." favicon_url: Optional[str] = None homepage_url: Optional[str] = None logo_url: Optional[str] = None name: Optional[str] = None + @staticmethod + def from_dict(d): + return Publisher(**d) + @dataclass class Ticker: @@ -80,7 +96,37 @@ class TickerDetails: @staticmethod def from_dict(d): - return TickerDetails(**d) + return TickerDetails( + active=d.get("active", None), + address=None if "address" not in d else [Address.from_dict(d["address"])], + branding=None + if "branding" not in d + else [Branding.from_dict(d["branding"])], + cik=d.get("cik", None), + composite_figi=d.get("composite_figi", None), + currency_name=d.get("currency_name", None), + delisted_utc=d.get("delisted_utc", None), + description=d.get("description", None), + ticker_root=d.get("ticker_root", None), + homepage_url=d.get("homepage_url", None), + list_date=d.get("list_date", None), + locale=d.get("locale", None), + market=d.get("market", None), + market_cap=d.get("market_cap", None), + name=d.get("name", None), + phone_number=d.get("phone_number", None), + primary_exchange=d.get("primary_exchange", None), + share_class_figi=d.get("share_class_figi", None), + share_class_shares_outstanding=d.get( + "share_class_shares_outstanding", None + ), + sic_code=d.get("sic_code", None), + sic_description=d.get("sic_description", None), + ticker=d.get("ticker", None), + total_employees=d.get("total_employees", None), + type=d.get("type", None), + weighted_shares_outstanding=d.get("weighted_shares_outstanding", None), + ) @dataclass @@ -100,7 +146,21 @@ class TickerNews: @staticmethod def from_dict(d): - return TickerNews(**d) + return TickerNews( + amp_url=d.get("amp_url", None), + article_url=d.get("article_url", None), + author=d.get("author", None), + description=d.get("description", None), + id=d.get("id", None), + image_url=d.get("image_url", None), + keywords=d.get("keywords", None), + published_utc=d.get("published_utc", None), + publisher=None + if "publisher" not in d + else [Publisher.from_dict(d["publisher"])], + tickers=d.get("tickers", None), + title=d.get("title", None), + ) @dataclass diff --git a/polygon/rest/models/trades.py b/polygon/rest/models/trades.py index 0ff3195e..09825097 100644 --- a/polygon/rest/models/trades.py +++ b/polygon/rest/models/trades.py @@ -25,19 +25,20 @@ def from_dict(d): @dataclass class LastTrade: - ticker: str - trf_timestamp: int - sequence_number: float - sip_timestamp: int - participant_timestamp: int - conditions: List[int] - correction: int - id: str - price: float - trf_id: int - size: float - exchange: int - tape: int + "Contains data for the most recent trade for a given ticker symbol." + ticker: Optional[str] = None + trf_timestamp: Optional[int] = None + sequence_number: Optional[float] = None + sip_timestamp: Optional[int] = None + participant_timestamp: Optional[int] = None + conditions: Optional[List[int]] = None + correction: Optional[int] = None + id: Optional[str] = None + price: Optional[float] = None + trf_id: Optional[int] = None + size: Optional[float] = None + exchange: Optional[int] = None + tape: Optional[int] = None @staticmethod def from_dict(d): @@ -59,13 +60,14 @@ def from_dict(d): @dataclass -class Last: - conditions: List[int] - exchange: int - price: float - size: float - timestamp: int +class CryptoTrade: + "Contains data for a crypto trade." + conditions: Optional[List[int]] = None + exchange: Optional[int] = None + price: Optional[float] = None + size: Optional[float] = None + timestamp: Optional[int] = None @staticmethod def from_dict(d): - return Last(**d) + return CryptoTrade(**d) diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index b02e2f1e..16b19d87 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -1,6 +1,6 @@ from .base import BaseClient from typing import Optional, Any, Dict, Union, Iterator -from .models import Trade, LastTrade, Last, Sort, Order +from .models import Trade, LastTrade, CryptoTrade, Sort, Order from urllib3 import HTTPResponse from datetime import datetime, date @@ -69,13 +69,13 @@ def get_last_trade( raw=raw, ) - def get_last_trade_crypto( + def get_last_crypto_trade( self, from_: str, to: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[Last, HTTPResponse]: + ) -> Union[CryptoTrade, HTTPResponse]: """ Get the most recent trade for a ticker. @@ -88,8 +88,8 @@ def get_last_trade_crypto( return self._get( path=url, - params=self._get_params(self.get_last_trade_crypto, locals()), + params=self._get_params(self.get_last_crypto_trade, locals()), result_key="last", - deserializer=Last.from_dict, + deserializer=CryptoTrade.from_dict, raw=raw, ) diff --git a/tests/base.py b/tests/base.py index 12250ae9..69e94acb 100644 --- a/tests/base.py +++ b/tests/base.py @@ -15,7 +15,8 @@ with open(abspath, "r") as f: urllpath = abspath.replace(mockdir, "").replace(".json", "") mocks.append((urllpath, f.read())) - # print('load', urllpath) + +unittest.util._MAX_LENGTH = 30000 # type: ignore class BaseTest(unittest.TestCase): diff --git a/tests/test_conditions.py b/tests/test_conditions.py index b62b8236..f3495a6e 100644 --- a/tests/test_conditions.py +++ b/tests/test_conditions.py @@ -1,4 +1,10 @@ -from polygon.rest.models import Condition +from polygon.rest.models import ( + Condition, + SipMapping, + UpdateRules, + Consolidated, + MarketCenter, +) from base import BaseTest @@ -15,20 +21,26 @@ def test_list_conditions(self): id=1, legacy=None, name="Acquisition", - sip_mapping={"UTP": "A"}, + sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="A")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -39,20 +51,26 @@ def test_list_conditions(self): id=2, legacy=None, name="Average Price Trade", - sip_mapping={"CTA": "B", "UTP": "W"}, + sip_mapping=[SipMapping(CTA="B", OPRA=None, UTP="W")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": False, - "updates_open_close": False, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": False, - "updates_open_close": False, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -63,20 +81,26 @@ def test_list_conditions(self): id=3, legacy=None, name="Automatic Execution", - sip_mapping={"CTA": "E"}, + sip_mapping=[SipMapping(CTA="E", OPRA=None, UTP=None)], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -87,20 +111,26 @@ def test_list_conditions(self): id=4, legacy=None, name="Bunched Trade", - sip_mapping={"UTP": "B"}, + sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="B")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -111,20 +141,26 @@ def test_list_conditions(self): id=5, legacy=None, name="Bunched Sold Trade", - sip_mapping={"UTP": "G"}, + sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="G")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": False, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": False, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -135,20 +171,26 @@ def test_list_conditions(self): id=6, legacy=True, name="CAP Election", - sip_mapping={"CTA": "I"}, + sip_mapping=[SipMapping(CTA="I", OPRA=None, UTP=None)], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -159,20 +201,26 @@ def test_list_conditions(self): id=7, legacy=None, name="Cash Sale", - sip_mapping={"CTA": "C", "UTP": "C"}, + sip_mapping=[SipMapping(CTA="C", OPRA=None, UTP="C")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": False, - "updates_open_close": False, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": False, - "updates_open_close": False, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -183,20 +231,26 @@ def test_list_conditions(self): id=8, legacy=None, name="Closing Prints", - sip_mapping={"UTP": "6"}, + sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="6")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -207,20 +261,26 @@ def test_list_conditions(self): id=9, legacy=None, name="Cross Trade", - sip_mapping={"CTA": "X", "UTP": "X"}, + sip_mapping=[SipMapping(CTA="X", OPRA=None, UTP="X")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": True, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ) + ], + ) + ], ), Condition( abbreviation=None, @@ -231,20 +291,26 @@ def test_list_conditions(self): id=10, legacy=None, name="Derivatively Priced", - sip_mapping={"CTA": "4", "UTP": "4"}, + sip_mapping=[SipMapping(CTA="4", OPRA=None, UTP="4")], type="sale_condition", - update_rules={ - "consolidated": { - "updates_high_low": True, - "updates_open_close": False, - "updates_volume": True, - }, - "market_center": { - "updates_high_low": True, - "updates_open_close": False, - "updates_volume": True, - }, - }, + update_rules=[ + UpdateRules( + consolidated=[ + Consolidated( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ) + ], + market_center=[ + MarketCenter( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ) + ], + ) + ], ), ] self.assertEqual(conditions, expected) diff --git a/tests/test_markets.py b/tests/test_markets.py index c0654747..2e8b767b 100644 --- a/tests/test_markets.py +++ b/tests/test_markets.py @@ -1,4 +1,9 @@ -from polygon.rest.models import MarketHoliday, MarketStatus +from polygon.rest.models import ( + MarketHoliday, + MarketStatus, + MarketCurrencies, + MarketExchanges, +) from base import BaseTest @@ -124,15 +129,15 @@ def test_get_market_holidays(self): 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", - }, + after_hours=None, + currencies=[MarketCurrencies(crypto="open", fx="open")], + early_hours=None, + exchanges=[ + MarketExchanges( + nasdaq="extended-hours", nyse="extended-hours", otc="extended-hours" + ) + ], market="extended-hours", - server_time="2022-04-28T16:48:08-04:00", + server_time=None, ) self.assertEqual(status, expected) diff --git a/tests/test_snapshots.py b/tests/test_snapshots.py index ba97b1a9..e882ac4d 100644 --- a/tests/test_snapshots.py +++ b/tests/test_snapshots.py @@ -1,4 +1,16 @@ -from polygon.rest.models import Snapshot, OptionContractSnapshot, SnapshotTickerFullBook +from polygon.rest.models import ( + Snapshot, + OptionContractSnapshot, + SnapshotTickerFullBook, + Agg, + SnapshotMin, + OrderBookQuote, + UnderlyingAsset, + OptionLastQuote, + OptionGreeks, + OptionDetails, + DayOptionContractSnapshot, +) from base import BaseTest @@ -7,48 +19,34 @@ def test_get_snapshot_all(self): snapshots = self.c.get_snapshot_all() expected = [ Snapshot( - day={ - "c": 20.506, - "h": 20.64, - "l": 20.506, - "o": 20.64, - "v": 37216, - "vw": 20.616, - }, - last_quote={ - "P": 20.6, - "S": 22, - "p": 20.5, - "s": 13, - "t": 1605192959994246100, - }, - last_trade={ - "c": [14, 41], - "i": "71675577320245", - "p": 20.506, - "s": 2416, - "t": 1605192894630916600, - "x": 4, - }, - min={ - "av": 37216, - "c": 20.506, - "h": 20.506, - "l": 20.506, - "o": 20.506, - "v": 5000, - "vw": 20.5105, - }, - prev_day={ - "c": 20.63, - "h": 21, - "l": 20.5, - "o": 20.79, - "v": 292738, - "vw": 20.6939, - }, + day=[ + Agg( + open=20.64, + high=20.64, + low=20.506, + close=20.506, + volume=37216, + vwap=20.616, + timestamp=None, + transactions=None, + ) + ], + last_quote=None, + last_trade=None, + min=[ + SnapshotMin( + accumulated_volume=37216, + open=20.506, + high=20.506, + low=20.506, + close=20.506, + volume=5000, + vwap=20.5105, + ) + ], + prev_day=None, ticker="BCAT", - todays_change=-0.124, + todays_change=None, todays_change_percent=None, updated=1605192894630916600, ) @@ -59,94 +57,66 @@ def test_get_snapshot_direction(self): snapshots = self.c.get_snapshot_direction("gainers") expected = [ Snapshot( - day={ - "c": 6.42, - "h": 6.99, - "l": 6.4, - "o": 6.81, - "v": 115782, - "vw": 6.656, - }, - last_quote={ - "P": 6.43, - "S": 1, - "p": 6.4, - "s": 1, - "t": 1651251738312628478, - }, - last_trade={ - "c": [14, 41], - "i": "100", - "p": 6.42, - "s": 200, - "t": 1651251334045891221, - "x": 8, - }, - min={ - "av": 115689, - "c": 6.42, - "h": 6.542, - "l": 6.42, - "o": 6.49, - "v": 2671, - "vw": 6.4604, - }, - prev_day={ - "c": 0.29, - "h": 0.348, - "l": 0.29, - "o": 0.3443, - "v": 1488660, - "vw": 0.317, - }, + day=[ + Agg( + open=6.81, + high=6.99, + low=6.4, + close=6.42, + volume=115782, + vwap=6.656, + timestamp=None, + transactions=None, + ) + ], + last_quote=None, + last_trade=None, + min=[ + SnapshotMin( + accumulated_volume=115689, + open=6.49, + high=6.542, + low=6.42, + close=6.42, + volume=2671, + vwap=6.4604, + ) + ], + prev_day=None, ticker="NVCN", - todays_change=6.13, + todays_change=None, todays_change_percent=None, updated=1651251360000000000, ), Snapshot( - day={ - "c": 4.2107, - "h": 4.95, - "l": 4.21, - "o": 4.31, - "v": 453199, - "vw": 4.4181, - }, - last_quote={ - "P": 4.22, - "S": 9, - "p": 4.21, - "s": 11, - "t": 1651251781709136903, - }, - last_trade={ - "c": None, - "i": "1084", - "p": 4.2116, - "s": 241, - "t": 1651251789345841015, - "x": 4, - }, - min={ - "av": 453189, - "c": 4.2107, - "h": 4.2107, - "l": 4.2107, - "o": 4.2107, - "v": 1012, - "vw": 4.2107, - }, - prev_day={ - "c": 0.1953, - "h": 0.2966, - "l": 0.195, - "o": 0.29, - "v": 8784033, - "vw": 0.2278, - }, + day=[ + Agg( + open=4.31, + high=4.95, + low=4.21, + close=4.2107, + volume=453199, + vwap=4.4181, + timestamp=None, + transactions=None, + ) + ], + last_quote=None, + last_trade=None, + min=[ + SnapshotMin( + accumulated_volume=453189, + open=4.2107, + high=4.2107, + low=4.2107, + close=4.2107, + volume=1012, + vwap=4.2107, + ) + ], + prev_day=None, ticker="BIOL", - todays_change=4.016, + todays_change=None, todays_change_percent=None, updated=1651251789345841015, ), @@ -156,48 +126,34 @@ def test_get_snapshot_direction(self): def test_get_snapshot_ticker(self): snapshots = self.c.get_snapshot_ticker("AAPL") expected = Snapshot( - day={ - "c": 160.315, - "h": 166.2, - "l": 159.8, - "o": 161.84, - "v": 68840127, - "vw": 162.7124, - }, - last_quote={ - "P": 159.99, - "S": 5, - "p": 159.98, - "s": 3, - "t": 1651251948407646487, - }, - last_trade={ - "c": None, - "i": "121351", - "p": 159.99, - "s": 200, - "t": 1651251948294080343, - "x": 12, - }, - min={ - "av": 68834255, - "c": 160.3, - "h": 160.71, - "l": 160.3, - "o": 160.71, - "v": 197226, - "vw": 160.5259, - }, - prev_day={ - "c": 163.64, - "h": 164.515, - "l": 158.93, - "o": 159.25, - "v": 130149192, - "vw": 161.8622, - }, + day=[ + Agg( + open=161.84, + high=166.2, + low=159.8, + close=160.315, + volume=68840127, + vwap=162.7124, + timestamp=None, + transactions=None, + ) + ], + last_quote=None, + last_trade=None, + min=[ + SnapshotMin( + accumulated_volume=68834255, + open=160.71, + high=160.71, + low=160.3, + close=160.3, + volume=197226, + vwap=160.5259, + ) + ], + prev_day=None, ticker="AAPL", - todays_change=-3.65, + todays_change=None, todays_change_percent=None, updated=1651251948294080343, ) @@ -207,50 +163,60 @@ def test_get_snapshot_option(self): snapshots = self.c.get_snapshot_option("AAPL", "O:AAPL230616C00150000") expected = OptionContractSnapshot( break_even_price=179.075, - day={ - "change": -2.3999999999999986, - "change_percent": -7.643312101910824, - "close": 29, - "high": 32.25, - "last_updated": 1651204800000000000, - "low": 29, - "open": 29.99, - "previous_close": 31.4, - "volume": 8, - "vwap": 30.7738, - }, - details={ - "contract_type": "call", - "exercise_style": "american", - "expiration_date": "2023-06-16", - "shares_per_contract": 100, - "strike_price": 150, - "ticker": "O:AAPL230616C00150000", - }, - greeks={ - "delta": 0.6436614934293701, - "gamma": 0.0061735291012820675, - "theta": -0.028227189324641973, - "vega": 0.6381159723175714, - }, + day=[ + DayOptionContractSnapshot( + change=-2.3999999999999986, + change_percent=-7.643312101910824, + close=29, + high=32.25, + last_updated=1651204800000000000, + low=29, + open=29.99, + previous_close=31.4, + volume=8, + vwap=30.7738, + ) + ], + details=[ + OptionDetails( + contract_type="call", + exercise_style="american", + expiration_date="2023-06-16", + shares_per_contract=100, + strike_price=150, + ticker="O:AAPL230616C00150000", + ) + ], + greeks=[ + OptionGreeks( + delta=0.6436614934293701, + gamma=0.0061735291012820675, + theta=-0.028227189324641973, + vega=0.6381159723175714, + ) + ], implied_volatility=0.3570277203465058, - last_quote={ - "ask": 29.25, - "ask_size": 209, - "bid": 28.9, - "bid_size": 294, - "last_updated": 1651254260800059648, - "midpoint": 29.075, - "timeframe": "REAL-TIME", - }, + last_quote=[ + OptionLastQuote( + ask=29.25, + ask_size=209, + bid=28.9, + bid_size=294, + last_updated=1651254260800059648, + midpoint=29.075, + timeframe="REAL-TIME", + ) + ], open_interest=8133, - underlying_asset={ - "change_to_break_even": 19.11439999999999, - "last_updated": 1651254263172073152, - "price": 159.9606, - "ticker": "AAPL", - "timeframe": "REAL-TIME", - }, + underlying_asset=[ + UnderlyingAsset( + change_to_break_even=19.11439999999999, + last_updated=1651254263172073152, + price=159.9606, + ticker="AAPL", + timeframe="REAL-TIME", + ) + ], ) self.assertEqual(snapshots, expected) @@ -259,12 +225,17 @@ def test_get_snapshot_crypto_book(self): expected = SnapshotTickerFullBook( ticker="X:BTCUSD", bids=[ - {"p": 16303.17, "x": {"1": 2}}, - {"p": 16302.94, "x": {"1": 0.02859424, "6": 0.023455}}, + OrderBookQuote(price=16303.17, exchange_shares={"1": 2}), + OrderBookQuote( + price=16302.94, exchange_shares={"1": 0.02859424, "6": 0.023455} + ), + ], + asks=[ + OrderBookQuote(price=11454, exchange_shares={"2": 1}), + OrderBookQuote(price=11455, exchange_shares={"2": 1}), ], - asks=[{"p": 11454, "x": {"2": 1}}, {"p": 11455, "x": {"2": 1}}], - bid_count=694.951789670001, - ask_count=593.1412981600005, + bid_count=None, + ask_count=None, spread=-4849.17, updated=1605295074162, ) diff --git a/tests/test_tickers.py b/tests/test_tickers.py index 6af121c4..f6b0e339 100644 --- a/tests/test_tickers.py +++ b/tests/test_tickers.py @@ -3,6 +3,9 @@ TickerDetails, TickerNews, TickerTypes, + Publisher, + Branding, + Address, ) from base import BaseTest @@ -90,16 +93,20 @@ def test_get_ticker_details(self): details = self.c.get_ticker_details("AAPL") expected = TickerDetails( active=True, - address={ - "address1": "ONE APPLE PARK WAY", - "city": "CUPERTINO", - "state": "CA", - "postal_code": "95014", - }, - branding={ - "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", - "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png", - }, + address=[ + Address( + address1="ONE APPLE PARK WAY", + city="CUPERTINO", + state="CA", + postal_code="95014", + ) + ], + branding=[ + Branding( + icon_url="https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png", + logo_url="https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", + ) + ], cik="0000320193", composite_figi="BBG000B9XRY4", currency_name="usd", @@ -137,12 +144,14 @@ def test_list_ticker_news(self): image_url="https://images.mktw.net/im-533637/social", keywords=None, published_utc="2022-04-28T17:08:00Z", - publisher={ - "name": "MarketWatch", - "homepage_url": "https://www.marketwatch.com/", - "logo_url": "https://s3.polygon.io/public/assets/news/logos/marketwatch.svg", - "favicon_url": "https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico", - }, + publisher=[ + Publisher( + favicon_url="https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico", + homepage_url="https://www.marketwatch.com/", + logo_url="https://s3.polygon.io/public/assets/news/logos/marketwatch.svg", + name="MarketWatch", + ) + ], tickers=["MSFT", "TSN", "NFLX", "AMZN"], title="Theres a big hole in the Feds theory of inflation—incomes are falling at a record 10.9 rate", ) diff --git a/tests/test_trades.py b/tests/test_trades.py index 7ea38e60..6acc73b0 100644 --- a/tests/test_trades.py +++ b/tests/test_trades.py @@ -2,7 +2,7 @@ from polygon.rest.models import ( Trade, LastTrade, - Last, + CryptoTrade, ) @@ -27,9 +27,9 @@ def test_get_last_trade(self): self.assertEqual(last_trade, expected) - def test_get_last_trade_crypto(self): - last_trade_crypto = self.c.get_last_trade_crypto("BTC", "USD") - expected = Last( + def test_get_last_crypto_trade(self): + last_trade_crypto = self.c.get_last_crypto_trade("BTC", "USD") + expected = CryptoTrade( conditions=[2], exchange=2, price=39976.89682331, From bfeb73641bc470d4df2a5a08caabb26534121f34 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 2 May 2022 17:02:44 -0400 Subject: [PATCH 052/448] fix release --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6e8759ee..62dbff2e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,7 +24,7 @@ jobs: - name: Install pypi deps run: poetry install - name: Version according to tag - run: poetry version $(git describe --tags --abrev=0) + run: poetry version $(git describe --tags) - name: Build run: poetry build - name: Publish to PyPi From 6cb7498f730d31b88eafef23ca9efc66929c5957 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Tue, 3 May 2022 16:52:51 -0400 Subject: [PATCH 053/448] Stocks financials (#150) --- docs/source/index.rst | 1 + docs/source/vX.rst | 10 + polygon/rest/__init__.py | 5 +- polygon/rest/models/__init__.py | 1 + polygon/rest/models/financials.py | 330 +++++++++++++++++++++++ polygon/rest/models/shared.py | 5 + polygon/rest/vx.py | 68 +++++ tests/mocks/vX/reference/financials.json | 316 ++++++++++++++++++++++ tests/test_financials.py | 263 ++++++++++++++++++ 9 files changed, 998 insertions(+), 1 deletion(-) create mode 100644 docs/source/vX.rst create mode 100644 polygon/rest/models/financials.py create mode 100644 polygon/rest/vx.py create mode 100644 tests/mocks/vX/reference/financials.json create mode 100644 tests/test_financials.py diff --git a/docs/source/index.rst b/docs/source/index.rst index da924f16..1676b510 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,6 +13,7 @@ This documentation is for the Python client only. For details about the response Quotes Reference Trades + vX Models diff --git a/docs/source/vX.rst b/docs/source/vX.rst new file mode 100644 index 00000000..09a47b8a --- /dev/null +++ b/docs/source/vX.rst @@ -0,0 +1,10 @@ +.. _vX_header: + +vX +========== + +====================== +List stock financials +====================== +.. automethod:: polygon.rest.VXClient.list_stock_financials + diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 4be8a032..19972853 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -10,6 +10,7 @@ ConditionsClient, ExchangesClient, ) +from .vx import VXClient class RESTClient( @@ -24,4 +25,6 @@ class RESTClient( ConditionsClient, ExchangesClient, ): - pass + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.vx = VXClient(*args, **kwargs) diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 29c99ecd..d6edfd09 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -9,3 +9,4 @@ from .conditions import * from .exchanges import * from .snapshot import * +from .financials import * diff --git a/polygon/rest/models/financials.py b/polygon/rest/models/financials.py new file mode 100644 index 00000000..a31cadaf --- /dev/null +++ b/polygon/rest/models/financials.py @@ -0,0 +1,330 @@ +from typing import Optional, Dict +from dataclasses import dataclass + + +@dataclass +class DataPoint: + "An individual financial data point." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return DataPoint(**d) + + +@dataclass +class ExchangeGainsLosses: + "Contains exchange gains losses data for a cash flow statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return ExchangeGainsLosses(**d) + + +@dataclass +class NetCashFlow: + "Contains net cash flow data for a cash flow statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return NetCashFlow(**d) + + +@dataclass +class NetCashFlowFromFinancingActivities: + "Contains net cash flow from financing activities data for a cash flow statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return NetCashFlowFromFinancingActivities(**d) + + +@dataclass +class CashFlowStatement: + "Contains cash flow statement data." + exchange_gains_losses: Optional[ExchangeGainsLosses] = None + net_cash_flow: Optional[NetCashFlow] = None + net_cash_flow_from_financing_activities: Optional[ + NetCashFlowFromFinancingActivities + ] = None + + @staticmethod + def from_dict(d): + return CashFlowStatement( + exchange_gains_losses=None + if "exchange_gains_losses" not in d + else [ExchangeGainsLosses.from_dict(d["exchange_gains_losses"])], + net_cash_flow=None + if "net_cash_flow" not in d + else [NetCashFlow.from_dict(d["net_cash_flow"])], + net_cash_flow_from_financing_activities=None + if "net_cash_flow_from_financing_activities" not in d + else [ + NetCashFlowFromFinancingActivities.from_dict( + d["net_cash_flow_from_financing_activities"] + ) + ], + ) + + +@dataclass +class ComprehensiveIncomeLoss: + "Contains comprehensive income loss data for comprehensive income." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return ComprehensiveIncomeLoss(**d) + + +@dataclass +class ComprehensiveIncomeLossAttributableToParent: + "Contains comprehensive income loss attributable to parent data for comprehensive income." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return ComprehensiveIncomeLossAttributableToParent(**d) + + +@dataclass +class OtherComprehensiveIncomeLoss: + "Contains other comprehensive income loss data for comprehensive income." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return OtherComprehensiveIncomeLoss(**d) + + +@dataclass +class ComprehensiveIncome: + "Contains comprehensive income data." + comprehensive_income_loss: Optional[ComprehensiveIncomeLoss] = None + comprehensive_income_loss_attributable_to_parent: Optional[ + ComprehensiveIncomeLossAttributableToParent + ] = None + other_comprehensive_income_loss: Optional[OtherComprehensiveIncomeLoss] = None + + @staticmethod + def from_dict(d): + return ComprehensiveIncome( + comprehensive_income_loss=None + if "comprehensive_income_loss" not in d + else [ComprehensiveIncomeLoss.from_dict(d["comprehensive_income_loss"])], + comprehensive_income_loss_attributable_to_parent=None + if "comprehensive_income_loss_attributable_to_parent" not in d + else [ + ComprehensiveIncomeLossAttributableToParent.from_dict( + d["comprehensive_income_loss_attributable_to_parent"] + ) + ], + other_comprehensive_income_loss=None + if "other_comprehensive_income_loss" not in d + else [ + OtherComprehensiveIncomeLoss.from_dict( + d["other_comprehensive_income_loss"] + ) + ], + ) + + +@dataclass +class BasicEarningsPerShare: + "Contains basic earning per share data for an income statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return BasicEarningsPerShare(**d) + + +@dataclass +class CostOfRevenue: + "Contains cost of revenue data for an income statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return CostOfRevenue(**d) + + +@dataclass +class GrossProfit: + "Contains gross profit data for an income statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return GrossProfit(**d) + + +@dataclass +class OperatingExpenses: + "Contains operating expenses data for an income statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return OperatingExpenses(**d) + + +@dataclass +class Revenues: + "Contains revenues data for an income statement." + formula: Optional[str] = None + label: Optional[str] = None + order: Optional[int] = None + unit: Optional[str] = None + value: Optional[int] = None + xpath: Optional[str] = None + + @staticmethod + def from_dict(d): + return Revenues(**d) + + +@dataclass +class IncomeStatement: + "Contains income statement data." + basic_earnings_per_share: Optional[BasicEarningsPerShare] = None + cost_of_revenue: Optional[CostOfRevenue] = None + gross_profit: Optional[GrossProfit] = None + operating_expenses: Optional[OperatingExpenses] = None + revenues: Optional[Revenues] = None + + @staticmethod + def from_dict(d): + return IncomeStatement( + basic_earnings_per_share=None + if "basic_earnings_per_share" not in d + else [BasicEarningsPerShare.from_dict(d["basic_earnings_per_share"])], + cost_of_revenue=None + if "cost_of_revenue" not in d + else [CostOfRevenue.from_dict(d["cost_of_revenue"])], + gross_profit=None + if "gross_profit" not in d + else [GrossProfit.from_dict(d["gross_profit"])], + operating_expenses=None + if "operating_expenses" not in d + else [OperatingExpenses.from_dict(d["operating_expenses"])], + revenues=None + if "revenues" not in d + else [Revenues.from_dict(d["revenues"])], + ) + + +@dataclass +class Financials: + "Contains financial data." + balance_sheet: Optional[Dict[str, DataPoint]] = None + cash_flow_statement: Optional[CashFlowStatement] = None + comprehensive_income: Optional[ComprehensiveIncome] = None + income_statement: Optional[IncomeStatement] = None + + @staticmethod + def from_dict(d): + return Financials( + balance_sheet=None + if "balance_sheet" not in d + else {k: DataPoint.from_dict(v) for (k, v) in d["balance_sheet"].items()}, + cash_flow_statement=None + if "cash_flow_statement" not in d + else [CashFlowStatement.from_dict(d["cash_flow_statement"])], + comprehensive_income=None + if "comprehensive_income" not in d + else [ComprehensiveIncome.from_dict(d["comprehensive_income"])], + income_statement=None + if "income_statement" not in d + else [IncomeStatement.from_dict(d["income_statement"])], + ) + + +@dataclass +class StockFinancial: + "StockFinancial contains historical financial data for a stock ticker." + cik: Optional[str] = None + company_name: Optional[str] = None + end_date: Optional[str] = None + filing_date: Optional[str] = None + financials: Optional[Financials] = None + fiscal_period: Optional[str] = None + fiscal_year: Optional[str] = None + source_filing_file_url: Optional[str] = None + source_filing_url: Optional[str] = None + start_date: Optional[str] = None + + @staticmethod + def from_dict(d): + return StockFinancial( + cik=d.get("cik", None), + company_name=d.get("company_name", None), + end_date=d.get("end_date", None), + filing_date=d.get("filing_date", None), + financials=None + if "financials" not in d + else [Financials.from_dict(d["financials"])], + fiscal_period=d.get("fiscal_period", None), + fiscal_year=d.get("fiscal_year", None), + source_filing_file_url=d.get("source_filing_file_url", None), + source_filing_url=d.get("source_filing_url", None), + start_date=d.get("start_date", None), + ) diff --git a/polygon/rest/models/shared.py b/polygon/rest/models/shared.py index c3f0d851..02373d26 100644 --- a/polygon/rest/models/shared.py +++ b/polygon/rest/models/shared.py @@ -71,3 +71,8 @@ class SnapshotMarketType(Enum): STOCKS = "stocks" FOREX = "forex" CRYPTO = "crypto" + + +class Timeframe(Enum): + ANNUAL = "annual" + QUARTERLY = "quarterly" diff --git a/polygon/rest/vx.py b/polygon/rest/vx.py new file mode 100644 index 00000000..a910c641 --- /dev/null +++ b/polygon/rest/vx.py @@ -0,0 +1,68 @@ +from .base import BaseClient +from typing import Optional, Any, Dict, Union, Iterator +from .models import StockFinancial, Timeframe, Sort, Order +from urllib3 import HTTPResponse +from datetime import datetime, date + + +class VXClient(BaseClient): + def list_stock_financials( + self, + ticker: Optional[str] = None, + cik: Optional[str] = None, + company_name: Optional[str] = None, + company_name_search: Optional[str] = None, + sic: Optional[str] = None, + filing_date: Optional[Union[str, int, datetime, date]] = None, + filing_date_lt: Optional[Union[str, int, datetime, date]] = None, + filing_date_lte: Optional[Union[str, int, datetime, date]] = None, + filing_date_gt: Optional[Union[str, int, datetime, date]] = None, + filing_date_gte: Optional[Union[str, int, datetime, date]] = None, + period_of_report_date: Optional[Union[str, int, datetime, date]] = None, + period_of_report_date_lt: Optional[Union[str, int, datetime, date]] = None, + period_of_report_date_lte: Optional[Union[str, int, datetime, date]] = None, + period_of_report_date_gt: Optional[Union[str, int, datetime, date]] = None, + period_of_report_date_gte: Optional[Union[str, int, datetime, date]] = None, + timeframe: Optional[Union[str, Timeframe]] = None, + include_sources: Optional[bool] = 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[StockFinancial], HTTPResponse]: + """ + Get historical financial data for a stock ticker. + + :param ticker: Query by company ticker. + :param cik: Query by central index key (CIK) Number. + :param company_name: Query by company name. + :param company_name_search: Query by company name with partial-match text search. + :param sic: Query by standard industrial classification (SIC). + :param filing_date: Query by the date when the filing with financials data was filed in YYYY-MM-DD format. + :param filing_date_lt: filing_date less than. + :param filing_date_lte: filing_date less than or equal to. + :param filing_date_gt: filing_date greater than. + :param filing_date_gte: filing_date greater than or equal to. + :param period_of_report_date: The period of report for the period_of_report with financials data in YYYY-MM-DD format. + :param period_of_report_date_lt: period_of_report_date less than. + :param period_of_report_date_lte: period_of_report_date less than or equal to. + :param period_of_report_date_gt: period_of_report_date greater than. + :param period_of_report_date_gte: period_of_report_date greater than or equal to. + :param timeframe: Query by timeframe. + :param include_sources: Whether or not to include the xpath and formula attributes for each financial data point. + :param limit: Limit the number of results returned, default is 1 and max is 100. + :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: Iterator of financials + """ + url = "/vX/reference/financials" + + return self._paginate( + path=url, + params=self._get_params(self.list_stock_financials, locals()), + raw=raw, + deserializer=StockFinancial.from_dict, + ) diff --git a/tests/mocks/vX/reference/financials.json b/tests/mocks/vX/reference/financials.json new file mode 100644 index 00000000..c5e18621 --- /dev/null +++ b/tests/mocks/vX/reference/financials.json @@ -0,0 +1,316 @@ +{ + "results": [ + { + "financials": { + "balance_sheet": { + "equity_attributable_to_noncontrolling_interest": { + "label": "Equity Attributable To Noncontrolling Interest", + "value": 2.51e+08, + "unit": "USD", + "order": 1500 + }, + "liabilities": { + "label": "Liabilities", + "value": 1.4561e+10, + "unit": "USD", + "order": 600 + }, + "equity_attributable_to_parent": { + "label": "Equity Attributable To Parent", + "value": 6.509e+09, + "unit": "USD", + "order": 1600 + }, + "noncurrent_assets": { + "label": "Noncurrent Assets", + "value": 1.6046e+10, + "unit": "USD", + "order": 300 + }, + "liabilities_and_equity": { + "label": "Liabilities And Equity", + "value": 2.1321e+10, + "unit": "USD", + "order": 1900 + }, + "assets": { + "label": "Assets", + "value": 2.1321e+10, + "unit": "USD", + "order": 100 + }, + "fixed_assets": { + "label": "Fixed Assets", + "value": 2.814e+09, + "unit": "USD", + "order": 400 + }, + "other_than_fixed_noncurrent_assets": { + "label": "Other Than Fixed Noncurrent Assets", + "value": 1.6046e+10, + "unit": "USD", + "order": 500 + }, + "noncurrent_liabilities": { + "label": "Noncurrent Liabilities", + "value": 1.1716e+10, + "unit": "USD", + "order": 800 + }, + "current_assets": { + "label": "Current Assets", + "value": 5.275e+09, + "unit": "USD", + "order": 200 + }, + "equity": { + "label": "Equity", + "value": 6.76e+09, + "unit": "USD", + "order": 1400 + }, + "current_liabilities": { + "label": "Current Liabilities", + "value": 2.845e+09, + "unit": "USD", + "order": 700 + } + }, + "cash_flow_statement": { + "net_cash_flow_from_investing_activities": { + "label": "Net Cash Flow From Investing Activities", + "value": -3.29e+08, + "unit": "USD", + "order": 400 + }, + "net_cash_flow_from_operating_activities_continuing": { + "label": "Net Cash Flow From Operating Activities, Continuing", + "value": 8.56e+08, + "unit": "USD", + "order": 200 + }, + "exchange_gains_losses": { + "label": "Exchange Gains/Losses", + "value": 0, + "unit": "USD", + "order": 1000 + }, + "net_cash_flow_continuing": { + "label": "Net Cash Flow, Continuing", + "value": -1.47e+08, + "unit": "USD", + "order": 1200 + }, + "net_cash_flow": { + "label": "Net Cash Flow", + "value": -1.47e+08, + "unit": "USD", + "order": 1100 + }, + "net_cash_flow_from_financing_activities": { + "label": "Net Cash Flow From Financing Activities", + "value": -6.74e+08, + "unit": "USD", + "order": 700 + }, + "net_cash_flow_from_investing_activities_continuing": { + "label": "Net Cash Flow From Investing Activities, Continuing", + "value": -3.29e+08, + "unit": "USD", + "order": 500 + }, + "net_cash_flow_from_operating_activities": { + "label": "Net Cash Flow From Operating Activities", + "value": 8.56e+08, + "unit": "USD", + "order": 100 + }, + "net_cash_flow_from_financing_activities_continuing": { + "label": "Net Cash Flow From Financing Activities, Continuing", + "value": -6.74e+08, + "unit": "USD", + "order": 800 + } + }, + "comprehensive_income": { + "comprehensive_income_loss_attributable_to_noncontrolling_interest": { + "label": "Comprehensive Income/Loss Attributable To Noncontrolling Interest", + "value": 9e+06, + "unit": "USD", + "order": 200 + }, + "comprehensive_income_loss_attributable_to_parent": { + "label": "Comprehensive Income/Loss Attributable To Parent", + "value": 6.35e+08, + "unit": "USD", + "order": 300 + }, + "other_comprehensive_income_loss": { + "label": "Other Comprehensive Income/Loss", + "value": -2.2e+07, + "unit": "USD", + "order": 400 + }, + "other_comprehensive_income_loss_attributable_to_parent": { + "label": "Other Comprehensive Income/Loss Attributable To Parent", + "value": -2.2e+07, + "unit": "USD", + "order": 600 + }, + "comprehensive_income_loss": { + "label": "Comprehensive Income/Loss", + "value": 6.44e+08, + "unit": "USD", + "order": 100 + } + }, + "income_statement": { + "income_loss_before_equity_method_investments": { + "label": "Income/Loss Before Equity Method Investments", + "value": 7.68e+08, + "unit": "USD", + "order": 1300 + }, + "diluted_earnings_per_share": { + "label": "Diluted Earnings Per Share", + "value": 2.48, + "unit": "USD / shares", + "order": 4300 + }, + "income_loss_from_equity_method_investments": { + "label": "Income/Loss From Equity Method Investments", + "value": 1.2e+07, + "unit": "USD", + "order": 2100 + }, + "operating_expenses": { + "label": "Operating Expenses", + "value": 9.04e+08, + "unit": "USD", + "order": 1000 + }, + "income_loss_from_continuing_operations_after_tax": { + "label": "Income/Loss From Continuing Operations After Tax", + "value": 6.54e+08, + "unit": "USD", + "order": 1400 + }, + "preferred_stock_dividends_and_other_adjustments": { + "label": "Preferred Stock Dividends And Other Adjustments", + "value": 0, + "unit": "USD", + "order": 3900 + }, + "basic_earnings_per_share": { + "label": "Basic Earnings Per Share", + "value": 2.5, + "unit": "USD / shares", + "order": 4200 + }, + "cost_of_revenue": { + "label": "Cost Of Revenue", + "value": 1.359e+09, + "unit": "USD", + "order": 300 + }, + "net_income_loss_attributable_to_parent": { + "label": "Net Income/Loss Attributable To Parent", + "value": 6.57e+08, + "unit": "USD", + "order": 3500 + }, + "income_loss_from_continuing_operations_before_tax": { + "label": "Income/Loss From Continuing Operations Before Tax", + "value": 7.68e+08, + "unit": "USD", + "order": 1500 + }, + "income_tax_expense_benefit_deferred": { + "label": "Income Tax Expense/Benefit, Deferred", + "value": -3.3e+07, + "unit": "USD", + "order": 2400 + }, + "costs_and_expenses": { + "label": "Costs And Expenses", + "value": 2.368e+09, + "unit": "USD", + "order": 600 + }, + "gross_profit": { + "label": "Gross Profit", + "value": 1.777e+09, + "unit": "USD", + "order": 800 + }, + "benefits_costs_expenses": { + "label": "Benefits Costs and Expenses", + "value": 2.368e+09, + "unit": "USD", + "order": 200 + }, + "participating_securities_distributed_and_undistributed_earnings_loss_basic": { + "label": "Participating Securities, Distributed And Undistributed Earnings/Loss, Basic", + "value": 0, + "unit": "USD", + "order": 3800 + }, + "income_tax_expense_benefit": { + "label": "Income Tax Expense/Benefit", + "value": 1.14e+08, + "unit": "USD", + "order": 2200 + }, + "net_income_loss_attributable_to_noncontrolling_interest": { + "label": "Net Income/Loss Attributable To Noncontrolling Interest", + "value": 9e+06, + "unit": "USD", + "order": 3300 + }, + "interest_expense_operating": { + "label": "Interest Expense, Operating", + "value": 1.04e+08, + "unit": "USD", + "order": 2700 + }, + "net_income_loss_available_to_common_stockholders_basic": { + "label": "Net Income/Loss Available To Common Stockholders, Basic", + "value": 6.57e+08, + "unit": "USD", + "order": 3700 + }, + "revenues": { + "label": "Revenues", + "value": 3.136e+09, + "unit": "USD", + "order": 100 + }, + "net_income_loss": { + "label": "Net Income/Loss", + "value": 6.66e+08, + "unit": "USD", + "order": 3200 + }, + "operating_income_loss": { + "label": "Operating Income/Loss", + "value": 8.73e+08, + "unit": "USD", + "order": 1100 + } + } + }, + "start_date": "2022-01-01", + "end_date": "2022-04-03", + "filing_date": "2022-05-03", + "cik": "0001413447", + "company_name": "NXP Semiconductors N.V.", + "fiscal_period": "Q1", + "fiscal_year": "2022", + "source_filing_url": "https://api.polygon.io/v1/reference/sec/filings/0001413447-22-000014", + "source_filing_file_url": "https://api.polygon.io/v1/reference/sec/filings/0001413447-22-000014/files/nxpi-20220403_htm.xml" + } + ], + "status": "OK", + "request_id": "414d65d9ba18a52010614a3247ceddeb", + "count": 1 +} \ No newline at end of file diff --git a/tests/test_financials.py b/tests/test_financials.py new file mode 100644 index 00000000..fcd9be81 --- /dev/null +++ b/tests/test_financials.py @@ -0,0 +1,263 @@ +from polygon.rest.models import ( + StockFinancial, + Financials, + DataPoint, + CashFlowStatement, + ExchangeGainsLosses, + NetCashFlow, + NetCashFlowFromFinancingActivities, + ComprehensiveIncome, + ComprehensiveIncomeLoss, + ComprehensiveIncomeLossAttributableToParent, + OtherComprehensiveIncomeLoss, + IncomeStatement, + BasicEarningsPerShare, + CostOfRevenue, + GrossProfit, + OperatingExpenses, + Revenues, +) +from base import BaseTest + + +class FinancialsTest(BaseTest): + def test_list_stock_financials(self): + financials = [f for f in self.c.vx.list_stock_financials()] + expected = [ + StockFinancial( + cik="0001413447", + company_name="NXP Semiconductors N.V.", + end_date="2022-04-03", + filing_date="2022-05-03", + financials=[ + Financials( + balance_sheet={ + "equity_attributable_to_noncontrolling_interest": DataPoint( + formula=None, + label="Equity Attributable To Noncontrolling Interest", + order=1500, + unit="USD", + value=251000000.0, + xpath=None, + ), + "liabilities": DataPoint( + formula=None, + label="Liabilities", + order=600, + unit="USD", + value=14561000000.0, + xpath=None, + ), + "equity_attributable_to_parent": DataPoint( + formula=None, + label="Equity Attributable To Parent", + order=1600, + unit="USD", + value=6509000000.0, + xpath=None, + ), + "noncurrent_assets": DataPoint( + formula=None, + label="Noncurrent Assets", + order=300, + unit="USD", + value=16046000000.0, + xpath=None, + ), + "liabilities_and_equity": DataPoint( + formula=None, + label="Liabilities And Equity", + order=1900, + unit="USD", + value=21321000000.0, + xpath=None, + ), + "assets": DataPoint( + formula=None, + label="Assets", + order=100, + unit="USD", + value=21321000000.0, + xpath=None, + ), + "fixed_assets": DataPoint( + formula=None, + label="Fixed Assets", + order=400, + unit="USD", + value=2814000000.0, + xpath=None, + ), + "other_than_fixed_noncurrent_assets": DataPoint( + formula=None, + label="Other Than Fixed Noncurrent Assets", + order=500, + unit="USD", + value=16046000000.0, + xpath=None, + ), + "noncurrent_liabilities": DataPoint( + formula=None, + label="Noncurrent Liabilities", + order=800, + unit="USD", + value=11716000000.0, + xpath=None, + ), + "current_assets": DataPoint( + formula=None, + label="Current Assets", + order=200, + unit="USD", + value=5275000000.0, + xpath=None, + ), + "equity": DataPoint( + formula=None, + label="Equity", + order=1400, + unit="USD", + value=6760000000.0, + xpath=None, + ), + "current_liabilities": DataPoint( + formula=None, + label="Current Liabilities", + order=700, + unit="USD", + value=2845000000.0, + xpath=None, + ), + }, + cash_flow_statement=[ + CashFlowStatement( + exchange_gains_losses=[ + ExchangeGainsLosses( + formula=None, + label="Exchange Gains/Losses", + order=1000, + unit="USD", + value=0, + xpath=None, + ) + ], + net_cash_flow=[ + NetCashFlow( + formula=None, + label="Net Cash Flow", + order=1100, + unit="USD", + value=-147000000.0, + xpath=None, + ) + ], + net_cash_flow_from_financing_activities=[ + NetCashFlowFromFinancingActivities( + formula=None, + label="Net Cash Flow From Financing Activities", + order=700, + unit="USD", + value=-674000000.0, + xpath=None, + ) + ], + ) + ], + comprehensive_income=[ + ComprehensiveIncome( + comprehensive_income_loss=[ + ComprehensiveIncomeLoss( + formula=None, + label="Comprehensive Income/Loss", + order=100, + unit="USD", + value=644000000.0, + xpath=None, + ) + ], + comprehensive_income_loss_attributable_to_parent=[ + ComprehensiveIncomeLossAttributableToParent( + formula=None, + label="Comprehensive Income/Loss Attributable To Parent", + order=300, + unit="USD", + value=635000000.0, + xpath=None, + ) + ], + other_comprehensive_income_loss=[ + OtherComprehensiveIncomeLoss( + formula=None, + label="Other Comprehensive Income/Loss", + order=400, + unit="USD", + value=-22000000.0, + xpath=None, + ) + ], + ) + ], + income_statement=[ + IncomeStatement( + basic_earnings_per_share=[ + BasicEarningsPerShare( + formula=None, + label="Basic Earnings Per Share", + order=4200, + unit="USD / shares", + value=2.5, + xpath=None, + ) + ], + cost_of_revenue=[ + CostOfRevenue( + formula=None, + label="Cost Of Revenue", + order=300, + unit="USD", + value=1359000000.0, + xpath=None, + ) + ], + gross_profit=[ + GrossProfit( + formula=None, + label="Gross Profit", + order=800, + unit="USD", + value=1777000000.0, + xpath=None, + ) + ], + operating_expenses=[ + OperatingExpenses( + formula=None, + label="Operating Expenses", + order=1000, + unit="USD", + value=904000000.0, + xpath=None, + ) + ], + revenues=[ + Revenues( + formula=None, + label="Revenues", + order=100, + unit="USD", + value=3136000000.0, + xpath=None, + ) + ], + ) + ], + ) + ], + fiscal_period="Q1", + fiscal_year="2022", + source_filing_file_url="https://api.polygon.io/v1/reference/sec/filings/0001413447-22-000014/files/nxpi-20220403_htm.xml", + source_filing_url="https://api.polygon.io/v1/reference/sec/filings/0001413447-22-000014", + start_date="2022-01-01", + ) + ] + self.assertEqual(financials, expected) From 3876c3ec53e27a15f6e0219d1618dd929e2358b4 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 4 May 2022 16:27:54 -0400 Subject: [PATCH 054/448] Websockets (#153) * fix releasing (7) * initial working * checkpoint * sub/unsub while connected * handle special topic.* case * Websocket Models (#152) * websocket test scaffolding * cleanup * don't lint 3.7 * don't unit test 3.7 * lint * better parsing status messages * fix docs * cleanup * fix doc * lint Co-authored-by: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> --- .github/workflows/lint.yml | 2 +- .github/workflows/release.yml | 5 +- .github/workflows/test.yml | 4 +- Makefile | 15 +- README.md | 17 + docs/source/Getting-Started.rst | 16 +- docs/source/WebSockets.rst | 30 ++ docs/source/index.rst | 1 + poetry.lock | 60 +++- polygon/__init__.py | 1 + polygon/rest/__init__.py | 37 ++- polygon/rest/base.py | 19 +- polygon/rest/quotes.py | 4 +- polygon/websocket/__init__.py | 217 ++++++++++++ polygon/websocket/models/__init__.py | 42 +++ polygon/websocket/models/common.py | 31 ++ polygon/websocket/models/models.py | 314 ++++++++++++++++++ pyproject.toml | 1 + rest-example.py | 1 - {tests => test_rest}/base.py | 0 .../mocks/v1/last/crypto/BTC/USD.json | 0 .../mocks/v1/marketstatus/now.json | 0 .../mocks/v1/marketstatus/upcoming.json | 0 .../AAPL/2005-04-01?adjusted=True.json | 0 .../stocks/2005-04-04?adjusted=True.json | 0 .../mocks/v2/aggs/ticker/AAPL/prev.json | 0 .../range/1/day/2005-04-01/2005-04-04.json | 0 .../mocks/v2/last/trade/AAPL.json | 0 .../mocks/v2/reference/news?ticker=NFLX.json | 0 .../markets/crypto/tickers/X:BTCUSD/book.json | 0 .../stocks/gainers?market.type=stocks.json | 0 .../tickers/AAPL?market.type=stocks.json | 0 .../stocks/tickers?market.type=stocks.json | 0 .../conditions?asset.class=stocks.json | 0 .../mocks/v3/reference/dividends.json | 0 .../mocks/v3/reference/exchanges.json | 0 .../mocks/v3/reference/splits.json | 0 .../mocks/v3/reference/tickers.json | 0 .../mocks/v3/reference/tickers/AAPL.json | 0 .../mocks/v3/reference/tickers/types.json | 0 ...GU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json | 0 .../options/AAPL/O:AAPL230616C00150000.json | 0 .../mocks/v3/trades/AAPL?limit=2.json | 0 .../mocks/vX/reference/financials.json | 0 {tests => test_rest}/test_aggs.py | 0 {tests => test_rest}/test_conditions.py | 0 {tests => test_rest}/test_dividends.py | 0 {tests => test_rest}/test_exchanges.py | 0 {tests => test_rest}/test_financials.py | 0 {tests => test_rest}/test_markets.py | 0 {tests => test_rest}/test_snapshots.py | 0 {tests => test_rest}/test_splits.py | 0 {tests => test_rest}/test_tickers.py | 0 {tests => test_rest}/test_trades.py | 0 test_websocket/base_ws.py | 25 ++ test_websocket/mock_server.py | 104 ++++++ test_websocket/test_conn.py | 71 ++++ websockets-example.py | 34 ++ 58 files changed, 1023 insertions(+), 28 deletions(-) create mode 100644 docs/source/WebSockets.rst create mode 100644 polygon/websocket/__init__.py create mode 100644 polygon/websocket/models/__init__.py create mode 100644 polygon/websocket/models/common.py create mode 100644 polygon/websocket/models/models.py rename {tests => test_rest}/base.py (100%) rename {tests => test_rest}/mocks/v1/last/crypto/BTC/USD.json (100%) rename {tests => test_rest}/mocks/v1/marketstatus/now.json (100%) rename {tests => test_rest}/mocks/v1/marketstatus/upcoming.json (100%) rename {tests => test_rest}/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json (100%) rename {tests => test_rest}/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json (100%) rename {tests => test_rest}/mocks/v2/aggs/ticker/AAPL/prev.json (100%) rename {tests => test_rest}/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json (100%) rename {tests => test_rest}/mocks/v2/last/trade/AAPL.json (100%) rename {tests => test_rest}/mocks/v2/reference/news?ticker=NFLX.json (100%) rename {tests => test_rest}/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json (100%) rename {tests => test_rest}/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json (100%) rename {tests => test_rest}/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json (100%) rename {tests => test_rest}/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json (100%) rename {tests => test_rest}/mocks/v3/reference/conditions?asset.class=stocks.json (100%) rename {tests => test_rest}/mocks/v3/reference/dividends.json (100%) rename {tests => test_rest}/mocks/v3/reference/exchanges.json (100%) rename {tests => test_rest}/mocks/v3/reference/splits.json (100%) rename {tests => test_rest}/mocks/v3/reference/tickers.json (100%) rename {tests => test_rest}/mocks/v3/reference/tickers/AAPL.json (100%) rename {tests => test_rest}/mocks/v3/reference/tickers/types.json (100%) rename {tests => test_rest}/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json (100%) rename {tests => test_rest}/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json (100%) rename {tests => test_rest}/mocks/v3/trades/AAPL?limit=2.json (100%) rename {tests => test_rest}/mocks/vX/reference/financials.json (100%) rename {tests => test_rest}/test_aggs.py (100%) rename {tests => test_rest}/test_conditions.py (100%) rename {tests => test_rest}/test_dividends.py (100%) rename {tests => test_rest}/test_exchanges.py (100%) rename {tests => test_rest}/test_financials.py (100%) rename {tests => test_rest}/test_markets.py (100%) rename {tests => test_rest}/test_snapshots.py (100%) rename {tests => test_rest}/test_splits.py (100%) rename {tests => test_rest}/test_tickers.py (100%) rename {tests => test_rest}/test_trades.py (100%) create mode 100644 test_websocket/base_ws.py create mode 100644 test_websocket/mock_server.py create mode 100644 test_websocket/test_conn.py create mode 100644 websockets-example.py diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c9fc2fc4..afb92d9c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.7', '3.8', '3.9', '3.10'] + python-version: ['3.8', '3.9', '3.10'] name: Lint ${{ matrix.python-version }} steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 62dbff2e..83f8b848 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,8 +23,11 @@ jobs: run: poetry config pypi-token.pypi ${{ secrets.POETRY_HTTP_BASIC_PYPI_PASSWORD }} - name: Install pypi deps run: poetry install + - name: Get tag + id: tag + uses: dawidd6/action-get-tag@v1 - name: Version according to tag - run: poetry version $(git describe --tags) + run: poetry version ${{ steps.tag.outputs.tag }} - name: Build run: poetry build - name: Publish to PyPi diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a1afc865..dfc5498e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,8 +14,8 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.7', '3.8', '3.9', '3.10'] - name: Lint ${{ matrix.python-version }} + python-version: ['3.8', '3.9', '3.10'] + name: Unit test ${{ matrix.python-version }} steps: - uses: actions/checkout@v3 - name: Setup Python diff --git a/Makefile b/Makefile index af69d83e..e0b56581 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ YELLOW := $(shell tput -Txterm setaf 3) WHITE := $(shell tput -Txterm setaf 7) RESET := $(shell tput -Txterm sgr0) -.PHONY: help lint style static test +.PHONY: help lint style static test test_rest test_websocket ## Show help help: @@ -22,16 +22,21 @@ help: ## Check code style style: - poetry run black $(if $(CI),--check,) polygon tests + poetry run black $(if $(CI),--check,) polygon test_* ## Check static types static: - poetry run mypy polygon tests + poetry run mypy polygon test_* ## Check code style and static types lint: style static ## Run unit tests -test: - poetry run python -m unittest discover -s tests +test_rest: + poetry run python -m unittest discover -s test_rest + +test_websocket: + poetry run python -m unittest discover -s test_websocket + +test: test_rest test_websocket diff --git a/README.md b/README.md index 6fbf6ded..6b43a5e1 100644 --- a/README.md +++ b/README.md @@ -41,3 +41,20 @@ from polygon import RESTClient client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key. response = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04", raw=True) ``` + +### Streaming websockets + +```python +from polygon import WebSocketClient +from polygon.websocket.models import Market, Feed, WebSocketMessage +import asyncio + +client = WebSocketClient(market=Market.Stocks, feed=Feed.RealTime) # Uses POLYGON_API_KEY env var. Can optionally supply your key. +client.subscribe('T.AAPL') + +def handle_msg(msg: WebSocketMessage): + print(msg) + +asyncio.run(client.connect(handle_msg)) +``` + diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index e7ad27c0..549f2d50 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -173,4 +173,18 @@ If it is a paginated :code:`list_*` response it's up to you to handle the "next_ Websocket client usage ---------------------- -Coming soon. +.. code-block:: python + + from polygon import WebSocketClient + from polygon.websocket.models import Market, Feed, WebSocketMessage + from typing import List + import asyncio + + client = WebSocketClient(market=Market.Stocks, feed=Feed.RealTime) # Uses POLYGON_API_KEY env var. Can optionally supply your key. + client.subscribe('T.AAPL') + + async def handle_msg(msg: List[WebSocketMessage]): + print(msg) + + asyncio.run(client.connect(handle_msg)) + diff --git a/docs/source/WebSockets.rst b/docs/source/WebSockets.rst new file mode 100644 index 00000000..59281a4c --- /dev/null +++ b/docs/source/WebSockets.rst @@ -0,0 +1,30 @@ +.. _websockets_header: + +WebSockets +========== + +=========== +Init client +=========== +.. automethod:: polygon.WebSocketClient.__init__ + +============================ +Connect +============================ +.. automethod:: polygon.WebSocketClient.connect + +============================ +Subscribe +============================ +.. automethod:: polygon.WebSocketClient.subscribe + +============================ +Unsubscribe +============================ +.. automethod:: polygon.WebSocketClient.unsubscribe + +============================ +Close +============================ +.. automethod:: polygon.WebSocketClient.close + diff --git a/docs/source/index.rst b/docs/source/index.rst index 1676b510..35a50003 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -9,6 +9,7 @@ This documentation is for the Python client only. For details about the response Getting-Started Aggs + WebSockets Snapshot Quotes Reference diff --git a/poetry.lock b/poetry.lock index def50ffe..a4545c5d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -439,6 +439,14 @@ brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "websockets" +version = "10.3" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +category = "main" +optional = false +python-versions = ">=3.7" + [[package]] name = "zipp" version = "3.8.0" @@ -454,7 +462,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "956071dc59d375c7724b3056feda9d5725eaa5460e182eb2696e62ad2f65c9d0" +content-hash = "b818dd9062a6e24f8c3d4af8d9b0706681460e65604b22e2efe2c87f496b33d9" [metadata.files] alabaster = [ @@ -710,6 +718,56 @@ urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] +websockets = [ + {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, + {file = "websockets-10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500"}, + {file = "websockets-10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47"}, + {file = "websockets-10.3-cp310-cp310-win32.whl", hash = "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae"}, + {file = "websockets-10.3-cp310-cp310-win_amd64.whl", hash = "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079"}, + {file = "websockets-10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6"}, + {file = "websockets-10.3-cp37-cp37m-win32.whl", hash = "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1"}, + {file = "websockets-10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69"}, + {file = "websockets-10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76"}, + {file = "websockets-10.3-cp38-cp38-win32.whl", hash = "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559"}, + {file = "websockets-10.3-cp38-cp38-win_amd64.whl", hash = "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667"}, + {file = "websockets-10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8"}, + {file = "websockets-10.3-cp39-cp39-win32.whl", hash = "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582"}, + {file = "websockets-10.3-cp39-cp39-win_amd64.whl", hash = "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02"}, + {file = "websockets-10.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755"}, + {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, + {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, +] zipp = [ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, diff --git a/polygon/__init__.py b/polygon/__init__.py index f87495cd..8a479e33 100644 --- a/polygon/__init__.py +++ b/polygon/__init__.py @@ -1 +1,2 @@ from .rest import RESTClient +from .websocket import WebSocketClient diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 19972853..88f693be 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -11,6 +11,12 @@ ExchangesClient, ) from .vx import VXClient +from typing import Optional +import os + + +base = "https://api.polygon.io" +env_key = "POLYGON_API_KEY" class RESTClient( @@ -25,6 +31,31 @@ class RESTClient( ConditionsClient, ExchangesClient, ): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self.vx = VXClient(*args, **kwargs) + def __init__( + self, + api_key: Optional[str] = os.getenv(env_key), + connect_timeout: float = 10.0, + read_timeout: float = 10.0, + num_pools: int = 10, + retries: int = 3, + base: str = base, + verbose: bool = False, + ): + super().__init__( + api_key=api_key, + connect_timeout=connect_timeout, + read_timeout=read_timeout, + num_pools=num_pools, + retries=retries, + base=base, + verbose=verbose, + ) + self.vx = VXClient( + api_key=api_key, + connect_timeout=connect_timeout, + read_timeout=read_timeout, + num_pools=num_pools, + retries=retries, + base=base, + verbose=verbose, + ) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index ac970d3c..1cecfa18 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -6,24 +6,21 @@ from typing import Optional, Any, Dict from datetime import datetime -base = "https://api.polygon.io" -env_key = "POLYGON_API_KEY" - class BaseClient: def __init__( self, - api_key: Optional[str] = os.getenv(env_key), - connect_timeout: float = 10.0, - read_timeout: float = 10.0, - num_pools: int = 10, - retries=3, - base: str = base, - verbose: bool = False, + api_key: Optional[str], + connect_timeout: float, + read_timeout: float, + num_pools: int, + retries: int, + base: str, + verbose: bool, ): if api_key is None: raise Exception( - f"Must specify env var {env_key} or pass api_key in constructor" + f"Must specify env var POLYGON_API_KEY or pass api_key in constructor" ) self.API_KEY = api_key self.BASE = base diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index e602e61f..079ff4fc 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -1,5 +1,5 @@ from .base import BaseClient -from typing import Optional, Any, Dict, List, Union +from typing import Optional, Any, Dict, List, Union, Iterator from .models import Quote, LastQuote, Sort, Order from urllib3 import HTTPResponse from datetime import datetime, date @@ -19,7 +19,7 @@ def list_quotes( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[List[Quote], HTTPResponse]: + ) -> Union[Iterator[Quote], HTTPResponse]: """ Get quotes for a ticker symbol in a given time range. diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py new file mode 100644 index 00000000..2689ee14 --- /dev/null +++ b/polygon/websocket/__init__.py @@ -0,0 +1,217 @@ +import os +from enum import Enum +from typing import Optional, Union, List, Set, Callable, Awaitable +from .models import * +from websockets.client import connect, WebSocketClientProtocol +from websockets.exceptions import ConnectionClosedOK, ConnectionClosedError +from websockets.typing import Data +import json +import inspect + +env_key = "POLYGON_API_KEY" + + +class WebSocketClient: + def __init__( + self, + api_key: Optional[str] = os.getenv(env_key), + feed: Union[str, Feed] = Feed.RealTime, + market: Union[str, Market] = Market.Stocks, + raw: bool = False, + verbose: bool = False, + subscriptions: List[str] = [], + max_reconnects: Optional[int] = 5, + secure: bool = True, + **kwargs, + ): + """ + Initialize a Polygon WebSocketClient. + + :param api_key: Your API keYour API key. + :param feed: The feed to subscribe to (default RealTime) + :param raw: The market to subscribe to (default Stocks) + :param verbose: Whether to print client and server status messages. + :param subscriptions: List of subscription parameters. + :param max_reconnects: How many times to reconnect on network outage before ending .connect event loop. + :return: A client. + """ + if api_key is None: + raise Exception( + f"Must specify env var {env_key} or pass api_key in constructor" + ) + self.api_key = api_key + self.feed = feed + self.market = market + self.raw = raw + self.verbose = verbose + self.websocket_cfg = kwargs + if isinstance(feed, Enum): + feed = feed.value + if isinstance(market, Enum): + market = market.value + self.url = f"ws{'s' if secure else ''}://{feed}/{market}" + self.subscribed = False + self.subs: Set[str] = set() + self.max_reconnects = max_reconnects + self.websocket: Optional[WebSocketClientProtocol] = None + self.scheduled_subs = set(subscriptions) + self.schedule_resub = True + + # https://websockets.readthedocs.io/en/stable/reference/client.html#opening-a-connection + async def connect( + self, + processor: Callable[[Union[List[WebSocketMessage], Data]], Optional[Awaitable]], + close_timeout: int = 1, + **kwargs, + ): + """ + Connect to websocket server and run `processor(msg)` on every new `msg`. + + :param processor: The callback to process messages. + :param close_timeout: How long to wait for handshake when calling .close. + """ + reconnects = 0 + isasync = inspect.iscoroutinefunction(processor) + if self.verbose: + print("connect:", self.url) + async for s in connect(self.url, close_timeout=close_timeout, **kwargs): + self.websocket = s + try: + msg = await s.recv() + if self.verbose: + print("connected:", msg) + if self.verbose: + print("authing:") + await s.send(json.dumps({"action": "auth", "params": self.api_key})) + msg = await s.recv() + if self.verbose: + print("authed:", msg) + while True: + if self.schedule_resub: + if self.verbose: + print("reconciling:", self.subs, self.scheduled_subs) + new_subs = self.scheduled_subs.difference(self.subs) + await self._subscribe(new_subs) + old_subs = self.subs.difference(self.scheduled_subs) + await self._unsubscribe(old_subs) + self.subs = self.scheduled_subs + self.subs = set(self.scheduled_subs) + self.schedule_resub = False + + cmsg: Union[List[WebSocketMessage], Data] = await s.recv() + # we know cmsg is Data + msgJson = json.loads(cmsg) # type: ignore + for m in msgJson: + if m["ev"] == "status": + if self.verbose: + print("status:", m["message"]) + continue + if not self.raw: + cmsg = parse(msgJson) + + if len(cmsg) > 0: + if isasync: + # we know processor is Awaitable + await processor(cmsg) # type: ignore + else: + processor(cmsg) + except ConnectionClosedOK: + if self.verbose: + print("connection closed (OK)") + return + except ConnectionClosedError: + if self.verbose: + print("connection closed (error)") + reconnects += 1 + if self.max_reconnects is not None and reconnects > self.max_reconnects: + return + continue + + async def _subscribe(self, topics: Union[List[str], Set[str]]): + if self.websocket is None or len(topics) == 0: + return + subs = ",".join(topics) + if self.verbose: + print("subbing:", subs) + await self.websocket.send(json.dumps({"action": "subscribe", "params": subs})) + + async def _unsubscribe(self, topics: Union[List[str], Set[str]]): + if self.websocket is None or len(topics) == 0: + return + subs = ",".join(topics) + if self.verbose: + print("unsubbing:", subs) + await self.websocket.send(json.dumps({"action": "unsubscribe", "params": subs})) + + @staticmethod + def _parse_subscription(s: str): + s = s.strip() + split = s.split(".") + if len(split) != 2: + print("invalid subscription:", s) + return [None, None] + + return split + + def subscribe(self, *subscriptions: str): + """ + Subscribe to given subscriptions. + + :param subscriptions: Subscriptions (args) + """ + for s in subscriptions: + topic, sym = self._parse_subscription(s) + if topic == None: + continue + if self.verbose: + print("add:", s) + self.scheduled_subs.add(s) + # If user subs to X.*, remove other X.\w+ + if sym == "*": + for t in list(self.subs): + if t.startswith(topic): + self.scheduled_subs.discard(t) + + self.schedule_resub = True + + def unsubscribe(self, *subscriptions: str): + """ + Unsubscribe from given subscriptions. + + :param subscriptions: Subscriptions (args) + """ + for s in subscriptions: + topic, sym = self._parse_subscription(s) + if topic == None: + continue + if self.verbose: + print("discard:", s) + self.scheduled_subs.discard(s) + + # If user unsubs to X.*, remove other X.\w+ + if sym == "*": + for t in list(self.subs): + if t.startswith(topic): + self.scheduled_subs.discard(t) + + self.schedule_resub = True + + def unsubscribe_all(self): + """ + Unsubscribe from all subscriptions. + """ + self.scheduled_subs = set() + self.schedule_resub = True + + async def close(self): + """ + Close the websocket connection. + """ + if self.verbose: + print("closing:") + + if self.websocket: + await self.websocket.close() + self.websocket = None + else: + print("no websocket open to close") diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py new file mode 100644 index 00000000..4b0a3c31 --- /dev/null +++ b/polygon/websocket/models/__init__.py @@ -0,0 +1,42 @@ +from typing import Dict, Any, List +from .common import * +from .models import * + + +def parse_single(data: Dict[str, Any]): + event_type = data["ev"] + if event_type in [EventType.EquityAgg.value, EventType.EquityAggMin.value]: + return EquityAgg.from_dict(data) + elif event_type == EventType.CryptoAgg.value: + return CurrencyAgg.from_dict(data) + elif event_type == EventType.CryptoQuote.value: + return CurrencyAgg.from_dict(data) + elif event_type == EventType.EquityTrade.value: + return EquityTrade.from_dict(data) + elif event_type == EventType.ForexTrade.value: + return CryptoTrade.from_dict(data) + elif event_type == EventType.EquityQuote.value: + return EquityQuote.from_dict(data) + elif event_type == EventType.ForexQuote.value: + return ForexQuote.from_dict(data) + elif event_type == EventType.CryptoQuote.value: + return CryptoQuote.from_dict(data) + elif event_type == EventType.Imbalances.value: + return Imbalance.from_dict(data) + elif event_type == EventType.LimitUpLimitDown.value: + return LimitUpLimitDown.from_dict(data) + elif event_type == EventType.CryptoL2.value: + return Level2Book.from_dict(data) + return None + + +def parse(msg: List[Dict[str, Any]]) -> List[WebSocketMessage]: + res = [] + for m in msg: + parsed = parse_single(m) + if parsed is None: + if m["ev"] != "status": + print("could not parse message", m) + else: + res.append(parsed) + return res diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py new file mode 100644 index 00000000..d9a1d50d --- /dev/null +++ b/polygon/websocket/models/common.py @@ -0,0 +1,31 @@ +from enum import Enum + + +class Feed(Enum): + Delayed = "delayed.polygon.io" + RealTime = "socket.polygon.io" + Nasdaq = "nasdaqfeed.polygon.io" + PolyFeed = "polyfeed.polygon.io" + PolyFeedPlus = "polyfeedplus.polygon.io" + + +class Market(Enum): + Stocks = "stocks" + Options = "options" + Forex = "forex" + Crypto = "crypto" + + +class EventType(Enum): + EquityAgg = "A" + EquityAggMin = "AM" + CryptoAgg = "CA" + ForexAgg = "XA" + EquityTrade = "T" + ForexTrade = "XT" + EquityQuote = "Q" + ForexQuote = "C" + CryptoQuote = "XQ" + Imbalances = "NOI" + LimitUpLimitDown = "LULD" + CryptoL2 = "XL2" diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py new file mode 100644 index 00000000..d4b1d322 --- /dev/null +++ b/polygon/websocket/models/models.py @@ -0,0 +1,314 @@ +from typing import Optional, List, Union, NewType +from .common import EventType +from dataclasses import dataclass + + +@dataclass +class EquityAgg: + "EquityAgg contains aggregate data for either stock tickers or option contracts." + event_type: Optional[Union[str, EventType]] = None + symbol: Optional[str] = None + volume: Optional[float] = None + accumulated_volume: Optional[float] = None + official_open_price: Optional[float] = None + vwap: Optional[float] = None + open: Optional[float] = None + close: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + aggregate_vwap: Optional[float] = None + average_size: Optional[float] = None + start_timestamp: Optional[int] = None + end_timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return EquityAgg( + d.get("ev", None), + d.get("sym", None), + d.get("v", None), + d.get("av", None), + d.get("op", None), + d.get("vw", None), + d.get("o", None), + d.get("c", None), + d.get("h", None), + d.get("l", None), + d.get("a", None), + d.get("z", None), + d.get("s", None), + d.get("e", None), + ) + + +@dataclass +class CurrencyAgg: + "CurrencyAgg contains aggregate data for either forex currency pairs or crypto pairs." + event_type: Optional[Union[str, EventType]] = None + pair: Optional[str] = None + open: Optional[float] = None + close: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + volume: Optional[float] = None + vwap: Optional[float] = None + start_timestamp: Optional[int] = None + end_timestamp: Optional[int] = None + avg_trade_size: Optional[int] = None + + @staticmethod + def from_dict(d): + return CurrencyAgg( + d.get("ev", None), + d.get("pair", None), + d.get("o", None), + d.get("c", None), + d.get("h", None), + d.get("l", None), + d.get("v", None), + d.get("vw", None), + d.get("s", None), + d.get("e", None), + d.get("z", None), + ) + + +@dataclass +class EquityTrade: + "EquityTrade contains trade data for either stock tickers or option contracts." + event_type: Optional[Union[str, EventType]] = None + symbol: Optional[str] = None + exchange: Optional[int] = None + id: Optional[str] = None + tape: Optional[int] = None + price: Optional[float] = None + size: Optional[int] = None + conditions: Optional[List[int]] = None + timestamp: Optional[int] = None + sequence_number: Optional[int] = None + + @staticmethod + def from_dict(d): + return EquityTrade( + d.get("ev", None), + d.get("sym", None), + d.get("x", None), + d.get("i", None), + d.get("z", None), + d.get("p", None), + d.get("s", None), + d.get("c", None), + d.get("t", None), + d.get("q", None), + ) + + +@dataclass +class CryptoTrade: + "CryptoTrade contains trade data for a crypto pair." + event_type: Optional[Union[str, EventType]] = None + symbol: Optional[str] = None + exchange: Optional[int] = None + id: Optional[str] = None + price: Optional[float] = None + size: Optional[float] = None + conditions: Optional[List[int]] = None + timestamp: Optional[int] = None + received_timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return CryptoTrade( + d.get("ev", None), + d.get("sym", None), + d.get("x", None), + d.get("i", None), + d.get("p", None), + d.get("s", None), + d.get("c", None), + d.get("t", None), + d.get("r", None), + ) + + +@dataclass +class EquityQuote: + "EquityQuote contains quote data for either stock tickers or option contracts." + event_type: Optional[Union[str, EventType]] = None + symbol: Optional[str] = None + bid_exchange_id: Optional[int] = None + bid_price: Optional[float] = None + bid_size: Optional[int] = None + ask_exchange_id: Optional[int] = None + ask_price: Optional[float] = None + ask_size: Optional[int] = None + condition: Optional[int] = None + timestamp: Optional[int] = None + tape: Optional[int] = None + sequence_number: Optional[int] = None + + @staticmethod + def from_dict(d): + return EquityQuote( + d.get("ev", None), + d.get("sym", None), + d.get("bx", None), + d.get("bp", None), + d.get("bs", None), + d.get("ax", None), + d.get("ap", None), + d.get("as", None), + d.get("c", None), + d.get("t", None), + d.get("z", None), + d.get("q", None), + ) + + +@dataclass +class ForexQuote: + "ForexQuote contains quote data for a forex currency pair." + event_type: Optional[Union[str, EventType]] = None + pair: Optional[str] = None + exchange_id: Optional[int] = None + ask_price: Optional[float] = None + bid_price: Optional[float] = None + timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return ForexQuote( + d.get("ev", None), + d.get("p", None), + d.get("x", None), + d.get("a", None), + d.get("b", None), + d.get("t", None), + ) + + +@dataclass +class CryptoQuote: + "CryptoQuote contains quote data for a crypto pair." + event_type: Optional[Union[str, EventType]] = None + pair: Optional[str] = None + bid_price: Optional[int] = None + bid_size: Optional[float] = None + ask_price: Optional[int] = None + ask_size: Optional[int] = None + timestamp: Optional[float] = None + exchange_id: Optional[int] = None + received_timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return CryptoQuote( + d.get("ev", None), + d.get("pair", None), + d.get("bp", None), + d.get("bs", None), + d.get("ap", None), + d.get("as", None), + d.get("t", None), + d.get("x", None), + d.get("r", None), + ) + + +@dataclass +class Imbalance: + "Imbalance contains imbalance event data for a given stock ticker symbol." + event_type: Optional[Union[str, EventType]] = None + symbol: Optional[str] = None + time_stamp: Optional[int] = None + auction_time: Optional[int] = None + auction_type: Optional[str] = None + symbol_sequence: Optional[int] = None + exchange_id: Optional[int] = None + imbalance_quantity: Optional[int] = None + paired_quantity: Optional[int] = None + book_clearing_price: Optional[float] = None + + @staticmethod + def from_dict(d): + return Imbalance( + d.get("ev", None), + d.get("T", None), + d.get("t", None), + d.get("at", None), + d.get("a", None), + d.get("i", None), + d.get("x", None), + d.get("o", None), + d.get("p", None), + d.get("b", None), + ) + + +@dataclass +class LimitUpLimitDown: + "LimitUpLimitDown contains LULD event data for a given stock ticker symbol." + event_type: Optional[Union[str, EventType]] = None + symbol: Optional[str] = None + high_price: Optional[float] = None + low_price: Optional[float] = None + indicators: Optional[List[int]] = None + tape: Optional[int] = None + timestamp: Optional[int] = None + sequence_number: Optional[int] = None + + @staticmethod + def from_dict(d): + return LimitUpLimitDown( + d.get("ev", None), + d.get("T", None), + d.get("h", None), + d.get("l", None), + d.get("i", None), + d.get("z", None), + d.get("t", None), + d.get("q", None), + ) + + +@dataclass +class Level2Book: + "Level2Book contains level 2 book data for a given crypto pair." + event_type: Optional[Union[str, EventType]] = None + pair: Optional[str] = None + bid_prices: Optional[float] = None + ask_prices: Optional[float] = None + timestamp: Optional[int] = None + exchange_id: Optional[int] = None + received_timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return Level2Book( + d.get("ev", None), + d.get("pair", None), + d.get("b", None), + d.get("a", None), + d.get("t", None), + d.get("x", None), + d.get("r", None), + ) + + +WebSocketMessage = NewType( + "WebSocketMessage", + List[ + Union[ + EquityAgg, + CurrencyAgg, + EquityTrade, + CryptoTrade, + EquityQuote, + ForexQuote, + CryptoQuote, + Imbalance, + LimitUpLimitDown, + Level2Book, + ] + ], +) diff --git a/pyproject.toml b/pyproject.toml index 8a8981d9..4a892fc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ packages = [ [tool.poetry.dependencies] python = "^3.7" urllib3 = "^1.26.9" +websockets = "^10.3" [tool.poetry.dev-dependencies] black = "^22.3.0" diff --git a/rest-example.py b/rest-example.py index b2bca0cc..1bd13b3f 100644 --- a/rest-example.py +++ b/rest-example.py @@ -1,5 +1,4 @@ from polygon import RESTClient -from polygon.rest.models import Sort from datetime import date, datetime client = RESTClient(verbose=True) diff --git a/tests/base.py b/test_rest/base.py similarity index 100% rename from tests/base.py rename to test_rest/base.py diff --git a/tests/mocks/v1/last/crypto/BTC/USD.json b/test_rest/mocks/v1/last/crypto/BTC/USD.json similarity index 100% rename from tests/mocks/v1/last/crypto/BTC/USD.json rename to test_rest/mocks/v1/last/crypto/BTC/USD.json diff --git a/tests/mocks/v1/marketstatus/now.json b/test_rest/mocks/v1/marketstatus/now.json similarity index 100% rename from tests/mocks/v1/marketstatus/now.json rename to test_rest/mocks/v1/marketstatus/now.json diff --git a/tests/mocks/v1/marketstatus/upcoming.json b/test_rest/mocks/v1/marketstatus/upcoming.json similarity index 100% rename from tests/mocks/v1/marketstatus/upcoming.json rename to test_rest/mocks/v1/marketstatus/upcoming.json diff --git a/tests/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json b/test_rest/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json similarity index 100% rename from tests/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json rename to test_rest/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json diff --git a/tests/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json b/test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json similarity index 100% rename from tests/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json rename to test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json diff --git a/tests/mocks/v2/aggs/ticker/AAPL/prev.json b/test_rest/mocks/v2/aggs/ticker/AAPL/prev.json similarity index 100% rename from tests/mocks/v2/aggs/ticker/AAPL/prev.json rename to test_rest/mocks/v2/aggs/ticker/AAPL/prev.json diff --git a/tests/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json b/test_rest/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json similarity index 100% rename from tests/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json rename to test_rest/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-01/2005-04-04.json diff --git a/tests/mocks/v2/last/trade/AAPL.json b/test_rest/mocks/v2/last/trade/AAPL.json similarity index 100% rename from tests/mocks/v2/last/trade/AAPL.json rename to test_rest/mocks/v2/last/trade/AAPL.json diff --git a/tests/mocks/v2/reference/news?ticker=NFLX.json b/test_rest/mocks/v2/reference/news?ticker=NFLX.json similarity index 100% rename from tests/mocks/v2/reference/news?ticker=NFLX.json rename to test_rest/mocks/v2/reference/news?ticker=NFLX.json diff --git a/tests/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json b/test_rest/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json similarity index 100% rename from tests/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json rename to test_rest/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json diff --git a/tests/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json similarity index 100% rename from tests/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json rename to test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json diff --git a/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json similarity index 100% rename from tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json rename to test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json diff --git a/tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json similarity index 100% rename from tests/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json rename to test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json diff --git a/tests/mocks/v3/reference/conditions?asset.class=stocks.json b/test_rest/mocks/v3/reference/conditions?asset.class=stocks.json similarity index 100% rename from tests/mocks/v3/reference/conditions?asset.class=stocks.json rename to test_rest/mocks/v3/reference/conditions?asset.class=stocks.json diff --git a/tests/mocks/v3/reference/dividends.json b/test_rest/mocks/v3/reference/dividends.json similarity index 100% rename from tests/mocks/v3/reference/dividends.json rename to test_rest/mocks/v3/reference/dividends.json diff --git a/tests/mocks/v3/reference/exchanges.json b/test_rest/mocks/v3/reference/exchanges.json similarity index 100% rename from tests/mocks/v3/reference/exchanges.json rename to test_rest/mocks/v3/reference/exchanges.json diff --git a/tests/mocks/v3/reference/splits.json b/test_rest/mocks/v3/reference/splits.json similarity index 100% rename from tests/mocks/v3/reference/splits.json rename to test_rest/mocks/v3/reference/splits.json diff --git a/tests/mocks/v3/reference/tickers.json b/test_rest/mocks/v3/reference/tickers.json similarity index 100% rename from tests/mocks/v3/reference/tickers.json rename to test_rest/mocks/v3/reference/tickers.json diff --git a/tests/mocks/v3/reference/tickers/AAPL.json b/test_rest/mocks/v3/reference/tickers/AAPL.json similarity index 100% rename from tests/mocks/v3/reference/tickers/AAPL.json rename to test_rest/mocks/v3/reference/tickers/AAPL.json diff --git a/tests/mocks/v3/reference/tickers/types.json b/test_rest/mocks/v3/reference/tickers/types.json similarity index 100% rename from tests/mocks/v3/reference/tickers/types.json rename to test_rest/mocks/v3/reference/tickers/types.json diff --git a/tests/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json b/test_rest/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json similarity index 100% rename from tests/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json rename to test_rest/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json diff --git a/tests/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json b/test_rest/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json similarity index 100% rename from tests/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json rename to test_rest/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json diff --git a/tests/mocks/v3/trades/AAPL?limit=2.json b/test_rest/mocks/v3/trades/AAPL?limit=2.json similarity index 100% rename from tests/mocks/v3/trades/AAPL?limit=2.json rename to test_rest/mocks/v3/trades/AAPL?limit=2.json diff --git a/tests/mocks/vX/reference/financials.json b/test_rest/mocks/vX/reference/financials.json similarity index 100% rename from tests/mocks/vX/reference/financials.json rename to test_rest/mocks/vX/reference/financials.json diff --git a/tests/test_aggs.py b/test_rest/test_aggs.py similarity index 100% rename from tests/test_aggs.py rename to test_rest/test_aggs.py diff --git a/tests/test_conditions.py b/test_rest/test_conditions.py similarity index 100% rename from tests/test_conditions.py rename to test_rest/test_conditions.py diff --git a/tests/test_dividends.py b/test_rest/test_dividends.py similarity index 100% rename from tests/test_dividends.py rename to test_rest/test_dividends.py diff --git a/tests/test_exchanges.py b/test_rest/test_exchanges.py similarity index 100% rename from tests/test_exchanges.py rename to test_rest/test_exchanges.py diff --git a/tests/test_financials.py b/test_rest/test_financials.py similarity index 100% rename from tests/test_financials.py rename to test_rest/test_financials.py diff --git a/tests/test_markets.py b/test_rest/test_markets.py similarity index 100% rename from tests/test_markets.py rename to test_rest/test_markets.py diff --git a/tests/test_snapshots.py b/test_rest/test_snapshots.py similarity index 100% rename from tests/test_snapshots.py rename to test_rest/test_snapshots.py diff --git a/tests/test_splits.py b/test_rest/test_splits.py similarity index 100% rename from tests/test_splits.py rename to test_rest/test_splits.py diff --git a/tests/test_tickers.py b/test_rest/test_tickers.py similarity index 100% rename from tests/test_tickers.py rename to test_rest/test_tickers.py diff --git a/tests/test_trades.py b/test_rest/test_trades.py similarity index 100% rename from tests/test_trades.py rename to test_rest/test_trades.py diff --git a/test_websocket/base_ws.py b/test_websocket/base_ws.py new file mode 100644 index 00000000..2d27c53b --- /dev/null +++ b/test_websocket/base_ws.py @@ -0,0 +1,25 @@ +import unittest +import asyncio +from mock_server import run_mock_server +from typing import List +from polygon.websocket import WebSocketMessage + +unittest.util._MAX_LENGTH = 30000 # type: ignore + + +# https://docs.python.org/3/library/unittest.html#unittest.IsolatedAsyncioTestCase +class BaseTest(unittest.IsolatedAsyncioTestCase): + expected: List[WebSocketMessage] = [] + count = 0 + + def expectProcessor(self, msg): + self.assertEqual(msg, self.expected[self.count]) + self.count += 1 + + def expectResponse(self, msg): + self.expected.append(msg) + + async def asyncSetUp(self): + self.maxDiff = None + loop = asyncio.get_event_loop() + loop.create_task(run_mock_server()) diff --git a/test_websocket/mock_server.py b/test_websocket/mock_server.py new file mode 100644 index 00000000..4cf8ab4c --- /dev/null +++ b/test_websocket/mock_server.py @@ -0,0 +1,104 @@ +from websockets import serve # type: ignore +import asyncio +import json + +port = 8765 +subs = set() + + +async def mock_server(websocket): + await websocket.send( + '[{"ev":"status","status":"connected","message":"Connected Successfully"}]' + ) + async for message in websocket: + message = json.loads(message) + if "action" not in message: + continue + if message["action"] == "auth": + await websocket.send( + '[{"ev":"status","status":"auth_success","message":"authenticated"}]' + ) + elif message["action"] == "subscribe": + for p in message["params"].split(","): + subs.add(p) + await websocket.send( + json.dumps( + [ + { + "ev": "status", + "status": "success", + "message": f"subscribed to: {p}", + } + ] + ) + ) + await websocket.send( + json.dumps( + [ + { + "ev": "T", + "sym": "AAPL", + "i": "5096", + "x": 10, + "p": 161.87, + "s": 300, + "c": [14, 41], + "t": 1651684192462, + "q": 4009402, + "z": 3, + } + ] + ) + ) + await websocket.send( + json.dumps( + [ + { + "ev": "T", + "sym": "AMZN", + "i": "72815", + "x": 12, + "p": 161.87, + "s": 1, + "c": [14, 37, 41], + "t": 1651684192536, + "q": 4009408, + "z": 3, + }, + { + "ev": "T", + "sym": "AMZN", + "i": "799", + "x": 4, + "p": 161.87, + "s": 100, + "t": 1651684192717, + "q": 4009434, + "z": 3, + }, + ] + ) + ) + elif message["action"] == "unsubscribe": + for p in message["params"].split(","): + subs.discard(p) + await websocket.send( + json.dumps( + [ + { + "ev": "status", + "status": "success", + "message": f"unsubscribed to: {p}", + } + ] + ) + ) + + +async def run_mock_server(): + async with serve(mock_server, "localhost", port): + await asyncio.Future() # run forever + + +if __name__ == "__main__": + asyncio.run(run_mock_server()) diff --git a/test_websocket/test_conn.py b/test_websocket/test_conn.py new file mode 100644 index 00000000..2fcfd464 --- /dev/null +++ b/test_websocket/test_conn.py @@ -0,0 +1,71 @@ +from polygon import WebSocketClient +from base_ws import BaseTest +from mock_server import subs, port +import asyncio +from polygon.websocket import EquityTrade + + +class WebSocketsTest(BaseTest): + async def test_conn(self): + c = WebSocketClient( + api_key="", feed=f"localhost:{port}", verbose=True, secure=False + ) + self.expectResponse( + [ + EquityTrade( + event_type="T", + symbol="AAPL", + exchange=10, + id="5096", + tape=3, + price=161.87, + size=300, + conditions=[14, 41], + timestamp=1651684192462, + sequence_number=4009402, + ) + ] + ) + c.subscribe("T.AAPL") + + def binded(msg): + self.expectProcessor(msg) + + asyncio.get_event_loop().create_task(c.connect(binded)) + self.expectResponse( + [ + EquityTrade( + event_type="T", + symbol="AMZN", + exchange=12, + id="72815", + tape=3, + price=161.87, + size=1, + conditions=[14, 37, 41], + timestamp=1651684192536, + sequence_number=4009408, + ), + EquityTrade( + event_type="T", + symbol="AMZN", + exchange=4, + id="799", + tape=3, + price=161.87, + size=100, + conditions=None, + timestamp=1651684192717, + sequence_number=4009434, + ), + ] + ) + c.subscribe("T.AMZN") + self.assertEqual(subs, c.subs) + c.unsubscribe_all() + self.assertEqual(subs, set()) + c.subscribe("T.*") + self.assertEqual(subs, c.subs) + c.unsubscribe("T.*") + self.assertEqual(subs, set()) + await c.close() diff --git a/websockets-example.py b/websockets-example.py new file mode 100644 index 00000000..21aef31a --- /dev/null +++ b/websockets-example.py @@ -0,0 +1,34 @@ +import asyncio +from polygon import WebSocketClient +from polygon.websocket.models import Market, Feed, WebSocketMessage +# import logging +# logging.basicConfig( +# format="%(asctime)s %(message)s", +# level=logging.DEBUG, +# ) + +count = 0 +c = WebSocketClient(market=Market.Stocks, feed=Feed.RealTime) +c.subscribe('T.AAPL') + +async def handle_msg(msg: WebSocketMessage): + global count, c + print(count, msg) + count += 1 + +async def timeout(): + await asyncio.sleep(1) + print('unsubscribe_all') + c.unsubscribe_all() + await asyncio.sleep(1) + print('close') + await c.close() + +async def main(): + await asyncio.gather( + c.connect(handle_msg), + timeout() + ) + +asyncio.run(main()) + From d7bff2d6b608f4db1009b310dded2a4b46f77ceb Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 5 May 2022 11:19:43 -0400 Subject: [PATCH 055/448] Add Enums to docs (#154) --- docs/source/Enums.rst | 96 ++++++++++++++++++++ docs/source/Models.rst | 3 - docs/source/index.rst | 1 + polygon/rest/models/__init__.py | 2 +- polygon/rest/models/{shared.py => common.py} | 0 polygon/rest/models/conditions.py | 2 +- polygon/rest/models/dividends.py | 2 +- polygon/rest/models/exchanges.py | 2 +- polygon/rest/models/tickers.py | 2 +- 9 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 docs/source/Enums.rst rename polygon/rest/models/{shared.py => common.py} (100%) diff --git a/docs/source/Enums.rst b/docs/source/Enums.rst new file mode 100644 index 00000000..f59e077f --- /dev/null +++ b/docs/source/Enums.rst @@ -0,0 +1,96 @@ +.. _enums_header: + +Enums +============================================================== + +============================================================== +Sort +============================================================== +.. autoclass:: polygon.rest.models.Sort + :members: + :undoc-members: + +============================================================== +Order +============================================================== +.. autoclass:: polygon.rest.models.Order + :members: + :undoc-members: + +============================================================== +Locale +============================================================== +.. autoclass:: polygon.rest.models.Locale + :members: + :undoc-members: + +============================================================== +Market +============================================================== +.. autoclass:: polygon.rest.models.Market + :members: + :undoc-members: + +============================================================== +AssetClass +============================================================== +.. autoclass:: polygon.rest.models.AssetClass + :members: + :undoc-members: + +============================================================== +DividendType +============================================================== +.. autoclass:: polygon.rest.models.DividendType + :members: + :undoc-members: + +============================================================== +Frequency +============================================================== +.. autoclass:: polygon.rest.models.Frequency + :members: + :undoc-members: + +============================================================== +DataType +============================================================== +.. autoclass:: polygon.rest.models.DataType + :members: + :undoc-members: + +============================================================== +SIP +============================================================== +.. autoclass:: polygon.rest.models.SIP + :members: + :undoc-members: + +============================================================== +ExchangeType +============================================================== +.. autoclass:: polygon.rest.models.ExchangeType + :members: + :undoc-members: + +============================================================== +Direction +============================================================== +.. autoclass:: polygon.rest.models.Direction + :members: + :undoc-members: + +============================================================== +SnapshotMarketType +============================================================== +.. autoclass:: polygon.rest.models.SnapshotMarketType + :members: + :undoc-members: + +============================================================== +Timeframe +============================================================== +.. autoclass:: polygon.rest.models.Timeframe + :members: + :undoc-members: + diff --git a/docs/source/Models.rst b/docs/source/Models.rst index c003b4c9..05dcb437 100644 --- a/docs/source/Models.rst +++ b/docs/source/Models.rst @@ -192,6 +192,3 @@ Condition Exchange ============================================================== .. autoclass:: polygon.rest.models.Exchange - - - diff --git a/docs/source/index.rst b/docs/source/index.rst index 35a50003..dab96872 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -16,6 +16,7 @@ This documentation is for the Python client only. For details about the response Trades vX Models + Enums Indices and tables diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index d6edfd09..ce0103be 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -1,4 +1,4 @@ -from .shared import * +from .common import * from .aggs import * from .trades import * from .quotes import * diff --git a/polygon/rest/models/shared.py b/polygon/rest/models/common.py similarity index 100% rename from polygon/rest/models/shared.py rename to polygon/rest/models/common.py diff --git a/polygon/rest/models/conditions.py b/polygon/rest/models/conditions.py index d1cb2801..32a268d0 100644 --- a/polygon/rest/models/conditions.py +++ b/polygon/rest/models/conditions.py @@ -1,5 +1,5 @@ from typing import Optional -from .shared import AssetClass, DataType +from .common import AssetClass, DataType from dataclasses import dataclass diff --git a/polygon/rest/models/dividends.py b/polygon/rest/models/dividends.py index f70adf9f..014e5d4d 100644 --- a/polygon/rest/models/dividends.py +++ b/polygon/rest/models/dividends.py @@ -1,5 +1,5 @@ from typing import Optional -from .shared import DividendType, Frequency +from .common import DividendType, Frequency from dataclasses import dataclass diff --git a/polygon/rest/models/exchanges.py b/polygon/rest/models/exchanges.py index 64527710..1cd0e07d 100644 --- a/polygon/rest/models/exchanges.py +++ b/polygon/rest/models/exchanges.py @@ -1,5 +1,5 @@ from typing import Optional -from .shared import AssetClass, Locale, ExchangeType +from .common import AssetClass, Locale, ExchangeType from dataclasses import dataclass diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index f0b52e48..767fe5ca 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -1,5 +1,5 @@ from typing import Optional, List -from .shared import Locale, Market, AssetClass +from .common import Locale, Market, AssetClass from dataclasses import dataclass From 2a49fdf91b1283e5ee71b444842e861c04336fc9 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 5 May 2022 11:28:58 -0400 Subject: [PATCH 056/448] add certifi (#155) --- poetry.lock | 16 ++++++++++++++-- polygon/rest/base.py | 9 +++++++-- pyproject.toml | 2 ++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index a4545c5d..a2f944c7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,7 +44,7 @@ uvloop = ["uvloop (>=0.15.2)"] name = "certifi" version = "2021.10.8" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" +category = "main" optional = false python-versions = "*" @@ -410,6 +410,14 @@ category = "dev" optional = false python-versions = ">=3.6" +[[package]] +name = "types-certifi" +version = "2021.10.8.2" +description = "Typing stubs for certifi" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "types-urllib3" version = "1.26.14" @@ -462,7 +470,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "b818dd9062a6e24f8c3d4af8d9b0706681460e65604b22e2efe2c87f496b33d9" +content-hash = "1379de274d70d2c1cdd4b08e81887e35e0b7d0b0fbca08168005fe6b430c5e93" [metadata.files] alabaster = [ @@ -706,6 +714,10 @@ typed-ast = [ {file = "typed_ast-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:20d5118e494478ef2d3a2702d964dae830aedd7b4d3b626d003eea526be18718"}, {file = "typed_ast-1.5.3.tar.gz", hash = "sha256:27f25232e2dd0edfe1f019d6bfaaf11e86e657d9bdb7b0956db95f560cceb2b3"}, ] +types-certifi = [ + {file = "types-certifi-2021.10.8.2.tar.gz", hash = "sha256:a36dc1cb4aeeea8c97430297db10b4c0481ba612ed443e48e3e8aa091f359440"}, + {file = "types_certifi-2021.10.8.2-py3-none-any.whl", hash = "sha256:d8d61752071a10747f441c169967e31d43c1875d851973f4f9851c1cb8c5ed9d"}, +] types-urllib3 = [ {file = "types-urllib3-1.26.14.tar.gz", hash = "sha256:2a2578e4b36341ccd240b00fccda9826988ff0589a44ba4a664bbd69ef348d27"}, {file = "types_urllib3-1.26.14-py3-none-any.whl", hash = "sha256:5d2388aa76395b1e3999ff789ea5b3283677dad8e9bcf3d9117ba19271fd35d9"}, diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 1cecfa18..f1609e1d 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -1,4 +1,4 @@ -import os +import certifi import json import urllib3 import inspect @@ -33,6 +33,8 @@ def __init__( "Authorization": "Bearer " + self.API_KEY, "User-Agent": "Python client", }, + ca_certs=certifi.where(), + cert_reqs="CERT_REQUIRED", ) self.timeout = urllib3.Timeout(connect=connect_timeout, read=read_timeout) self.retries = retries @@ -55,7 +57,10 @@ def _get( if self.verbose: print("_get", path, params) resp = self.client.request( - "GET", self.BASE + path, fields=params, retries=self.retries + "GET", + self.BASE + path, + fields=params, + retries=self.retries, ) if resp.status != 200: diff --git a/pyproject.toml b/pyproject.toml index 4a892fc9..d8752059 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ packages = [ python = "^3.7" urllib3 = "^1.26.9" websockets = "^10.3" +certifi = "^2021.10.8" [tool.poetry.dev-dependencies] black = "^22.3.0" @@ -37,6 +38,7 @@ Sphinx = "^4.5.0" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" +types-certifi = "^2021.10.8" [build-system] requires = ["poetry-core>=1.0.0"] From 3f0cc8b10d05931f786b698316e71a5e20d117ca Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 5 May 2022 11:50:53 -0400 Subject: [PATCH 057/448] add certifi for wss (#156) * add certifi for wss * lint --- polygon/websocket/__init__.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 2689ee14..2ff3c44b 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -1,12 +1,14 @@ import os from enum import Enum from typing import Optional, Union, List, Set, Callable, Awaitable +import json +import inspect +import ssl +import certifi from .models import * from websockets.client import connect, WebSocketClientProtocol from websockets.exceptions import ConnectionClosedOK, ConnectionClosedError from websockets.typing import Data -import json -import inspect env_key = "POLYGON_API_KEY" @@ -74,7 +76,12 @@ async def connect( isasync = inspect.iscoroutinefunction(processor) if self.verbose: print("connect:", self.url) - async for s in connect(self.url, close_timeout=close_timeout, **kwargs): + # darwin needs some extra <3 + ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + ssl_context.load_verify_locations(certifi.where()) + async for s in connect( + self.url, close_timeout=close_timeout, ssl=ssl_context, **kwargs + ): self.websocket = s try: msg = await s.recv() From 910a874831f07b2a2dbc26d79856ec017f7c9774 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 5 May 2022 13:16:34 -0400 Subject: [PATCH 058/448] add auth failed msg (#157) * add auth failed msg * lint --- polygon/websocket/__init__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 2ff3c44b..8f6644b6 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -90,9 +90,13 @@ async def connect( if self.verbose: print("authing:") await s.send(json.dumps({"action": "auth", "params": self.api_key})) - msg = await s.recv() + auth_msg = await s.recv() + auth_msg_parsed = json.loads(auth_msg) if self.verbose: - print("authed:", msg) + print("authed:", auth_msg) + if auth_msg_parsed[0]["status"] == "auth_failed": + print(auth_msg_parsed[0]["message"]) + return while True: if self.schedule_resub: if self.verbose: From f5d997485ea3cf623a75cba18fa5e36f752040e9 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 5 May 2022 14:40:47 -0400 Subject: [PATCH 059/448] fix bad name (#158) --- polygon/websocket/models/__init__.py | 2 +- polygon/websocket/models/common.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py index 4b0a3c31..259f0e44 100644 --- a/polygon/websocket/models/__init__.py +++ b/polygon/websocket/models/__init__.py @@ -13,7 +13,7 @@ def parse_single(data: Dict[str, Any]): return CurrencyAgg.from_dict(data) elif event_type == EventType.EquityTrade.value: return EquityTrade.from_dict(data) - elif event_type == EventType.ForexTrade.value: + elif event_type == EventType.CryptoTrade.value: return CryptoTrade.from_dict(data) elif event_type == EventType.EquityQuote.value: return EquityQuote.from_dict(data) diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index d9a1d50d..635e15fb 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -22,7 +22,7 @@ class EventType(Enum): CryptoAgg = "CA" ForexAgg = "XA" EquityTrade = "T" - ForexTrade = "XT" + CryptoTrade = "XT" EquityQuote = "Q" ForexQuote = "C" CryptoQuote = "XQ" From 28d9ccf494a0052c063229bf036fbdcc1a11b63d Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 5 May 2022 15:20:00 -0400 Subject: [PATCH 060/448] Iterator note (#159) --- docs/source/Getting-Started.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index 549f2d50..1bd896da 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -40,7 +40,12 @@ For paginated endpoints call :code:`list_*` and use the provided iterator: trades.append(t) print(trades) -For endpoints that have a set of parameters you can use the provided enums: +.. note:: + The number of network requests made by the iterator depends on the value of the parameter :code:`limit`. + :code:`limit` specifies how many results should be returned per network request. + You can see each network request by passing :code:`verbose = True` to the client. + +For endpoints that have a set of parameters you can use the provided :doc:`enums `. .. code-block:: python From eb32b3fbc884ca43a77d2b4caf83b400282603b3 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 5 May 2022 16:37:31 -0400 Subject: [PATCH 061/448] vX Usage Note (#160) --- docs/source/vX.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/vX.rst b/docs/source/vX.rst index 09a47b8a..8b27aecb 100644 --- a/docs/source/vX.rst +++ b/docs/source/vX.rst @@ -3,6 +3,11 @@ vX ========== +.. note:: + To call vX methods, use the vX class member on RESTClient. + + For example, :code:`financials = RESTClient().vx.list_stock_financials()` + ====================== List stock financials ====================== From 9ace5b56bd5914eebe13ddcd0975d4dd7ff703ea Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Fri, 6 May 2022 10:33:47 -0400 Subject: [PATCH 062/448] User agent version (#161) * try dynamic version * add version to user agent string * add types for setuptools --- poetry.lock | 14 +++++++++++++- polygon/rest/base.py | 5 ++++- polygon/websocket/__init__.py | 7 +++++-- pyproject.toml | 1 + 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index a2f944c7..8ffca2eb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -418,6 +418,14 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "types-setuptools" +version = "57.4.14" +description = "Typing stubs for setuptools" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "types-urllib3" version = "1.26.14" @@ -470,7 +478,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "1379de274d70d2c1cdd4b08e81887e35e0b7d0b0fbca08168005fe6b430c5e93" +content-hash = "d6e34b1cf2ee9c25cf7917f12cc312fc66b486a5d87821f575b906f843f14753" [metadata.files] alabaster = [ @@ -718,6 +726,10 @@ types-certifi = [ {file = "types-certifi-2021.10.8.2.tar.gz", hash = "sha256:a36dc1cb4aeeea8c97430297db10b4c0481ba612ed443e48e3e8aa091f359440"}, {file = "types_certifi-2021.10.8.2-py3-none-any.whl", hash = "sha256:d8d61752071a10747f441c169967e31d43c1875d851973f4f9851c1cb8c5ed9d"}, ] +types-setuptools = [ + {file = "types-setuptools-57.4.14.tar.gz", hash = "sha256:df02fe1dd244f58cf4e67cfc3d0a97930a2d61a72dd89f21d81c71017cd83f9a"}, + {file = "types_setuptools-57.4.14-py3-none-any.whl", hash = "sha256:828f7e7e51e157876f47c80518b23ba0c3c36aa8081efd39d5d39f393938aec9"}, +] types-urllib3 = [ {file = "types-urllib3-1.26.14.tar.gz", hash = "sha256:2a2578e4b36341ccd240b00fccda9826988ff0589a44ba4a664bbd69ef348d27"}, {file = "types_urllib3-1.26.14-py3-none-any.whl", hash = "sha256:5d2388aa76395b1e3999ff789ea5b3283677dad8e9bcf3d9117ba19271fd35d9"}, diff --git a/polygon/rest/base.py b/polygon/rest/base.py index f1609e1d..9aa0e971 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -5,6 +5,9 @@ from enum import Enum from typing import Optional, Any, Dict from datetime import datetime +import pkg_resources # part of setuptools + +version = pkg_resources.require("polygon-api-client")[0].version class BaseClient: @@ -31,7 +34,7 @@ def __init__( num_pools=num_pools, headers={ "Authorization": "Bearer " + self.API_KEY, - "User-Agent": "Python client", + "User-Agent": "Python client " + version, }, ca_certs=certifi.where(), cert_reqs="CERT_REQUIRED", diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 8f6644b6..6ef169d8 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -77,8 +77,11 @@ async def connect( if self.verbose: print("connect:", self.url) # darwin needs some extra <3 - ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) - ssl_context.load_verify_locations(certifi.where()) + ssl_context = None + if self.url.startswith("wss://"): + ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + ssl_context.load_verify_locations(certifi.where()) + async for s in connect( self.url, close_timeout=close_timeout, ssl=ssl_context, **kwargs ): diff --git a/pyproject.toml b/pyproject.toml index d8752059..7e55dd56 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" types-certifi = "^2021.10.8" +types-setuptools = "^57.4.14" [build-system] requires = ["poetry-core>=1.0.0"] From 26dcda928e7cb35652d33eeb828935cca6a41b75 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Fri, 6 May 2022 11:32:22 -0400 Subject: [PATCH 063/448] try getting version --- polygon/rest/base.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 9aa0e971..43afa2e1 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -7,7 +7,11 @@ from datetime import datetime import pkg_resources # part of setuptools -version = pkg_resources.require("polygon-api-client")[0].version +version = "unknown" +try: + version = pkg_resources.require("polygon-api-client")[0].version +except: + pass class BaseClient: From 91e7babfedd3cd868f818f8171e890e9f849025c Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Fri, 6 May 2022 11:38:14 -0400 Subject: [PATCH 064/448] please readthedocs --- docs/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/requirements.txt b/docs/requirements.txt index 5977ad6f..b72deef5 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,2 @@ sphinx-autodoc-typehints~=1.18.1 +websockets~=10.3 From 2f0da957bf26d96c9b388053482cc5bfa4ba6a89 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Fri, 6 May 2022 12:07:19 -0400 Subject: [PATCH 065/448] Raise AuthenticationError (#162) --- docs/source/Getting-Started.rst | 2 ++ docs/source/WebSocket-Enums.rst | 25 +++++++++++++++++++ docs/source/{WebSockets.rst => WebSocket.rst} | 4 +-- docs/source/index.rst | 4 +-- polygon/__init__.py | 2 +- polygon/websocket/__init__.py | 8 ++++-- 6 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 docs/source/WebSocket-Enums.rst rename docs/source/{WebSockets.rst => WebSocket.rst} (94%) diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index 1bd896da..f8756e04 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -193,3 +193,5 @@ Websocket client usage asyncio.run(client.connect(handle_msg)) +.. note:: + Raises :code:`AuthError` if invalid API key is provided. \ No newline at end of file diff --git a/docs/source/WebSocket-Enums.rst b/docs/source/WebSocket-Enums.rst new file mode 100644 index 00000000..dc2fd199 --- /dev/null +++ b/docs/source/WebSocket-Enums.rst @@ -0,0 +1,25 @@ +.. _websocket_enums_header: + +WebSocket Enums +============================== + +============================================================== +Feed +============================================================== +.. autoclass:: polygon.websocket.models.Feed + :members: + :undoc-members: + +============================================================== +Market +============================================================== +.. autoclass:: polygon.websocket.models.Market + :members: + :undoc-members: + +============================================================== +EventType +============================================================== +.. autoclass:: polygon.websocket.models.EventType + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/source/WebSockets.rst b/docs/source/WebSocket.rst similarity index 94% rename from docs/source/WebSockets.rst rename to docs/source/WebSocket.rst index 59281a4c..f66d9fae 100644 --- a/docs/source/WebSockets.rst +++ b/docs/source/WebSocket.rst @@ -1,6 +1,6 @@ -.. _websockets_header: +.. _websocket_header: -WebSockets +WebSocket ========== =========== diff --git a/docs/source/index.rst b/docs/source/index.rst index dab96872..efe82e2f 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -9,7 +9,7 @@ This documentation is for the Python client only. For details about the response Getting-Started Aggs - WebSockets + WebSocket Snapshot Quotes Reference @@ -17,7 +17,7 @@ This documentation is for the Python client only. For details about the response vX Models Enums - + WebSocket-Enums Indices and tables ================== diff --git a/polygon/__init__.py b/polygon/__init__.py index 8a479e33..e4e0ced3 100644 --- a/polygon/__init__.py +++ b/polygon/__init__.py @@ -1,2 +1,2 @@ from .rest import RESTClient -from .websocket import WebSocketClient +from .websocket import WebSocketClient, AuthError diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 6ef169d8..2538d91b 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -13,6 +13,10 @@ env_key = "POLYGON_API_KEY" +class AuthError(Exception): + pass + + class WebSocketClient: def __init__( self, @@ -71,6 +75,7 @@ async def connect( :param processor: The callback to process messages. :param close_timeout: How long to wait for handshake when calling .close. + :raises AuthError: If invalid API key is supplied. """ reconnects = 0 isasync = inspect.iscoroutinefunction(processor) @@ -98,8 +103,7 @@ async def connect( if self.verbose: print("authed:", auth_msg) if auth_msg_parsed[0]["status"] == "auth_failed": - print(auth_msg_parsed[0]["message"]) - return + raise AuthError(auth_msg_parsed[0]["message"]) while True: if self.schedule_resub: if self.verbose: From 603d05b7cacb78cae5df4e03eb5c1b7324bfc983 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 9 May 2022 10:08:47 -0400 Subject: [PATCH 066/448] make websockets have 2 apis (#163) * make websockets have 2 apis * lint --- README.md | 87 ++++++++++++++++++++++++++---- docs/source/Getting-Started.rst | 95 +++++++++++++++++++++++++++++---- docs/source/WebSocket.rst | 5 ++ polygon/websocket/__init__.py | 41 ++++++++++---- websockets-example.py | 79 +++++++++++++++++++-------- 5 files changed, 255 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 6b43a5e1..bea6c42f 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,13 @@ Python client for the [Polygon.io API](https://polygon.io). -## Getting started -### Install +## Install `pip install polygon-api-client` Requires python version >= 3.7 +## REST getting started ### Getting aggs ```python from polygon import RESTClient @@ -42,19 +42,86 @@ client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your response = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04", raw=True) ``` -### Streaming websockets +## WebSocket getting started +### Simple synchronous callback ```python from polygon import WebSocketClient -from polygon.websocket.models import Market, Feed, WebSocketMessage -import asyncio +from polygon.websocket.models import WebSocketMessage +from typing import List -client = WebSocketClient(market=Market.Stocks, feed=Feed.RealTime) # Uses POLYGON_API_KEY env var. Can optionally supply your key. -client.subscribe('T.AAPL') +c = WebSocketClient(subscriptions=['T.AAPL']) # Uses POLYGON_API_KEY env var. Can optionally supply your key. -def handle_msg(msg: WebSocketMessage): - print(msg) +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) -asyncio.run(client.connect(handle_msg)) +c.run(handle_msg) ``` +### Synchronous aggregates +```python +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List + +class MessageHandler: + count = 0 + + def handle_msg(self, msgs: List[WebSocketMessage]): + for m in msgs: + if type(m) == EquityTrade: + print(self.count, m) + self.count += 1 + +h = MessageHandler() + +def handle_msg(msgs: List[WebSocketMessage]): + h.handle_msg(msgs) + +c.run(handle_msg) +``` + +### Asynchronous callback +```python +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List + +c = WebSocketClient(subscriptions=['T.AAPL']) # Uses POLYGON_API_KEY env var. Can optionally supply your key. + +async def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + +async def timeout(): + await asyncio.sleep(1) + print('unsubscribe_all') + c.unsubscribe_all() + await asyncio.sleep(1) + print('close') + await c.close() + +async def main(): + await asyncio.gather( + c.connect(handle_msg), + timeout() + ) + +asyncio.run(main()) +``` + +### Getting raw response +```python +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import Union +import json + +c = WebSocketClient(subscriptions=['T.*'], raw=True) + +def handle_msg(msgs: Union[str, bytes]): + print(json.loads(msgs)) + +c.run(handle_msg) +``` diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index f8756e04..d0f44402 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -175,23 +175,100 @@ If it is a paginated :code:`list_*` response it's up to you to handle the "next_ # }' -Websocket client usage +WebSocket client usage ---------------------- +.. automethod:: polygon.WebSocketClient.__init__ + +The simplest way to use the websocket client is to just provide a callback: + .. code-block:: python from polygon import WebSocketClient - from polygon.websocket.models import Market, Feed, WebSocketMessage + from polygon.websocket.models import WebSocketMessage from typing import List - import asyncio - client = WebSocketClient(market=Market.Stocks, feed=Feed.RealTime) # Uses POLYGON_API_KEY env var. Can optionally supply your key. - client.subscribe('T.AAPL') + c = WebSocketClient(subscriptions=['T.AAPL']) - async def handle_msg(msg: List[WebSocketMessage]): - print(msg) + def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) - asyncio.run(client.connect(handle_msg)) + c.run(handle_msg) .. note:: - Raises :code:`AuthError` if invalid API key is provided. \ No newline at end of file + Raises :code:`AuthError` if invalid API key is provided. + +If you want to capture state you can use a global variable inside the callback. +Alternatively, you can wrap a class method in a closure. + +.. code-block:: python + + from polygon import WebSocketClient + from polygon.websocket.models import WebSocketMessage + from typing import List + + class MessageHandler: + count = 0 + + def handle_msg(self, msgs: List[WebSocketMessage]): + for m in msgs: + if type(m) == EquityTrade: + print(self.count, m) + self.count += 1 + + h = MessageHandler() + + def handle_msg(msgs: List[WebSocketMessage]): + h.handle_msg(msgs) + + c.run(handle_msg) + +Under the hood our client uses an asynchronous runtime. To manage the runtime +yourself (including unsubscribing and subscribing) you'll need to use asyncio +and the :code:`.connect` method: + +.. code-block:: python + + from polygon import WebSocketClient + from polygon.websocket.models import WebSocketMessage + from typing import List + + c = WebSocketClient(subscriptions=['T.AAPL']) # Uses POLYGON_API_KEY env var. Can optionally supply your key. + + async def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + async def timeout(): + await asyncio.sleep(1) + print('unsubscribe_all') + c.unsubscribe_all() + await asyncio.sleep(1) + print('close') + await c.close() + + async def main(): + await asyncio.gather( + c.connect(handle_msg), + timeout() + ) + + asyncio.run(main()) + +To handle raw messages yourself pass `raw=True`: + +.. code-block:: python + + from polygon import WebSocketClient + from polygon.websocket.models import WebSocketMessage + from typing import Union + import json + + c = WebSocketClient(subscriptions=['T.*'], raw=True) + + def handle_msg(msgs: Union[str, bytes]): + print(json.loads(msgs)) + + c.run(handle_msg) + diff --git a/docs/source/WebSocket.rst b/docs/source/WebSocket.rst index f66d9fae..e433f16d 100644 --- a/docs/source/WebSocket.rst +++ b/docs/source/WebSocket.rst @@ -13,6 +13,11 @@ Connect ============================ .. automethod:: polygon.WebSocketClient.connect +============================ +Run +============================ +.. automethod:: polygon.WebSocketClient.run + ============================ Subscribe ============================ diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 2538d91b..5f5402ec 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -2,13 +2,12 @@ from enum import Enum from typing import Optional, Union, List, Set, Callable, Awaitable import json -import inspect +import asyncio import ssl import certifi from .models import * from websockets.client import connect, WebSocketClientProtocol from websockets.exceptions import ConnectionClosedOK, ConnectionClosedError -from websockets.typing import Data env_key = "POLYGON_API_KEY" @@ -66,7 +65,10 @@ def __init__( # https://websockets.readthedocs.io/en/stable/reference/client.html#opening-a-connection async def connect( self, - processor: Callable[[Union[List[WebSocketMessage], Data]], Optional[Awaitable]], + processor: Union[ + Callable[[List[WebSocketMessage]], Awaitable], + Callable[[Union[str, bytes]], Awaitable], + ], close_timeout: int = 1, **kwargs, ): @@ -78,7 +80,6 @@ async def connect( :raises AuthError: If invalid API key is supplied. """ reconnects = 0 - isasync = inspect.iscoroutinefunction(processor) if self.verbose: print("connect:", self.url) # darwin needs some extra <3 @@ -116,7 +117,9 @@ async def connect( self.subs = set(self.scheduled_subs) self.schedule_resub = False - cmsg: Union[List[WebSocketMessage], Data] = await s.recv() + cmsg: Union[ + List[WebSocketMessage], Union[str, bytes] + ] = await s.recv() # we know cmsg is Data msgJson = json.loads(cmsg) # type: ignore for m in msgJson: @@ -128,11 +131,7 @@ async def connect( cmsg = parse(msgJson) if len(cmsg) > 0: - if isasync: - # we know processor is Awaitable - await processor(cmsg) # type: ignore - else: - processor(cmsg) + await processor(cmsg) # type: ignore except ConnectionClosedOK: if self.verbose: print("connection closed (OK)") @@ -145,6 +144,28 @@ async def connect( return continue + def run( + self, + handle_msg: Union[ + Callable[[List[WebSocketMessage]], None], + Callable[[Union[str, bytes]], None], + ], + close_timeout: int = 1, + **kwargs, + ): + """ + Connect to websocket server and run `processor(msg)` on every new `msg`. Synchronous version of `.connect`. + + :param processor: The callback to process messages. + :param close_timeout: How long to wait for handshake when calling .close. + :raises AuthError: If invalid API key is supplied. + """ + + async def handle_msg_wrapper(msgs): + handle_msg(msgs) + + asyncio.run(self.connect(handle_msg_wrapper, close_timeout, **kwargs)) + async def _subscribe(self, topics: Union[List[str], Set[str]]): if self.websocket is None or len(topics) == 0: return diff --git a/websockets-example.py b/websockets-example.py index 21aef31a..3675d003 100644 --- a/websockets-example.py +++ b/websockets-example.py @@ -1,34 +1,67 @@ -import asyncio from polygon import WebSocketClient -from polygon.websocket.models import Market, Feed, WebSocketMessage +from polygon.websocket.models import WebSocketMessage, EquityTrade +from typing import List # import logging # logging.basicConfig( # format="%(asctime)s %(message)s", # level=logging.DEBUG, # ) -count = 0 -c = WebSocketClient(market=Market.Stocks, feed=Feed.RealTime) -c.subscribe('T.AAPL') +c = WebSocketClient(subscriptions=['T.*']) -async def handle_msg(msg: WebSocketMessage): - global count, c - print(count, msg) - count += 1 +# Sync +# def handle_msg(msgs: List[WebSocketMessage]): +# for m in msgs: +# print(m) +# +# c.run(handle_msg) -async def timeout(): - await asyncio.sleep(1) - print('unsubscribe_all') - c.unsubscribe_all() - await asyncio.sleep(1) - print('close') - await c.close() +# Sync aggs +# class MessageHandler: +# count = 0 +# +# def handle_msg(self, msgs: List[WebSocketMessage]): +# for m in msgs: +# if type(m) == EquityTrade: +# print(self.count, m) +# self.count += 1 +# +# h = MessageHandler() +# +# def handle_msg(msgs: List[WebSocketMessage]): +# h.handle_msg(msgs) +# +# c.run(handle_msg) -async def main(): - await asyncio.gather( - c.connect(handle_msg), - timeout() - ) - -asyncio.run(main()) +# Async +# import asyncio +# async def handle_msg(msgs: List[WebSocketMessage]): +# for m in msgs: +# print(m) +# +# async def timeout(): +# await asyncio.sleep(1) +# print('unsubscribe_all') +# c.unsubscribe_all() +# await asyncio.sleep(1) +# print('close') +# await c.close() +# +# async def main(): +# await asyncio.gather( +# c.connect(handle_msg), +# timeout() +# ) +# +# asyncio.run(main()) +# Raw +# import json +# from typing import Union +# +# c = WebSocketClient(subscriptions=['T.*'], raw=True) +# +# def handle_msg(msgs: Union[str, bytes]): +# print(json.loads(msgs)) +# +# c.run(handle_msg) From a465ba5a3ff8c4d8142e32e83b53cb5683d97f23 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 9 May 2022 10:32:24 -0400 Subject: [PATCH 067/448] fix get_ticker_details (#166) * fix get_ticker_details * fix lint --- polygon/rest/models/tickers.py | 6 +- polygon/rest/reference.py | 6 +- rest-example.py | 2 + .../mocks/v3/reference/tickers/AAPL.json | 70 ++++++++++--------- test_rest/test_tickers.py | 30 ++++---- 5 files changed, 59 insertions(+), 55 deletions(-) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 767fe5ca..51da29de 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -98,10 +98,8 @@ class TickerDetails: def from_dict(d): return TickerDetails( active=d.get("active", None), - address=None if "address" not in d else [Address.from_dict(d["address"])], - branding=None - if "branding" not in d - else [Branding.from_dict(d["branding"])], + address=None if "address" not in d else Address.from_dict(d["address"]), + branding=None if "branding" not in d else Branding.from_dict(d["branding"]), cik=d.get("cik", None), composite_figi=d.get("composite_figi", None), currency_name=d.get("currency_name", None), diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 5082e35b..7f681314 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -135,7 +135,11 @@ def get_ticker_details( url = f"/v3/reference/tickers/{ticker}" return self._get( - path=url, params=params, deserializer=TickerDetails.from_dict, raw=raw + path=url, + params=params, + deserializer=TickerDetails.from_dict, + raw=raw, + result_key="results", ) def list_ticker_news( diff --git a/rest-example.py b/rest-example.py index 1bd13b3f..b7269fc9 100644 --- a/rest-example.py +++ b/rest-example.py @@ -7,3 +7,5 @@ print(aggs) aggs = client.get_aggs("AAPL", 1, "day", date(2005, 4, 4), datetime(2005, 4, 4)) print(aggs) +details = client.get_ticker_details('AAPL') +print(details) diff --git a/test_rest/mocks/v3/reference/tickers/AAPL.json b/test_rest/mocks/v3/reference/tickers/AAPL.json index 1bc153d5..306fb384 100644 --- a/test_rest/mocks/v3/reference/tickers/AAPL.json +++ b/test_rest/mocks/v3/reference/tickers/AAPL.json @@ -1,34 +1,38 @@ { - "ticker": "AAPL", - "name": "Apple Inc.", - "market": "stocks", - "locale": "us", - "primary_exchange": "XNAS", - "type": "CS", - "active": true, - "currency_name": "usd", - "cik": "0000320193", - "composite_figi": "BBG000B9XRY4", - "share_class_figi": "BBG001S5N8V8", - "market_cap": 2671492491700.0, - "phone_number": "(408) 996-1010", - "address": { - "address1": "ONE APPLE PARK WAY", - "city": "CUPERTINO", - "state": "CA", - "postal_code": "95014" - }, - "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.", - "sic_code": "3571", - "sic_description": "ELECTRONIC COMPUTERS", - "ticker_root": "AAPL", - "homepage_url": "https://www.apple.com", - "total_employees": 154000, - "list_date": "1980-12-12", - "branding": { - "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", - "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png" - }, - "share_class_shares_outstanding": 16319440000, - "weighted_shares_outstanding": 16319441000 -} \ No newline at end of file + "results": { + "ticker": "AAPL", + "name": "Apple Inc.", + "market": "stocks", + "locale": "us", + "primary_exchange": "XNAS", + "type": "CS", + "active": true, + "currency_name": "usd", + "cik": "0000320193", + "composite_figi": "BBG000B9XRY4", + "share_class_figi": "BBG001S5N8V8", + "market_cap": 2488795282370, + "phone_number": "(408) 996-1010", + "address": { + "address1": "ONE APPLE PARK WAY", + "city": "CUPERTINO", + "state": "CA", + "postal_code": "95014" + }, + "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", + "sic_code": "3571", + "sic_description": "ELECTRONIC COMPUTERS", + "ticker_root": "AAPL", + "homepage_url": "https://www.apple.com", + "total_employees": 154000, + "list_date": "1980-12-12", + "branding": { + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-05-01_logo.svg", + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-05-01_icon.png" + }, + "share_class_shares_outstanding": 16319440000, + "weighted_shares_outstanding": 16185181000 + }, + "status": "OK", + "request_id": "ce8688b5f3a571351376ebd77acd146e" +} diff --git a/test_rest/test_tickers.py b/test_rest/test_tickers.py index f6b0e339..bc48e641 100644 --- a/test_rest/test_tickers.py +++ b/test_rest/test_tickers.py @@ -93,31 +93,27 @@ def test_get_ticker_details(self): details = self.c.get_ticker_details("AAPL") expected = TickerDetails( active=True, - address=[ - Address( - address1="ONE APPLE PARK WAY", - city="CUPERTINO", - state="CA", - postal_code="95014", - ) - ], - branding=[ - Branding( - icon_url="https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_icon.png", - logo_url="https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-02-01_logo.svg", - ) - ], + address=Address( + address1="ONE APPLE PARK WAY", + city="CUPERTINO", + state="CA", + postal_code="95014", + ), + branding=Branding( + icon_url="https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-05-01_icon.png", + logo_url="https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-05-01_logo.svg", + ), cik="0000320193", composite_figi="BBG000B9XRY4", currency_name="usd", delisted_utc=None, - description="Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apples total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apples products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apples products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40 of its revenue from the Americas, with the remainder earned internationally.", + description="Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", ticker_root="AAPL", homepage_url="https://www.apple.com", list_date="1980-12-12", locale="us", market="stocks", - market_cap=2671492491700.0, + market_cap=2488795282370, name="Apple Inc.", phone_number="(408) 996-1010", primary_exchange="XNAS", @@ -128,7 +124,7 @@ def test_get_ticker_details(self): ticker="AAPL", total_employees=154000, type="CS", - weighted_shares_outstanding=16319441000, + weighted_shares_outstanding=16185181000, ) self.assertEqual(details, expected) From 63aba0e5b4348d8ccf011b54344820c2c51ca483 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 9 May 2022 11:10:48 -0400 Subject: [PATCH 068/448] move examples to example dir (#167) * move examples to example dir * update readme * update readme (2) --- README.md | 119 +----------------- docs/source/Getting-Started.rst | 212 ++------------------------------ docs/source/WebSocket.rst | 1 + docs/source/index.rst | 4 +- examples/rest/raw-get.py | 41 ++++++ examples/rest/raw-list.py | 78 ++++++++++++ examples/rest/simple-get.py | 14 +++ examples/rest/simple-list.py | 8 ++ examples/websocket/aggs.py | 21 ++++ examples/websocket/async.py | 26 ++++ examples/websocket/raw.py | 10 ++ examples/websocket/simple.py | 11 ++ rest-example.py | 11 -- websockets-example.py | 67 ---------- 14 files changed, 226 insertions(+), 397 deletions(-) create mode 100644 examples/rest/raw-get.py create mode 100644 examples/rest/raw-list.py create mode 100644 examples/rest/simple-get.py create mode 100644 examples/rest/simple-list.py create mode 100644 examples/websocket/aggs.py create mode 100644 examples/websocket/async.py create mode 100644 examples/websocket/raw.py create mode 100644 examples/websocket/simple.py delete mode 100644 rest-example.py delete mode 100644 websockets-example.py diff --git a/README.md b/README.md index bea6c42f..6d38d62f 100644 --- a/README.md +++ b/README.md @@ -9,119 +9,8 @@ Python client for the [Polygon.io API](https://polygon.io). `pip install polygon-api-client` -Requires python version >= 3.7 +Requires Python >= 3.7. -## REST getting started -### Getting aggs -```python -from polygon import RESTClient - -client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key. -aggs = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") -``` - -### Getting trades -```python -from polygon import RESTClient -from polygon.rest.models import Sort - -client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key. - -trades = [] -for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC): - trades.append(t) -``` - -### Getting raw response -To handle the raw [urllib3 response](https://urllib3.readthedocs.io/en/stable/reference/urllib3.response.html?highlight=response#response) yourself, pass `raw=True`: - -```python -from polygon import RESTClient - -client = RESTClient() # Uses POLYGON_API_KEY env var. Can optionally supply your key. -response = client.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04", raw=True) -``` - -## WebSocket getting started - -### Simple synchronous callback -```python -from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage -from typing import List - -c = WebSocketClient(subscriptions=['T.AAPL']) # Uses POLYGON_API_KEY env var. Can optionally supply your key. - -def handle_msg(msgs: List[WebSocketMessage]): - for m in msgs: - print(m) - -c.run(handle_msg) -``` - -### Synchronous aggregates -```python -from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage -from typing import List - -class MessageHandler: - count = 0 - - def handle_msg(self, msgs: List[WebSocketMessage]): - for m in msgs: - if type(m) == EquityTrade: - print(self.count, m) - self.count += 1 - -h = MessageHandler() - -def handle_msg(msgs: List[WebSocketMessage]): - h.handle_msg(msgs) - -c.run(handle_msg) -``` - -### Asynchronous callback -```python -from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage -from typing import List - -c = WebSocketClient(subscriptions=['T.AAPL']) # Uses POLYGON_API_KEY env var. Can optionally supply your key. - -async def handle_msg(msgs: List[WebSocketMessage]): - for m in msgs: - print(m) - -async def timeout(): - await asyncio.sleep(1) - print('unsubscribe_all') - c.unsubscribe_all() - await asyncio.sleep(1) - print('close') - await c.close() - -async def main(): - await asyncio.gather( - c.connect(handle_msg), - timeout() - ) - -asyncio.run(main()) -``` - -### Getting raw response -```python -from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage -from typing import Union -import json - -c = WebSocketClient(subscriptions=['T.*'], raw=True) - -def handle_msg(msgs: Union[str, bytes]): - print(json.loads(msgs)) - -c.run(handle_msg) -``` +## Getting started +See the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) +section in our docs or view the [examples](./examples) directory. diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index d0f44402..83ea037f 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -26,19 +26,11 @@ You can pass your API key via the environment variable :code:`POLYGON_API_KEY` o For non-paginated endpoints call :code:`get_*`: -.. code-block:: python - - aggs = client.get_aggs("AAPL", 1, "day", "2022-04-01", "2022-04-04") - print(aggs) +.. literalinclude:: ../../examples/rest/simple-get.py For paginated endpoints call :code:`list_*` and use the provided iterator: -.. code-block:: python - - trades = [] - for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5, sort=Sort.ASC) - trades.append(t) - print(trades) +.. literalinclude:: ../../examples/rest/simple-list.py .. note:: The number of network requests made by the iterator depends on the value of the parameter :code:`limit`. @@ -55,125 +47,11 @@ For endpoints that have a set of parameters you can use the provided :doc:`enums To handle the raw `urllib3 response `_ yourself pass :code:`raw=True`: -.. code-block:: python - - aggs = client.get_aggs("AAPL", 1, "day", "2022-04-01", "2022-04-04", raw=True) - print(aggs.geturl()) - # https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2022-04-01/2022-04-04 - print(aggs.status) - # 200 - print(aggs.data) - # b'{ - # "ticker": "AAPL", - # "queryCount": 2, - # "resultsCount": 2, - # "adjusted": true, - # "results": [ - # { - # "v": 78251328, - # "vw": 173.4143, - # "o": 174.03, - # "c": 174.31, - # "h": 174.88, - # "l": 171.94, - # "t": 1648785600000, - # "n": 661160 - # }, - # { - # "v": 76545983, - # "vw": 177.4855, - # "o": 174.57, - # "c": 178.44, - # "h": 178.49, - # "l": 174.44, - # "t": 1649044800000, - # "n": 630374 - # } - # ], - # "status": "OK", - # "request_id": "d8882a9d5194978819777f49c44b09c6", - # "count": 2 - # }' +.. literalinclude:: ../../examples/rest/raw-get.py If it is a paginated :code:`list_*` response it's up to you to handle the "next_url" iteration: -.. code-block:: python - - trades = client.list_trades("AAA", timestamp="2022-04-20", limit=5) - print(aggs.data) - # b'{ - # "results": [ - # { - # "conditions": [ - # 15 - # ], - # "exchange": 11, - # "id": "52983575627601", - # "participant_timestamp": 1650499200029279200, - # "price": 24.875, - # "sequence_number": 1591291, - # "sip_timestamp": 1650499200029316600, - # "size": 100, - # "tape": 1 - # }, - # { - # "conditions": [ - # 38, - # 41 - # ], - # "exchange": 11, - # "id": "52983575627600", - # "participant_timestamp": 1650499200029279200, - # "price": 24.875, - # "sequence_number": 1591290, - # "sip_timestamp": 1650499200029316600, - # "tape": 1 - # }, - # { - # "conditions": [ - # 15 - # ], - # "exchange": 11, - # "id": "52983575622470", - # "participant_timestamp": 1650493800003024000, - # "price": 24.875, - # "sequence_number": 1571279, - # "sip_timestamp": 1650493800003645400, - # "size": 100, - # "tape": 1 - # }, - # { - # "conditions": [ - # 38, - # 41 - # ], - # "exchange": 11, - # "id": "52983575622469", - # "participant_timestamp": 1650493800003024000, - # "price": 24.875, - # "sequence_number": 1571276, - # "sip_timestamp": 1650493800003635500, - # "tape": 1 - # }, - # { - # "conditions": [ - # 15 - # ], - # "exchange": 11, - # "id": "52983575556178", - # "participant_timestamp": 1650485400002987800, - # "price": 24.875, - # "sequence_number": 1536223, - # "sip_timestamp": 1650485400003870000, - # "size": 100, - # "tape": 1 - # } - # ], - # "status": "OK", - # "request_id": "618bb99e7a632ed9f55454a541404b44", - # "next_url": "https://api.polygon.io/v3/trades/AAA?cursor=YXA9NSZhcz0mbGltaXQ9NSZvcmRlcj1kZXNjJnNvcnQ9dGltZXN0YW1wJnRpbWVzdGFtcC5ndGU9MjAyMi0wNC0yMFQwNCUzQTAwJTNBMDBaJnRpbWVzdGFtcC5sdGU9MjAyMi0wNC0yMFQyMCUzQTEwJTNBMDAuMDAzODY5OTUyWg" - # }' - +.. literalinclude:: ../../examples/rest/raw-list.py WebSocket client usage ---------------------- @@ -182,19 +60,7 @@ WebSocket client usage The simplest way to use the websocket client is to just provide a callback: -.. code-block:: python - - from polygon import WebSocketClient - from polygon.websocket.models import WebSocketMessage - from typing import List - - c = WebSocketClient(subscriptions=['T.AAPL']) - - def handle_msg(msgs: List[WebSocketMessage]): - for m in msgs: - print(m) - - c.run(handle_msg) +.. literalinclude:: ../../examples/websocket/simple.py .. note:: Raises :code:`AuthError` if invalid API key is provided. @@ -202,73 +68,15 @@ The simplest way to use the websocket client is to just provide a callback: If you want to capture state you can use a global variable inside the callback. Alternatively, you can wrap a class method in a closure. -.. code-block:: python - - from polygon import WebSocketClient - from polygon.websocket.models import WebSocketMessage - from typing import List - - class MessageHandler: - count = 0 - - def handle_msg(self, msgs: List[WebSocketMessage]): - for m in msgs: - if type(m) == EquityTrade: - print(self.count, m) - self.count += 1 - - h = MessageHandler() - - def handle_msg(msgs: List[WebSocketMessage]): - h.handle_msg(msgs) - - c.run(handle_msg) +.. literalinclude:: ../../examples/websocket/aggs.py Under the hood our client uses an asynchronous runtime. To manage the runtime -yourself (including unsubscribing and subscribing) you'll need to use asyncio -and the :code:`.connect` method: - -.. code-block:: python - - from polygon import WebSocketClient - from polygon.websocket.models import WebSocketMessage - from typing import List - - c = WebSocketClient(subscriptions=['T.AAPL']) # Uses POLYGON_API_KEY env var. Can optionally supply your key. +yourself (including unsubscribing and subscribing) you can use asyncio and the +:code:`.connect` method: - async def handle_msg(msgs: List[WebSocketMessage]): - for m in msgs: - print(m) - - async def timeout(): - await asyncio.sleep(1) - print('unsubscribe_all') - c.unsubscribe_all() - await asyncio.sleep(1) - print('close') - await c.close() - - async def main(): - await asyncio.gather( - c.connect(handle_msg), - timeout() - ) - - asyncio.run(main()) +.. literalinclude:: ../../examples/websocket/async.py To handle raw messages yourself pass `raw=True`: -.. code-block:: python - - from polygon import WebSocketClient - from polygon.websocket.models import WebSocketMessage - from typing import Union - import json - - c = WebSocketClient(subscriptions=['T.*'], raw=True) - - def handle_msg(msgs: Union[str, bytes]): - print(json.loads(msgs)) - - c.run(handle_msg) +.. literalinclude:: ../../examples/websocket/raw.py diff --git a/docs/source/WebSocket.rst b/docs/source/WebSocket.rst index e433f16d..c57f3295 100644 --- a/docs/source/WebSocket.rst +++ b/docs/source/WebSocket.rst @@ -7,6 +7,7 @@ WebSocket Init client =========== .. automethod:: polygon.WebSocketClient.__init__ + :noindex: ============================ Connect diff --git a/docs/source/index.rst b/docs/source/index.rst index efe82e2f..7dfae168 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -7,7 +7,7 @@ This documentation is for the Python client only. For details about the response :maxdepth: 1 :caption: Contents: - Getting-Started + Getting-started Aggs WebSocket Snapshot @@ -17,7 +17,7 @@ This documentation is for the Python client only. For details about the response vX Models Enums - WebSocket-Enums + WebSocket-enums Indices and tables ================== diff --git a/examples/rest/raw-get.py b/examples/rest/raw-get.py new file mode 100644 index 00000000..ef127410 --- /dev/null +++ b/examples/rest/raw-get.py @@ -0,0 +1,41 @@ +from polygon import RESTClient + +client = RESTClient(verbose=True) + +aggs = client.get_aggs("AAPL", 1, "day", "2022-04-01", "2022-04-04", raw=True) +print(aggs.geturl()) +# https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2022-04-01/2022-04-04 +print(aggs.status) +# 200 +print(aggs.data) +# b'{ +# "ticker": "AAPL", +# "queryCount": 2, +# "resultsCount": 2, +# "adjusted": true, +# "results": [ +# { +# "v": 78251328, +# "vw": 173.4143, +# "o": 174.03, +# "c": 174.31, +# "h": 174.88, +# "l": 171.94, +# "t": 1648785600000, +# "n": 661160 +# }, +# { +# "v": 76545983, +# "vw": 177.4855, +# "o": 174.57, +# "c": 178.44, +# "h": 178.49, +# "l": 174.44, +# "t": 1649044800000, +# "n": 630374 +# } +# ], +# "status": "OK", +# "request_id": "d8882a9d5194978819777f49c44b09c6", +# "count": 2 +# }' diff --git a/examples/rest/raw-list.py b/examples/rest/raw-list.py new file mode 100644 index 00000000..4ac492d6 --- /dev/null +++ b/examples/rest/raw-list.py @@ -0,0 +1,78 @@ +from polygon import RESTClient + +client = RESTClient(verbose=True) + +trades = client.list_trades("AAA", timestamp="2022-04-20", limit=5, raw=True) +print(trades.data) +# b'{ +# "results": [ +# { +# "conditions": [ +# 15 +# ], +# "exchange": 11, +# "id": "52983575627601", +# "participant_timestamp": 1650499200029279200, +# "price": 24.875, +# "sequence_number": 1591291, +# "sip_timestamp": 1650499200029316600, +# "size": 100, +# "tape": 1 +# }, +# { +# "conditions": [ +# 38, +# 41 +# ], +# "exchange": 11, +# "id": "52983575627600", +# "participant_timestamp": 1650499200029279200, +# "price": 24.875, +# "sequence_number": 1591290, +# "sip_timestamp": 1650499200029316600, +# "tape": 1 +# }, +# { +# "conditions": [ +# 15 +# ], +# "exchange": 11, +# "id": "52983575622470", +# "participant_timestamp": 1650493800003024000, +# "price": 24.875, +# "sequence_number": 1571279, +# "sip_timestamp": 1650493800003645400, +# "size": 100, +# "tape": 1 +# }, +# { +# "conditions": [ +# 38, +# 41 +# ], +# "exchange": 11, +# "id": "52983575622469", +# "participant_timestamp": 1650493800003024000, +# "price": 24.875, +# "sequence_number": 1571276, +# "sip_timestamp": 1650493800003635500, +# "tape": 1 +# }, +# { +# "conditions": [ +# 15 +# ], +# "exchange": 11, +# "id": "52983575556178", +# "participant_timestamp": 1650485400002987800, +# "price": 24.875, +# "sequence_number": 1536223, +# "sip_timestamp": 1650485400003870000, +# "size": 100, +# "tape": 1 +# } +# ], +# "status": "OK", +# "request_id": "618bb99e7a632ed9f55454a541404b44", +# "next_url": "https://api.polygon.io/v3/trades/AAA?cursor=YXA9NSZhcz0mbGltaXQ9NSZvcmRlcj1kZXNjJnNvcnQ9dGltZXN0YW1wJnRpbWVzdGFtcC5ndGU9MjAyMi0wNC0yMFQwNCUzQTAwJTNBMDBaJnRpbWVzdGFtcC5sdGU9MjAyMi0wNC0yMFQyMCUzQTEwJTNBMDAuMDAzODY5OTUyWg" +# }' diff --git a/examples/rest/simple-get.py b/examples/rest/simple-get.py new file mode 100644 index 00000000..b30e159f --- /dev/null +++ b/examples/rest/simple-get.py @@ -0,0 +1,14 @@ +from polygon import RESTClient +from datetime import date, datetime + +client = RESTClient(verbose=True) + +aggs1 = client.get_aggs("AAPL", 1, "day", "2005-04-04", "2005-04-04") +aggs2 = client.get_aggs("AAPL", 1, "day", date(2005, 4, 4), datetime(2005, 4, 4)) + +if aggs1 != aggs2: + print(aggs1, aggs2) + assert(False) +else: + print(aggs1) + diff --git a/examples/rest/simple-list.py b/examples/rest/simple-list.py new file mode 100644 index 00000000..f7949547 --- /dev/null +++ b/examples/rest/simple-list.py @@ -0,0 +1,8 @@ +from polygon import RESTClient + +client = RESTClient(verbose=True) + +trades = [] +for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5): + trades.append(t) +print(trades) diff --git a/examples/websocket/aggs.py b/examples/websocket/aggs.py new file mode 100644 index 00000000..8ba489e5 --- /dev/null +++ b/examples/websocket/aggs.py @@ -0,0 +1,21 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, EquityTrade +from typing import List + +c = WebSocketClient(subscriptions=['T.*']) + +class MessageHandler: + count = 0 + + def handle_msg(self, msgs: List[WebSocketMessage]): + for m in msgs: + if type(m) == EquityTrade: + print(self.count, m) + self.count += 1 + +h = MessageHandler() + +def handle_msg(msgs: List[WebSocketMessage]): + h.handle_msg(msgs) + +c.run(handle_msg) diff --git a/examples/websocket/async.py b/examples/websocket/async.py new file mode 100644 index 00000000..c9a5b3a1 --- /dev/null +++ b/examples/websocket/async.py @@ -0,0 +1,26 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List +import asyncio + +c = WebSocketClient(subscriptions=['T.*']) + +async def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + +async def timeout(): + await asyncio.sleep(1) + print('unsubscribe_all') + c.unsubscribe_all() + await asyncio.sleep(1) + print('close') + await c.close() + +async def main(): + await asyncio.gather( + c.connect(handle_msg), + timeout() + ) + +asyncio.run(main()) diff --git a/examples/websocket/raw.py b/examples/websocket/raw.py new file mode 100644 index 00000000..74c6d91e --- /dev/null +++ b/examples/websocket/raw.py @@ -0,0 +1,10 @@ +from polygon import WebSocketClient +from typing import Union +import json + +c = WebSocketClient(subscriptions=['T.*'], raw=True) + +def handle_msg(msgs: Union[str, bytes]): + print(json.loads(msgs)) + +c.run(handle_msg) diff --git a/examples/websocket/simple.py b/examples/websocket/simple.py new file mode 100644 index 00000000..f6596886 --- /dev/null +++ b/examples/websocket/simple.py @@ -0,0 +1,11 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List + +c = WebSocketClient(subscriptions=['T.*']) + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + +c.run(handle_msg) diff --git a/rest-example.py b/rest-example.py deleted file mode 100644 index b7269fc9..00000000 --- a/rest-example.py +++ /dev/null @@ -1,11 +0,0 @@ -from polygon import RESTClient -from datetime import date, datetime - -client = RESTClient(verbose=True) - -aggs = client.get_aggs("AAPL", 1, "day", "2005-04-04", "2005-04-04") -print(aggs) -aggs = client.get_aggs("AAPL", 1, "day", date(2005, 4, 4), datetime(2005, 4, 4)) -print(aggs) -details = client.get_ticker_details('AAPL') -print(details) diff --git a/websockets-example.py b/websockets-example.py deleted file mode 100644 index 3675d003..00000000 --- a/websockets-example.py +++ /dev/null @@ -1,67 +0,0 @@ -from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage, EquityTrade -from typing import List -# import logging -# logging.basicConfig( -# format="%(asctime)s %(message)s", -# level=logging.DEBUG, -# ) - -c = WebSocketClient(subscriptions=['T.*']) - -# Sync -# def handle_msg(msgs: List[WebSocketMessage]): -# for m in msgs: -# print(m) -# -# c.run(handle_msg) - -# Sync aggs -# class MessageHandler: -# count = 0 -# -# def handle_msg(self, msgs: List[WebSocketMessage]): -# for m in msgs: -# if type(m) == EquityTrade: -# print(self.count, m) -# self.count += 1 -# -# h = MessageHandler() -# -# def handle_msg(msgs: List[WebSocketMessage]): -# h.handle_msg(msgs) -# -# c.run(handle_msg) - -# Async -# import asyncio -# async def handle_msg(msgs: List[WebSocketMessage]): -# for m in msgs: -# print(m) -# -# async def timeout(): -# await asyncio.sleep(1) -# print('unsubscribe_all') -# c.unsubscribe_all() -# await asyncio.sleep(1) -# print('close') -# await c.close() -# -# async def main(): -# await asyncio.gather( -# c.connect(handle_msg), -# timeout() -# ) -# -# asyncio.run(main()) - -# Raw -# import json -# from typing import Union -# -# c = WebSocketClient(subscriptions=['T.*'], raw=True) -# -# def handle_msg(msgs: Union[str, bytes]): -# print(json.loads(msgs)) -# -# c.run(handle_msg) From a0300a9c539435aa16d2f2684edda750a0cac364 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 9 May 2022 11:20:56 -0400 Subject: [PATCH 069/448] cryptotrade: rename sym to pair (#168) --- examples/websocket/crypto.py | 11 +++++++++++ polygon/websocket/models/models.py | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 examples/websocket/crypto.py diff --git a/examples/websocket/crypto.py b/examples/websocket/crypto.py new file mode 100644 index 00000000..87bfb8c9 --- /dev/null +++ b/examples/websocket/crypto.py @@ -0,0 +1,11 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, Market +from typing import List + +c = WebSocketClient(market=Market.Crypto, subscriptions=['XT.*']) + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + +c.run(handle_msg) diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index d4b1d322..53f7743d 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -107,7 +107,7 @@ def from_dict(d): class CryptoTrade: "CryptoTrade contains trade data for a crypto pair." event_type: Optional[Union[str, EventType]] = None - symbol: Optional[str] = None + pair: Optional[str] = None exchange: Optional[int] = None id: Optional[str] = None price: Optional[float] = None @@ -120,7 +120,7 @@ class CryptoTrade: def from_dict(d): return CryptoTrade( d.get("ev", None), - d.get("sym", None), + d.get("pair", None), d.get("x", None), d.get("i", None), d.get("p", None), From e4d80e879c91589952d66425edc29edac3bb60f3 Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Mon, 9 May 2022 11:46:43 -0400 Subject: [PATCH 070/448] unrename doc titles --- docs/source/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 7dfae168..efe82e2f 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -7,7 +7,7 @@ This documentation is for the Python client only. For details about the response :maxdepth: 1 :caption: Contents: - Getting-started + Getting-Started Aggs WebSocket Snapshot @@ -17,7 +17,7 @@ This documentation is for the Python client only. For details about the response vX Models Enums - WebSocket-enums + WebSocket-Enums Indices and tables ================== From 53c87c999a54ceca9b2fd484eba851525e20a006 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 9 May 2022 13:43:58 -0400 Subject: [PATCH 071/448] address most of caleb feedback (#169) * address most of caleb feedback * beta * fix financials models and test * backlink for aggs --- README.md | 2 +- docs/source/Aggs.rst | 10 + docs/source/Getting-Started.rst | 6 +- polygon/rest/__init__.py | 4 +- polygon/rest/models/financials.py | 74 +++--- polygon/rest/{vx.py => vX.py} | 0 polygon/websocket/__init__.py | 8 +- test_rest/test_financials.py | 421 ++++++++++++++---------------- 8 files changed, 250 insertions(+), 275 deletions(-) rename polygon/rest/{vx.py => vX.py} (100%) diff --git a/README.md b/README.md index 6d38d62f..5de2b34e 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Python client for the [Polygon.io API](https://polygon.io). ## Install -`pip install polygon-api-client` +`pip install polygon-api-client~=1.0.0b` Requires Python >= 3.7. diff --git a/docs/source/Aggs.rst b/docs/source/Aggs.rst index 6db60e68..224da4e4 100644 --- a/docs/source/Aggs.rst +++ b/docs/source/Aggs.rst @@ -6,6 +6,12 @@ Aggs =========== Get aggs =========== + +- `Stock aggs`_ +- `Options aggs`_ +- `Forex aggs`_ +- `Crypto aggs`_ + .. automethod:: polygon.RESTClient.get_aggs ============================ @@ -23,3 +29,7 @@ Get previous close agg ============================ .. automethod:: polygon.RESTClient.get_previous_close_agg +.. _Stock aggs: https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to +.. _Options aggs: https://polygon.io/docs/options/get_v2_aggs_ticker__optionsticker__range__multiplier___timespan___from___to +.. _Forex aggs: https://polygon.io/docs/forex/get_v2_aggs_ticker__forexticker__range__multiplier___timespan___from___to +.. _Crypto aggs: https://polygon.io/docs/crypto/get_v2_aggs_ticker__cryptoticker__range__multiplier___timespan___from___to diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index 83ea037f..dc2171ab 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -8,7 +8,7 @@ Requirements: .. code-block:: shell - pip install polygon-api-client + pip install polygon-api-client~=1.0.0b HTTP client usage ----------------- @@ -45,7 +45,7 @@ For endpoints that have a set of parameters you can use the provided :doc:`enums client.list_trades(..., sort=Sort.ASC) -To handle the raw `urllib3 response `_ yourself pass :code:`raw=True`: +To handle the raw `urllib3 response `_ yourself pass :code:`raw=True`: .. literalinclude:: ../../examples/rest/raw-get.py @@ -76,7 +76,7 @@ yourself (including unsubscribing and subscribing) you can use asyncio and the .. literalinclude:: ../../examples/websocket/async.py -To handle raw messages yourself pass `raw=True`: +To handle raw string or byte messages yourself pass :code:`raw=True`: .. literalinclude:: ../../examples/websocket/raw.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 88f693be..b0c31594 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -10,7 +10,7 @@ ConditionsClient, ExchangesClient, ) -from .vx import VXClient +from .vX import VXClient from typing import Optional import os @@ -50,7 +50,7 @@ def __init__( base=base, verbose=verbose, ) - self.vx = VXClient( + self.vX = VXClient( api_key=api_key, connect_timeout=connect_timeout, read_timeout=read_timeout, diff --git a/polygon/rest/models/financials.py b/polygon/rest/models/financials.py index a31cadaf..6f578187 100644 --- a/polygon/rest/models/financials.py +++ b/polygon/rest/models/financials.py @@ -9,7 +9,7 @@ class DataPoint: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -24,7 +24,7 @@ class ExchangeGainsLosses: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -39,7 +39,7 @@ class NetCashFlow: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -54,7 +54,7 @@ class NetCashFlowFromFinancingActivities: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -76,17 +76,15 @@ def from_dict(d): return CashFlowStatement( exchange_gains_losses=None if "exchange_gains_losses" not in d - else [ExchangeGainsLosses.from_dict(d["exchange_gains_losses"])], + else ExchangeGainsLosses.from_dict(d["exchange_gains_losses"]), net_cash_flow=None if "net_cash_flow" not in d - else [NetCashFlow.from_dict(d["net_cash_flow"])], + else NetCashFlow.from_dict(d["net_cash_flow"]), net_cash_flow_from_financing_activities=None if "net_cash_flow_from_financing_activities" not in d - else [ - NetCashFlowFromFinancingActivities.from_dict( - d["net_cash_flow_from_financing_activities"] - ) - ], + else NetCashFlowFromFinancingActivities.from_dict( + d["net_cash_flow_from_financing_activities"] + ), ) @@ -97,7 +95,7 @@ class ComprehensiveIncomeLoss: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -112,7 +110,7 @@ class ComprehensiveIncomeLossAttributableToParent: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -127,7 +125,7 @@ class OtherComprehensiveIncomeLoss: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -149,21 +147,17 @@ def from_dict(d): return ComprehensiveIncome( comprehensive_income_loss=None if "comprehensive_income_loss" not in d - else [ComprehensiveIncomeLoss.from_dict(d["comprehensive_income_loss"])], + else ComprehensiveIncomeLoss.from_dict(d["comprehensive_income_loss"]), comprehensive_income_loss_attributable_to_parent=None if "comprehensive_income_loss_attributable_to_parent" not in d - else [ - ComprehensiveIncomeLossAttributableToParent.from_dict( - d["comprehensive_income_loss_attributable_to_parent"] - ) - ], + else ComprehensiveIncomeLossAttributableToParent.from_dict( + d["comprehensive_income_loss_attributable_to_parent"] + ), other_comprehensive_income_loss=None if "other_comprehensive_income_loss" not in d - else [ - OtherComprehensiveIncomeLoss.from_dict( - d["other_comprehensive_income_loss"] - ) - ], + else OtherComprehensiveIncomeLoss.from_dict( + d["other_comprehensive_income_loss"] + ), ) @@ -174,7 +168,7 @@ class BasicEarningsPerShare: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -189,7 +183,7 @@ class CostOfRevenue: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -204,7 +198,7 @@ class GrossProfit: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -219,7 +213,7 @@ class OperatingExpenses: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -234,7 +228,7 @@ class Revenues: label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None - value: Optional[int] = None + value: Optional[float] = None xpath: Optional[str] = None @staticmethod @@ -256,19 +250,17 @@ def from_dict(d): return IncomeStatement( basic_earnings_per_share=None if "basic_earnings_per_share" not in d - else [BasicEarningsPerShare.from_dict(d["basic_earnings_per_share"])], + else BasicEarningsPerShare.from_dict(d["basic_earnings_per_share"]), cost_of_revenue=None if "cost_of_revenue" not in d - else [CostOfRevenue.from_dict(d["cost_of_revenue"])], + else CostOfRevenue.from_dict(d["cost_of_revenue"]), gross_profit=None if "gross_profit" not in d - else [GrossProfit.from_dict(d["gross_profit"])], + else GrossProfit.from_dict(d["gross_profit"]), operating_expenses=None if "operating_expenses" not in d - else [OperatingExpenses.from_dict(d["operating_expenses"])], - revenues=None - if "revenues" not in d - else [Revenues.from_dict(d["revenues"])], + else OperatingExpenses.from_dict(d["operating_expenses"]), + revenues=None if "revenues" not in d else Revenues.from_dict(d["revenues"]), ) @@ -288,13 +280,13 @@ def from_dict(d): else {k: DataPoint.from_dict(v) for (k, v) in d["balance_sheet"].items()}, cash_flow_statement=None if "cash_flow_statement" not in d - else [CashFlowStatement.from_dict(d["cash_flow_statement"])], + else CashFlowStatement.from_dict(d["cash_flow_statement"]), comprehensive_income=None if "comprehensive_income" not in d - else [ComprehensiveIncome.from_dict(d["comprehensive_income"])], + else ComprehensiveIncome.from_dict(d["comprehensive_income"]), income_statement=None if "income_statement" not in d - else [IncomeStatement.from_dict(d["income_statement"])], + else IncomeStatement.from_dict(d["income_statement"]), ) @@ -321,7 +313,7 @@ def from_dict(d): filing_date=d.get("filing_date", None), financials=None if "financials" not in d - else [Financials.from_dict(d["financials"])], + else Financials.from_dict(d["financials"]), fiscal_period=d.get("fiscal_period", None), fiscal_year=d.get("fiscal_year", None), source_filing_file_url=d.get("source_filing_file_url", None), diff --git a/polygon/rest/vx.py b/polygon/rest/vX.py similarity index 100% rename from polygon/rest/vx.py rename to polygon/rest/vX.py diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 5f5402ec..eccd0e03 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -24,7 +24,7 @@ def __init__( market: Union[str, Market] = Market.Stocks, raw: bool = False, verbose: bool = False, - subscriptions: List[str] = [], + subscriptions: Optional[List[str]] = None, max_reconnects: Optional[int] = 5, secure: bool = True, **kwargs, @@ -33,8 +33,8 @@ def __init__( Initialize a Polygon WebSocketClient. :param api_key: Your API keYour API key. - :param feed: The feed to subscribe to (default RealTime) - :param raw: The market to subscribe to (default Stocks) + :param feed: The feed to subscribe to. + :param raw: Whether to pass raw Union[str, bytes] to user callback. :param verbose: Whether to print client and server status messages. :param subscriptions: List of subscription parameters. :param max_reconnects: How many times to reconnect on network outage before ending .connect event loop. @@ -59,6 +59,8 @@ def __init__( self.subs: Set[str] = set() self.max_reconnects = max_reconnects self.websocket: Optional[WebSocketClientProtocol] = None + if subscriptions is None: + subscriptions = [] self.scheduled_subs = set(subscriptions) self.schedule_resub = True diff --git a/test_rest/test_financials.py b/test_rest/test_financials.py index fcd9be81..7a00a9db 100644 --- a/test_rest/test_financials.py +++ b/test_rest/test_financials.py @@ -22,237 +22,207 @@ class FinancialsTest(BaseTest): def test_list_stock_financials(self): - financials = [f for f in self.c.vx.list_stock_financials()] + financials = [f for f in self.c.vX.list_stock_financials()] expected = [ StockFinancial( cik="0001413447", company_name="NXP Semiconductors N.V.", end_date="2022-04-03", filing_date="2022-05-03", - financials=[ - Financials( - balance_sheet={ - "equity_attributable_to_noncontrolling_interest": DataPoint( - formula=None, - label="Equity Attributable To Noncontrolling Interest", - order=1500, - unit="USD", - value=251000000.0, - xpath=None, - ), - "liabilities": DataPoint( - formula=None, - label="Liabilities", - order=600, - unit="USD", - value=14561000000.0, - xpath=None, - ), - "equity_attributable_to_parent": DataPoint( - formula=None, - label="Equity Attributable To Parent", - order=1600, - unit="USD", - value=6509000000.0, - xpath=None, - ), - "noncurrent_assets": DataPoint( - formula=None, - label="Noncurrent Assets", - order=300, - unit="USD", - value=16046000000.0, - xpath=None, - ), - "liabilities_and_equity": DataPoint( - formula=None, - label="Liabilities And Equity", - order=1900, - unit="USD", - value=21321000000.0, - xpath=None, - ), - "assets": DataPoint( - formula=None, - label="Assets", - order=100, - unit="USD", - value=21321000000.0, - xpath=None, - ), - "fixed_assets": DataPoint( - formula=None, - label="Fixed Assets", - order=400, - unit="USD", - value=2814000000.0, - xpath=None, - ), - "other_than_fixed_noncurrent_assets": DataPoint( - formula=None, - label="Other Than Fixed Noncurrent Assets", - order=500, - unit="USD", - value=16046000000.0, - xpath=None, - ), - "noncurrent_liabilities": DataPoint( - formula=None, - label="Noncurrent Liabilities", - order=800, - unit="USD", - value=11716000000.0, - xpath=None, - ), - "current_assets": DataPoint( - formula=None, - label="Current Assets", - order=200, - unit="USD", - value=5275000000.0, - xpath=None, - ), - "equity": DataPoint( - formula=None, - label="Equity", - order=1400, - unit="USD", - value=6760000000.0, - xpath=None, - ), - "current_liabilities": DataPoint( - formula=None, - label="Current Liabilities", - order=700, - unit="USD", - value=2845000000.0, - xpath=None, - ), - }, - cash_flow_statement=[ - CashFlowStatement( - exchange_gains_losses=[ - ExchangeGainsLosses( - formula=None, - label="Exchange Gains/Losses", - order=1000, - unit="USD", - value=0, - xpath=None, - ) - ], - net_cash_flow=[ - NetCashFlow( - formula=None, - label="Net Cash Flow", - order=1100, - unit="USD", - value=-147000000.0, - xpath=None, - ) - ], - net_cash_flow_from_financing_activities=[ - NetCashFlowFromFinancingActivities( - formula=None, - label="Net Cash Flow From Financing Activities", - order=700, - unit="USD", - value=-674000000.0, - xpath=None, - ) - ], - ) - ], - comprehensive_income=[ - ComprehensiveIncome( - comprehensive_income_loss=[ - ComprehensiveIncomeLoss( - formula=None, - label="Comprehensive Income/Loss", - order=100, - unit="USD", - value=644000000.0, - xpath=None, - ) - ], - comprehensive_income_loss_attributable_to_parent=[ - ComprehensiveIncomeLossAttributableToParent( - formula=None, - label="Comprehensive Income/Loss Attributable To Parent", - order=300, - unit="USD", - value=635000000.0, - xpath=None, - ) - ], - other_comprehensive_income_loss=[ - OtherComprehensiveIncomeLoss( - formula=None, - label="Other Comprehensive Income/Loss", - order=400, - unit="USD", - value=-22000000.0, - xpath=None, - ) - ], - ) - ], - income_statement=[ - IncomeStatement( - basic_earnings_per_share=[ - BasicEarningsPerShare( - formula=None, - label="Basic Earnings Per Share", - order=4200, - unit="USD / shares", - value=2.5, - xpath=None, - ) - ], - cost_of_revenue=[ - CostOfRevenue( - formula=None, - label="Cost Of Revenue", - order=300, - unit="USD", - value=1359000000.0, - xpath=None, - ) - ], - gross_profit=[ - GrossProfit( - formula=None, - label="Gross Profit", - order=800, - unit="USD", - value=1777000000.0, - xpath=None, - ) - ], - operating_expenses=[ - OperatingExpenses( - formula=None, - label="Operating Expenses", - order=1000, - unit="USD", - value=904000000.0, - xpath=None, - ) - ], - revenues=[ - Revenues( - formula=None, - label="Revenues", - order=100, - unit="USD", - value=3136000000.0, - xpath=None, - ) - ], - ) - ], - ) - ], + financials=Financials( + balance_sheet={ + "equity_attributable_to_noncontrolling_interest": DataPoint( + formula=None, + label="Equity Attributable To Noncontrolling Interest", + order=1500, + unit="USD", + value=251000000.0, + xpath=None, + ), + "liabilities": DataPoint( + formula=None, + label="Liabilities", + order=600, + unit="USD", + value=14561000000.0, + xpath=None, + ), + "equity_attributable_to_parent": DataPoint( + formula=None, + label="Equity Attributable To Parent", + order=1600, + unit="USD", + value=6509000000.0, + xpath=None, + ), + "noncurrent_assets": DataPoint( + formula=None, + label="Noncurrent Assets", + order=300, + unit="USD", + value=16046000000.0, + xpath=None, + ), + "liabilities_and_equity": DataPoint( + formula=None, + label="Liabilities And Equity", + order=1900, + unit="USD", + value=21321000000.0, + xpath=None, + ), + "assets": DataPoint( + formula=None, + label="Assets", + order=100, + unit="USD", + value=21321000000.0, + xpath=None, + ), + "fixed_assets": DataPoint( + formula=None, + label="Fixed Assets", + order=400, + unit="USD", + value=2814000000.0, + xpath=None, + ), + "other_than_fixed_noncurrent_assets": DataPoint( + formula=None, + label="Other Than Fixed Noncurrent Assets", + order=500, + unit="USD", + value=16046000000.0, + xpath=None, + ), + "noncurrent_liabilities": DataPoint( + formula=None, + label="Noncurrent Liabilities", + order=800, + unit="USD", + value=11716000000.0, + xpath=None, + ), + "current_assets": DataPoint( + formula=None, + label="Current Assets", + order=200, + unit="USD", + value=5275000000.0, + xpath=None, + ), + "equity": DataPoint( + formula=None, + label="Equity", + order=1400, + unit="USD", + value=6760000000.0, + xpath=None, + ), + "current_liabilities": DataPoint( + formula=None, + label="Current Liabilities", + order=700, + unit="USD", + value=2845000000.0, + xpath=None, + ), + }, + cash_flow_statement=CashFlowStatement( + exchange_gains_losses=ExchangeGainsLosses( + formula=None, + label="Exchange Gains/Losses", + order=1000, + unit="USD", + value=0, + xpath=None, + ), + net_cash_flow=NetCashFlow( + formula=None, + label="Net Cash Flow", + order=1100, + unit="USD", + value=-147000000.0, + xpath=None, + ), + net_cash_flow_from_financing_activities=NetCashFlowFromFinancingActivities( + formula=None, + label="Net Cash Flow From Financing Activities", + order=700, + unit="USD", + value=-674000000.0, + xpath=None, + ), + ), + comprehensive_income=ComprehensiveIncome( + comprehensive_income_loss=ComprehensiveIncomeLoss( + formula=None, + label="Comprehensive Income/Loss", + order=100, + unit="USD", + value=644000000.0, + xpath=None, + ), + comprehensive_income_loss_attributable_to_parent=ComprehensiveIncomeLossAttributableToParent( + formula=None, + label="Comprehensive Income/Loss Attributable To Parent", + order=300, + unit="USD", + value=635000000.0, + xpath=None, + ), + other_comprehensive_income_loss=OtherComprehensiveIncomeLoss( + formula=None, + label="Other Comprehensive Income/Loss", + order=400, + unit="USD", + value=-22000000.0, + xpath=None, + ), + ), + income_statement=IncomeStatement( + basic_earnings_per_share=BasicEarningsPerShare( + formula=None, + label="Basic Earnings Per Share", + order=4200, + unit="USD / shares", + value=2.5, + xpath=None, + ), + cost_of_revenue=CostOfRevenue( + formula=None, + label="Cost Of Revenue", + order=300, + unit="USD", + value=1359000000.0, + xpath=None, + ), + gross_profit=GrossProfit( + formula=None, + label="Gross Profit", + order=800, + unit="USD", + value=1777000000.0, + xpath=None, + ), + operating_expenses=OperatingExpenses( + formula=None, + label="Operating Expenses", + order=1000, + unit="USD", + value=904000000.0, + xpath=None, + ), + revenues=Revenues( + formula=None, + label="Revenues", + order=100, + unit="USD", + value=3136000000.0, + xpath=None, + ), + ), + ), fiscal_period="Q1", fiscal_year="2022", source_filing_file_url="https://api.polygon.io/v1/reference/sec/filings/0001413447-22-000014/files/nxpi-20220403_htm.xml", @@ -260,4 +230,5 @@ def test_list_stock_financials(self): start_date="2022-01-01", ) ] + self.assertEqual(financials, expected) From aee34656c34f0d5495f7bdba6c2a060c9d645e3d Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Tue, 10 May 2022 13:15:28 -0400 Subject: [PATCH 072/448] Add docs backlinks and missing endpoints (#170) --- docs/source/Aggs.rst | 30 +- docs/source/Enums.rst | 6 + docs/source/Quotes.rst | 41 +- docs/source/Reference.rst | 77 ++++ docs/source/Snapshot.rst | 35 +- docs/source/Trades.rst | 21 +- docs/source/WebSocket.rst | 9 + docs/source/vX.rst | 4 + polygon/rest/models/common.py | 8 + polygon/rest/models/quotes.py | 47 +++ polygon/rest/quotes.py | 83 +++- .../AUD/USD?amount=100&precision=2.json | 15 + .../v1/last_quote/currencies/AUD/USD.json | 11 + test_rest/mocks/v2/last/nbbo/AAPL.json | 17 + test_rest/mocks/v3/quotes/AAPL.json | 127 ++++++ ...1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json | 126 ++++++ test_rest/test_quotes.py | 360 ++++++++++++++++++ 17 files changed, 1001 insertions(+), 16 deletions(-) create mode 100644 test_rest/mocks/v1/conversion/AUD/USD?amount=100&precision=2.json create mode 100644 test_rest/mocks/v1/last_quote/currencies/AUD/USD.json create mode 100644 test_rest/mocks/v2/last/nbbo/AAPL.json create mode 100644 test_rest/mocks/v3/quotes/AAPL.json create mode 100644 test_rest/mocks/v3/quotes/AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json create mode 100644 test_rest/test_quotes.py diff --git a/docs/source/Aggs.rst b/docs/source/Aggs.rst index 224da4e4..8493cdcb 100644 --- a/docs/source/Aggs.rst +++ b/docs/source/Aggs.rst @@ -7,7 +7,7 @@ Aggs Get aggs =========== -- `Stock aggs`_ +- `Stocks aggs`_ - `Options aggs`_ - `Forex aggs`_ - `Crypto aggs`_ @@ -17,19 +17,45 @@ Get aggs ============================ Get grouped daily aggs ============================ + +- `Stocks grouped daily aggs`_ +- `Forex grouped daily aggs`_ +- `Crypto grouped daily aggs`_ + .. automethod:: polygon.RESTClient.get_grouped_daily_aggs ============================ Get daily open close agg ============================ + +- `Stocks daily open/close agg`_ +- `Options daily open/close agg`_ +- `Crypto daily open/close agg`_ + .. automethod:: polygon.RESTClient.get_daily_open_close_agg ============================ Get previous close agg ============================ + +- `Stocks previous close agg`_ +- `Options previous close agg`_ +- `Forex previous close agg`_ +- `Crypto previous close agg`_ + .. automethod:: polygon.RESTClient.get_previous_close_agg -.. _Stock aggs: https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to +.. _Stocks aggs: https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to .. _Options aggs: https://polygon.io/docs/options/get_v2_aggs_ticker__optionsticker__range__multiplier___timespan___from___to .. _Forex aggs: https://polygon.io/docs/forex/get_v2_aggs_ticker__forexticker__range__multiplier___timespan___from___to .. _Crypto aggs: https://polygon.io/docs/crypto/get_v2_aggs_ticker__cryptoticker__range__multiplier___timespan___from___to +.. _Stocks grouped daily aggs: https://polygon.io/docs/stocks/get_v2_aggs_grouped_locale_us_market_stocks__date +.. _Forex grouped daily aggs: https://polygon.io/docs/forex/get_v2_aggs_grouped_locale_global_market_fx__date +.. _Crypto grouped daily aggs: https://polygon.io/docs/crypto/get_v2_aggs_grouped_locale_global_market_crypto__date +.. _Stocks daily open/close agg: https://polygon.io/docs/stocks/get_v1_open-close__stocksticker___date +.. _Options daily open/close agg: https://polygon.io/docs/options/get_v1_open-close__optionsticker___date +.. _Crypto daily open/close agg: https://polygon.io/docs/crypto/get_v1_open-close_crypto__from___to___date +.. _Stocks previous close agg: https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__prev +.. _Options previous close agg: https://polygon.io/docs/options/get_v2_aggs_ticker__optionsticker__prev +.. _Forex previous close agg: https://polygon.io/docs/forex/get_v2_aggs_ticker__forexticker__prev +.. _Crypto previous close agg: https://polygon.io/docs/crypto/get_v2_aggs_ticker__cryptoticker__prev \ No newline at end of file diff --git a/docs/source/Enums.rst b/docs/source/Enums.rst index f59e077f..8f2233a4 100644 --- a/docs/source/Enums.rst +++ b/docs/source/Enums.rst @@ -94,3 +94,9 @@ Timeframe :members: :undoc-members: +============================================================== +Precision +============================================================== +.. autoclass:: polygon.rest.models.Precision + :members: + :undoc-members: diff --git a/docs/source/Quotes.rst b/docs/source/Quotes.rst index f5b7b824..2ef22574 100644 --- a/docs/source/Quotes.rst +++ b/docs/source/Quotes.rst @@ -1,14 +1,45 @@ .. _quotes_header: Quotes -========== +================================= -=========== +================================= List quotes -=========== +================================= + +- `Stocks quotes`_ +- `Options quotes`_ +- `Forex quotes`_ + .. automethod:: polygon.RESTClient.list_quotes -============== +================================= Get last quote -============== +================================= + +- `Stocks last quote`_ + .. automethod:: polygon.RESTClient.get_last_quote + +================================= +Get last forex quote +================================= + +- `Forex last quote for a currency pair`_ + +.. automethod:: polygon.RESTClient.get_last_forex_quote + +================================= +Get real-time currency conversion +================================= + +- `Forex real-time currency conversion`_ + +.. automethod:: polygon.RESTClient.get_real_time_currency_conversion + +.. _Stocks quotes: https://polygon.io/docs/stocks/get_v3_quotes__stockticker +.. _Options quotes: https://polygon.io/docs/options/get_v3_quotes__optionsticker +.. _Forex quotes: https://polygon.io/docs/forex/get_v3_quotes__fxticker +.. _Stocks last quote: https://polygon.io/docs/stocks/get_v2_last_nbbo__stocksticker +.. _Forex last quote for a currency pair: https://polygon.io/docs/forex/get_v1_last_quote_currencies__from___to +.. _Forex real-time currency conversion: https://polygon.io/docs/forex/get_v1_conversion__from___to diff --git a/docs/source/Reference.rst b/docs/source/Reference.rst index a74caf64..3b7bd3d3 100644 --- a/docs/source/Reference.rst +++ b/docs/source/Reference.rst @@ -6,49 +6,126 @@ Reference ==================== Get market holidays ==================== + +- `Stocks market holidays`_ +- `Options market holidays`_ +- `Forex market holidays`_ +- `Crypto market holidays`_ + .. automethod:: polygon.RESTClient.get_market_holidays ==================== Get market status ==================== + +- `Stocks market status`_ +- `Options market status`_ +- `Forex market status`_ +- `Crypto market status`_ + .. automethod:: polygon.RESTClient.get_market_status ==================== List tickers ==================== + +- `Stocks tickers`_ +- `Options tickers`_ +- `Forex tickers`_ +- `Crypto tickers`_ + .. automethod:: polygon.RESTClient.list_tickers ==================== Get ticker details ==================== + +- `Stocks ticker details`_ +- `Options ticker details`_ + .. automethod:: polygon.RESTClient.get_ticker_details ==================== List ticker news ==================== + +- `Stocks ticker news`_ +- `Options ticker news`_ + .. automethod:: polygon.RESTClient.list_ticker_news ==================== Get ticker types ==================== + +- `Stocks ticker types`_ +- `Options ticker types`_ + .. automethod:: polygon.RESTClient.get_ticker_types ==================== List splits ==================== + +- `Stocks splits`_ + .. automethod:: polygon.RESTClient.list_splits ==================== List dividends ==================== + +- `Stocks dividends`_ + .. automethod:: polygon.RESTClient.list_dividends ==================== List conditions ==================== + +- `Stocks conditions`_ +- `Options conditions`_ +- `Forex conditions`_ +- `Crypto conditions`_ + .. automethod:: polygon.RESTClient.list_conditions ==================== Get exchanges ==================== + +- `Stocks exchanges`_ +- `Options exchanges`_ +- `Forex exchanges`_ +- `Crypto exchanges`_ + .. automethod:: polygon.RESTClient.get_exchanges + +.. _Stocks market holidays: https://polygon.io/docs/stocks/get_v1_marketstatus_upcoming +.. _Options market holidays: https://polygon.io/docs/options/get_v1_marketstatus_upcoming +.. _Forex market holidays: https://polygon.io/docs/forex/get_v1_marketstatus_upcoming +.. _Crypto market holidays: https://polygon.io/docs/crypto/get_v1_marketstatus_upcoming +.. _Stocks market status: https://polygon.io/docs/stocks/get_v1_marketstatus_now +.. _Options market status: https://polygon.io/docs/options/get_v1_marketstatus_now +.. _Forex market status: https://polygon.io/docs/forex/get_v1_marketstatus_now +.. _Crypto market status: https://polygon.io/docs/crypto/get_v1_marketstatus_now +.. _Stocks tickers: https://polygon.io/docs/stocks/get_v3_reference_tickers +.. _Options tickers: https://polygon.io/docs/options/get_v3_reference_tickers +.. _Forex tickers: https://polygon.io/docs/forex/get_v3_reference_tickers +.. _Crypto tickers: https://polygon.io/docs/crypto/get_v3_reference_tickers +.. _Stocks ticker details: https://polygon.io/docs/stocks/get_v3_reference_tickers__ticker +.. _Options ticker details: https://polygon.io/docs/options/get_v3_reference_tickers__ticker +.. _Stocks ticker news: https://polygon.io/docs/stocks/get_v2_reference_news +.. _Options ticker news: https://polygon.io/docs/options/get_v2_reference_news +.. _Stocks ticker types: https://polygon.io/docs/stocks/get_v3_reference_tickers_types +.. _Options ticker types: https://polygon.io/docs/options/get_v3_reference_tickers_types +.. _Stocks splits: https://polygon.io/docs/stocks/get_v3_reference_splits +.. _Stocks dividends: https://polygon.io/docs/stocks/get_v3_reference_dividends +.. _Stocks conditions: https://polygon.io/docs/stocks/get_v3_reference_conditions +.. _Options conditions: https://polygon.io/docs/options/get_v3_reference_conditions +.. _Forex conditions: https://polygon.io/docs/forex/get_v3_reference_conditions +.. _Crypto conditions: https://polygon.io/docs/crypto/get_v3_reference_conditions +.. _Stocks exchanges: https://polygon.io/docs/stocks/get_v3_reference_exchanges +.. _Options exchanges: https://polygon.io/docs/options/get_v3_reference_exchanges +.. _Forex exchanges: https://polygon.io/docs/forex/get_v3_reference_exchanges +.. _Crypto exchanges: https://polygon.io/docs/crypto/get_v3_reference_exchanges \ No newline at end of file diff --git a/docs/source/Snapshot.rst b/docs/source/Snapshot.rst index 274341e1..0214cc9d 100644 --- a/docs/source/Snapshot.rst +++ b/docs/source/Snapshot.rst @@ -6,24 +6,57 @@ Snapshot ================================= Get all snapshots ================================= + +- `Stocks snapshot all tickers`_ +- `Forex snapshot all tickers`_ +- `Crypto snapshot all tickers`_ + .. automethod:: polygon.RESTClient.get_snapshot_all ================================= Get gainers/losers snapshot ================================= + +- `Stocks snapshot gainers/losers`_ +- `Forex snapshot gainers/losers`_ +- `Crypto snapshot gainers/losers`_ + .. automethod:: polygon.RESTClient.get_snapshot_direction ================================= Get ticker snapshot ================================= + +- `Stocks snapshot ticker`_ +- `Forex snapshot ticker`_ +- `Crypto snapshot ticker`_ + .. automethod:: polygon.RESTClient.get_snapshot_ticker ================================= Get options snapshot ================================= + +- `Options snapshot option contract`_ + .. automethod:: polygon.RESTClient.get_snapshot_option ================================= Get crypto L2 book snapshot ================================= -.. automethod:: polygon.RESTClient.get_snapshot_crypto_book \ No newline at end of file + +- `Crypto snapshot ticker full book (L2)`_ + +.. automethod:: polygon.RESTClient.get_snapshot_crypto_book + +.. _Stocks snapshot all tickers: https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks_tickers +.. _Forex snapshot all tickers: https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex_tickers +.. _Crypto snapshot all tickers: https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers +.. _Stocks snapshot gainers/losers: https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks__direction +.. _Forex snapshot gainers/losers: https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex__direction +.. _Crypto snapshot gainers/losers: https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto__direction +.. _Stocks snapshot ticker: https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks_tickers__stocksticker +.. _Forex snapshot ticker: https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex_tickers__ticker +.. _Crypto snapshot ticker: https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers__ticker +.. _Options snapshot option contract: https://polygon.io/docs/options/get_v3_snapshot_options__underlyingasset___optioncontract +.. _Crypto snapshot ticker full book (L2): https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers__ticker__book \ No newline at end of file diff --git a/docs/source/Trades.rst b/docs/source/Trades.rst index c7f1aacb..5d6e6992 100644 --- a/docs/source/Trades.rst +++ b/docs/source/Trades.rst @@ -6,14 +6,33 @@ Trades ================================================================== List trades ================================================================== + +- `Stocks trades`_ +- `Options trades`_ +- `Crypto trades`_ + .. automethod:: polygon.RESTClient.list_trades ================================================================== Get last trade ================================================================== + +- `Stocks last trade`_ +- `Options last trade`_ + .. automethod:: polygon.RESTClient.get_last_trade ================================================================== Get last crypto trade ================================================================== -.. automethod:: polygon.RESTClient.get_last_crypto_trade \ No newline at end of file + +- `Crypto last trade for crypto pair`_ + +.. automethod:: polygon.RESTClient.get_last_crypto_trade + +.. _Stocks trades: https://polygon.io/docs/stocks/get_v3_trades__stockticker +.. _Options trades: https://polygon.io/docs/options/get_v3_trades__optionsticker +.. _Crypto trades: https://polygon.io/docs/crypto/get_v3_trades__cryptoticker +.. _Stocks last trade: https://polygon.io/docs/stocks/get_v2_last_trade__stocksticker +.. _Options last trade: https://polygon.io/docs/options/get_v2_last_trade__optionsticker +.. _Crypto last trade for crypto pair: https://polygon.io/docs/crypto/get_v1_last_crypto__from___to \ No newline at end of file diff --git a/docs/source/WebSocket.rst b/docs/source/WebSocket.rst index c57f3295..5f508122 100644 --- a/docs/source/WebSocket.rst +++ b/docs/source/WebSocket.rst @@ -3,6 +3,11 @@ WebSocket ========== +- `Stocks getting started`_ +- `Options getting started`_ +- `Forex getting started`_ +- `Crypto getting started`_ + =========== Init client =========== @@ -34,3 +39,7 @@ Close ============================ .. automethod:: polygon.WebSocketClient.close +.. _Stocks getting started: https://polygon.io/docs/stocks/ws_getting-started +.. _Options getting started: https://polygon.io/docs/options/ws_getting-started +.. _Forex getting started: https://polygon.io/docs/forex/ws_getting-started +.. _Crypto getting started: https://polygon.io/docs/crypto/ws_getting-started \ No newline at end of file diff --git a/docs/source/vX.rst b/docs/source/vX.rst index 8b27aecb..17bd9f5f 100644 --- a/docs/source/vX.rst +++ b/docs/source/vX.rst @@ -11,5 +11,9 @@ vX ====================== List stock financials ====================== + +- `Stocks financials vX`_ + .. automethod:: polygon.rest.VXClient.list_stock_financials +.. _Stocks financials vX: https://polygon.io/docs/stocks/get_vx_reference_financials \ No newline at end of file diff --git a/polygon/rest/models/common.py b/polygon/rest/models/common.py index 02373d26..b9da97db 100644 --- a/polygon/rest/models/common.py +++ b/polygon/rest/models/common.py @@ -76,3 +76,11 @@ class SnapshotMarketType(Enum): class Timeframe(Enum): ANNUAL = "annual" QUARTERLY = "quarterly" + + +class Precision(Enum): + ZERO = 0 + ONE = 1 + TWO = 2 + THREE = 3 + FOUR = 4 diff --git a/polygon/rest/models/quotes.py b/polygon/rest/models/quotes.py index a83f0a36..07082404 100644 --- a/polygon/rest/models/quotes.py +++ b/polygon/rest/models/quotes.py @@ -60,3 +60,50 @@ def from_dict(d): bid_exchange=d.get("x", None), tape=d.get("z", None), ) + + +@dataclass +class Last: + "Contains data for a forex quote." + ask: Optional[float] = None + bid: Optional[float] = None + exchange: Optional[int] = None + timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return Last(**d) + + +@dataclass +class LastForexQuote: + "ForexLastQuote contains data for the last quote tick for a forex currency pair." + last: Optional[Last] = None + symbol: Optional[str] = None + + @staticmethod + def from_dict(d): + return LastForexQuote( + last=None if "last" not in d else Last.from_dict(d["last"]), + symbol=d.get("symbol", None), + ) + + +@dataclass +class RealTimeCurrencyConversion: + "RealTimeCurrencyConversion contains data for currency conversions using the latest market conversion rates." + converted: Optional[float] = None + from_: Optional[str] = None + initial_amount: Optional[float] = None + last: Optional[Last] = None + to: Optional[str] = None + + @staticmethod + def from_dict(d): + return RealTimeCurrencyConversion( + converted=d.get("converted", None), + from_=d.get("from_", None), + initial_amount=d.get("initialAmount", None), + last=None if "last" not in d else Last.from_dict(d["last"]), + to=d.get("to", None), + ) diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index 079ff4fc..c39b6665 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -1,6 +1,14 @@ from .base import BaseClient -from typing import Optional, Any, Dict, List, Union, Iterator -from .models import Quote, LastQuote, Sort, Order +from typing import Optional, Any, Dict, Union, Iterator +from .models import ( + Quote, + LastQuote, + LastForexQuote, + RealTimeCurrencyConversion, + Sort, + Order, + Precision, +) from urllib3 import HTTPResponse from datetime import datetime, date @@ -32,8 +40,8 @@ def list_quotes( :param limit: Limit the number of results returned, default is 10 and max is 50000. :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 HTTPResponse object instead of results object + :param params: Any additional query params. + :param raw: Return HTTPResponse object instead of results object. :return: List of quotes """ url = f"/v3/quotes/{ticker}" @@ -52,12 +60,73 @@ def get_last_quote( Get the most recent NBBO (Quote) tick for a given stock. :param ticker: The ticker symbol of the stock/equity. - :param params: Any additional query params - :param raw: Return HTTPResponse object instead of results object + :param params: Any additional query params. + :param raw: Return HTTPResponse object instead of results object. :return: Last Quote """ url = f"/v2/last/nbbo/{ticker}" return self._get( - path=url, params=params, deserializer=LastQuote.from_dict, raw=raw + path=url, + params=params, + result_key="results", + deserializer=LastQuote.from_dict, + raw=raw, + ) + + def get_last_forex_quote( + self, + from_: str, + to: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[LastForexQuote, HTTPResponse]: + """ + Get the last quote tick for a forex currency pair. + + :param from_: The "from" symbol of the pair. + :param to: The "to" symbol of the pair. + :param params: Any additional query params. + :param raw: Return HTTPResponse object instead of results object. + :return: Last Forex Quote + """ + url = f"/v1/last_quote/currencies/{from_}/{to}" + + return self._get( + path=url, + params=params, + deserializer=LastForexQuote.from_dict, + raw=raw, + ) + + def get_real_time_currency_conversion( + self, + from_: str, + to: str, + amount: float, + precision: Union[int, Precision] = 2, + params: Dict[str, Any] = None, + raw: bool = False, + ) -> Union[RealTimeCurrencyConversion, HTTPResponse]: + """ + Get currency conversions using the latest market conversion rates. + + :param from_: The "from" symbol of the pair. + :param to: The "to" symbol of the pair. + :param amount: The amount to convert, with a decimal. + :param precision: The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy. + :param params: Any additional query params. + :param raw: Return HTTPResponse object instead of results object. + :return: Real-Time Currency Conversion + """ + url = f"/v1/conversion/{from_}/{to}" + if params is None: + params = {} + params["amount"] = amount + params["precision"] = precision + return self._get( + path=url, + params=params, + deserializer=RealTimeCurrencyConversion.from_dict, + raw=raw, ) diff --git a/test_rest/mocks/v1/conversion/AUD/USD?amount=100&precision=2.json b/test_rest/mocks/v1/conversion/AUD/USD?amount=100&precision=2.json new file mode 100644 index 00000000..dfb5ebb9 --- /dev/null +++ b/test_rest/mocks/v1/conversion/AUD/USD?amount=100&precision=2.json @@ -0,0 +1,15 @@ +{ + "converted": 69.31, + "from": "AUD", + "initialAmount": 100, + "last": { + "ask": 1.4436264, + "bid": 1.4427932, + "exchange": 48, + "timestamp": 1652195426000 + }, + "request_id": "b2cbbd1c2aa9eadd738087deef2bcf95", + "status": "success", + "symbol": "USD/AUD", + "to": "USD" +} \ No newline at end of file diff --git a/test_rest/mocks/v1/last_quote/currencies/AUD/USD.json b/test_rest/mocks/v1/last_quote/currencies/AUD/USD.json new file mode 100644 index 00000000..fb25e665 --- /dev/null +++ b/test_rest/mocks/v1/last_quote/currencies/AUD/USD.json @@ -0,0 +1,11 @@ +{ + "last": { + "ask": 0.69527, + "bid": 0.6952, + "exchange": 48, + "timestamp": 1652193694000 + }, + "request_id": "54259e767db5057989cddbe33a2eaf1b", + "status": "success", + "symbol": "AUD/USD" +} \ No newline at end of file diff --git a/test_rest/mocks/v2/last/nbbo/AAPL.json b/test_rest/mocks/v2/last/nbbo/AAPL.json new file mode 100644 index 00000000..2f728afb --- /dev/null +++ b/test_rest/mocks/v2/last/nbbo/AAPL.json @@ -0,0 +1,17 @@ +{ + "results": { + "p": 155.65, + "s": 1, + "x": 19, + "P": 155.66, + "S": 14, + "X": 11, + "z": 3, + "T": "AAPL", + "t": 1652192754171838500, + "y": 1652192754171619000, + "q": 26006043 + }, + "status": "OK", + "request_id": "8f6450b5edbd1446ad0304023fad77ae" +} \ No newline at end of file diff --git a/test_rest/mocks/v3/quotes/AAPL.json b/test_rest/mocks/v3/quotes/AAPL.json new file mode 100644 index 00000000..3fbb9d19 --- /dev/null +++ b/test_rest/mocks/v3/quotes/AAPL.json @@ -0,0 +1,127 @@ +{ + "results": [ + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872800402200, + "sequence_number": 19288684, + "sip_timestamp": 1652191872800638700, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 15, + "bid_price": 155.85, + "bid_size": 5, + "participant_timestamp": 1652191872774195000, + "sequence_number": 19288618, + "sip_timestamp": 1652191872774441200, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872773756000, + "sequence_number": 19288617, + "sip_timestamp": 1652191872773945300, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 12, + "bid_price": 155.85, + "bid_size": 3, + "participant_timestamp": 1652191872753255000, + "sequence_number": 19288557, + "sip_timestamp": 1652191872753443000, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 3, + "participant_timestamp": 1652191872751394300, + "sequence_number": 19288549, + "sip_timestamp": 1652191872751569400, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 21, + "bid_price": 155.86, + "bid_size": 1, + "participant_timestamp": 1652191872750485800, + "sequence_number": 19288528, + "sip_timestamp": 1652191872750826800, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 11, + "bid_price": 155.86, + "bid_size": 1, + "participant_timestamp": 1652191872750458400, + "sequence_number": 19288525, + "sip_timestamp": 1652191872750633000, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 21, + "bid_price": 155.86, + "bid_size": 2, + "participant_timestamp": 1652191872750206000, + "sequence_number": 19288519, + "sip_timestamp": 1652191872750488300, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 1, + "bid_exchange": 21, + "bid_price": 155.86, + "bid_size": 2, + "participant_timestamp": 1652191872748910000, + "sequence_number": 19288491, + "sip_timestamp": 1652191872749094400, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 2, + "bid_exchange": 21, + "bid_price": 155.86, + "bid_size": 2, + "participant_timestamp": 1652191872690425000, + "sequence_number": 19288166, + "sip_timestamp": 1652191872690661000, + "tape": 3 + } + ], + "status": "OK", + "request_id": "280bc9f4c6d0ba24a819f0d153b15d85", + "next_url": "https://api.polygon.io/v3/quotes/AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla" +} \ No newline at end of file diff --git a/test_rest/mocks/v3/quotes/AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json b/test_rest/mocks/v3/quotes/AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json new file mode 100644 index 00000000..cb763a03 --- /dev/null +++ b/test_rest/mocks/v3/quotes/AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json @@ -0,0 +1,126 @@ +{ + "results": [ + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 2, + "bid_exchange": 19, + "bid_price": 155.86, + "bid_size": 1, + "participant_timestamp": 1652191872690177000, + "sequence_number": 19288135, + "sip_timestamp": 1652191872690386918, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 2, + "bid_exchange": 15, + "bid_price": 155.85, + "bid_size": 5, + "participant_timestamp": 1652191872688200000, + "sequence_number": 19288101, + "sip_timestamp": 1652191872688383612, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 15, + "bid_price": 155.85, + "bid_size": 5, + "participant_timestamp": 1652191872687729447, + "sequence_number": 19288096, + "sip_timestamp": 1652191872687968794, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872686891199, + "sequence_number": 19288093, + "sip_timestamp": 1652191872687168881, + "tape": 3 + }, + { + "ask_exchange": 15, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872677145000, + "sequence_number": 19288051, + "sip_timestamp": 1652191872677330035, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 4, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872676782000, + "sequence_number": 19288049, + "sip_timestamp": 1652191872676973864, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 4, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 3, + "participant_timestamp": 1652191872664864000, + "sequence_number": 19288026, + "sip_timestamp": 1652191872665047506, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 4, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872663336000, + "sequence_number": 19288010, + "sip_timestamp": 1652191872663527001, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 3, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872663291000, + "sequence_number": 19288009, + "sip_timestamp": 1652191872663480163, + "tape": 3 + }, + { + "ask_exchange": 19, + "ask_price": 155.87, + "ask_size": 2, + "bid_exchange": 19, + "bid_price": 155.85, + "bid_size": 4, + "participant_timestamp": 1652191872663233957, + "sequence_number": 19288004, + "sip_timestamp": 1652191872663407429, + "tape": 3 + } + ], + "status": "OK", + "request_id": "74f65a8eee41f475f5a05e31059a9245" +} \ No newline at end of file diff --git a/test_rest/test_quotes.py b/test_rest/test_quotes.py new file mode 100644 index 00000000..98470149 --- /dev/null +++ b/test_rest/test_quotes.py @@ -0,0 +1,360 @@ +from base import BaseTest +from polygon.rest.models import ( + Quote, + LastQuote, + Last, + LastForexQuote, + RealTimeCurrencyConversion, +) + + +class QuotesTest(BaseTest): + def test_list_quotes(self): + quotes = [q for q in self.c.list_quotes("AAPL")] + expected = [ + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872800402200, + sequence_number=19288684, + sip_timestamp=1652191872800638700, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=15, + bid_price=155.85, + bid_size=5, + conditions=None, + indicators=None, + participant_timestamp=1652191872774195000, + sequence_number=19288618, + sip_timestamp=1652191872774441200, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872773756000, + sequence_number=19288617, + sip_timestamp=1652191872773945300, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=12, + bid_price=155.85, + bid_size=3, + conditions=None, + indicators=None, + participant_timestamp=1652191872753255000, + sequence_number=19288557, + sip_timestamp=1652191872753443000, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=19, + bid_price=155.85, + bid_size=3, + conditions=None, + indicators=None, + participant_timestamp=1652191872751394300, + sequence_number=19288549, + sip_timestamp=1652191872751569400, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=21, + bid_price=155.86, + bid_size=1, + conditions=None, + indicators=None, + participant_timestamp=1652191872750485800, + sequence_number=19288528, + sip_timestamp=1652191872750826800, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=11, + bid_price=155.86, + bid_size=1, + conditions=None, + indicators=None, + participant_timestamp=1652191872750458400, + sequence_number=19288525, + sip_timestamp=1652191872750633000, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=21, + bid_price=155.86, + bid_size=2, + conditions=None, + indicators=None, + participant_timestamp=1652191872750206000, + sequence_number=19288519, + sip_timestamp=1652191872750488300, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=1, + bid_exchange=21, + bid_price=155.86, + bid_size=2, + conditions=None, + indicators=None, + participant_timestamp=1652191872748910000, + sequence_number=19288491, + sip_timestamp=1652191872749094400, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=2, + bid_exchange=21, + bid_price=155.86, + bid_size=2, + conditions=None, + indicators=None, + participant_timestamp=1652191872690425000, + sequence_number=19288166, + sip_timestamp=1652191872690661000, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=2, + bid_exchange=19, + bid_price=155.86, + bid_size=1, + conditions=None, + indicators=None, + participant_timestamp=1652191872690177000, + sequence_number=19288135, + sip_timestamp=1652191872690386918, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=2, + bid_exchange=15, + bid_price=155.85, + bid_size=5, + conditions=None, + indicators=None, + participant_timestamp=1652191872688200000, + sequence_number=19288101, + sip_timestamp=1652191872688383612, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=3, + bid_exchange=15, + bid_price=155.85, + bid_size=5, + conditions=None, + indicators=None, + participant_timestamp=1652191872687729447, + sequence_number=19288096, + sip_timestamp=1652191872687968794, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=3, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872686891199, + sequence_number=19288093, + sip_timestamp=1652191872687168881, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=15, + ask_price=155.87, + ask_size=3, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872677145000, + sequence_number=19288051, + sip_timestamp=1652191872677330035, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=4, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872676782000, + sequence_number=19288049, + sip_timestamp=1652191872676973864, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=4, + bid_exchange=19, + bid_price=155.85, + bid_size=3, + conditions=None, + indicators=None, + participant_timestamp=1652191872664864000, + sequence_number=19288026, + sip_timestamp=1652191872665047506, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=4, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872663336000, + sequence_number=19288010, + sip_timestamp=1652191872663527001, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=3, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872663291000, + sequence_number=19288009, + sip_timestamp=1652191872663480163, + tape=3, + trf_timestamp=None, + ), + Quote( + ask_exchange=19, + ask_price=155.87, + ask_size=2, + bid_exchange=19, + bid_price=155.85, + bid_size=4, + conditions=None, + indicators=None, + participant_timestamp=1652191872663233957, + sequence_number=19288004, + sip_timestamp=1652191872663407429, + tape=3, + trf_timestamp=None, + ), + ] + self.assertEqual(quotes, expected) + + def test_get_last_quote(self): + last = self.c.get_last_quote("AAPL") + expected = LastQuote( + ticker="AAPL", + trf_timestamp=None, + sequence_number=26006043, + sip_timestamp=1652192754171838500, + participant_timestamp=1652192754171619000, + ask_price=155.66, + ask_size=14, + ask_exchange=11, + conditions=None, + indicators=None, + bid_price=155.65, + bid_size=1, + bid_exchange=19, + tape=3, + ) + + self.assertEqual(last, expected) + + def test_get_last_forex_quote(self): + last_forex = self.c.get_last_forex_quote("AUD", "USD") + expected = LastForexQuote( + last=Last(ask=0.69527, bid=0.6952, exchange=48, timestamp=1652193694000), + symbol="AUD/USD", + ) + + self.assertEqual(last_forex, expected) + + def test_get_real_time_currency_conversion(self): + conversion = self.c.get_real_time_currency_conversion("AUD", "USD", 100, 2) + expected = RealTimeCurrencyConversion( + converted=69.31, + from_=None, + initial_amount=100, + last=Last( + ask=1.4436264, bid=1.4427932, exchange=48, timestamp=1652195426000 + ), + to="USD", + ) + + self.assertEqual(conversion, expected) From 49442ae009d213b79f47f1fd53a1c9e4ffe71957 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Tue, 10 May 2022 16:11:10 -0400 Subject: [PATCH 073/448] use kw arg names (#171) --- Makefile | 4 ++-- examples/rest/raw-get.py | 14 +++++++++++++- examples/rest/raw-list.py | 7 ++++++- examples/rest/simple-get.py | 15 +++++++++++---- examples/rest/simple-list.py | 2 +- examples/websocket/aggs.py | 6 +++++- examples/websocket/async.py | 15 ++++++++------- examples/websocket/crypto.py | 4 +++- examples/websocket/raw.py | 4 +++- examples/websocket/simple.py | 4 +++- 10 files changed, 55 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index e0b56581..b18f790a 100644 --- a/Makefile +++ b/Makefile @@ -22,11 +22,11 @@ help: ## Check code style style: - poetry run black $(if $(CI),--check,) polygon test_* + poetry run black $(if $(CI),--check,) polygon test_* examples ## Check static types static: - poetry run mypy polygon test_* + poetry run mypy polygon test_* examples ## Check code style and static types lint: style static diff --git a/examples/rest/raw-get.py b/examples/rest/raw-get.py index ef127410..ac792463 100644 --- a/examples/rest/raw-get.py +++ b/examples/rest/raw-get.py @@ -1,8 +1,20 @@ from polygon import RESTClient +from typing import cast +from urllib3 import HTTPResponse client = RESTClient(verbose=True) -aggs = client.get_aggs("AAPL", 1, "day", "2022-04-01", "2022-04-04", raw=True) +aggs = cast( + HTTPResponse, + client.get_aggs( + ticker="AAPL", + multiplier=1, + timespan="day", + from_="2022-04-01", + to="2022-04-04", + raw=True, + ), +) print(aggs.geturl()) # https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2022-04-01/2022-04-04 print(aggs.status) diff --git a/examples/rest/raw-list.py b/examples/rest/raw-list.py index 4ac492d6..ec52fbba 100644 --- a/examples/rest/raw-list.py +++ b/examples/rest/raw-list.py @@ -1,8 +1,13 @@ from polygon import RESTClient +from typing import cast +from urllib3 import HTTPResponse client = RESTClient(verbose=True) -trades = client.list_trades("AAA", timestamp="2022-04-20", limit=5, raw=True) +trades = cast( + HTTPResponse, + client.list_trades(ticker="AAA", timestamp="2022-04-20", limit=5, raw=True), +) print(trades.data) # b'{ # "results": [ diff --git a/examples/rest/simple-get.py b/examples/rest/simple-get.py index b30e159f..acc862ae 100644 --- a/examples/rest/simple-get.py +++ b/examples/rest/simple-get.py @@ -3,12 +3,19 @@ client = RESTClient(verbose=True) -aggs1 = client.get_aggs("AAPL", 1, "day", "2005-04-04", "2005-04-04") -aggs2 = client.get_aggs("AAPL", 1, "day", date(2005, 4, 4), datetime(2005, 4, 4)) +aggs1 = client.get_aggs( + ticker="AAPL", multiplier=1, timespan="day", from_="2005-04-04", to="2005-04-04" +) +aggs2 = client.get_aggs( + ticker="AAPL", + multiplier=1, + timespan="day", + from_=date(2005, 4, 4), + to=datetime(2005, 4, 4), +) if aggs1 != aggs2: print(aggs1, aggs2) - assert(False) + assert False else: print(aggs1) - diff --git a/examples/rest/simple-list.py b/examples/rest/simple-list.py index f7949547..a9b82e7e 100644 --- a/examples/rest/simple-list.py +++ b/examples/rest/simple-list.py @@ -3,6 +3,6 @@ client = RESTClient(verbose=True) trades = [] -for t in client.list_trades("AAA", timestamp="2022-04-20", limit=5): +for t in client.list_trades(ticker="AAA", timestamp="2022-04-20", limit=5): trades.append(t) print(trades) diff --git a/examples/websocket/aggs.py b/examples/websocket/aggs.py index 8ba489e5..8a733575 100644 --- a/examples/websocket/aggs.py +++ b/examples/websocket/aggs.py @@ -2,7 +2,8 @@ from polygon.websocket.models import WebSocketMessage, EquityTrade from typing import List -c = WebSocketClient(subscriptions=['T.*']) +c = WebSocketClient(subscriptions=["T.*"]) + class MessageHandler: count = 0 @@ -13,9 +14,12 @@ def handle_msg(self, msgs: List[WebSocketMessage]): print(self.count, m) self.count += 1 + h = MessageHandler() + def handle_msg(msgs: List[WebSocketMessage]): h.handle_msg(msgs) + c.run(handle_msg) diff --git a/examples/websocket/async.py b/examples/websocket/async.py index c9a5b3a1..87cacee6 100644 --- a/examples/websocket/async.py +++ b/examples/websocket/async.py @@ -3,24 +3,25 @@ from typing import List import asyncio -c = WebSocketClient(subscriptions=['T.*']) +c = WebSocketClient(subscriptions=["T.*"]) + async def handle_msg(msgs: List[WebSocketMessage]): for m in msgs: print(m) + async def timeout(): await asyncio.sleep(1) - print('unsubscribe_all') + print("unsubscribe_all") c.unsubscribe_all() await asyncio.sleep(1) - print('close') + print("close") await c.close() + async def main(): - await asyncio.gather( - c.connect(handle_msg), - timeout() - ) + await asyncio.gather(c.connect(handle_msg), timeout()) + asyncio.run(main()) diff --git a/examples/websocket/crypto.py b/examples/websocket/crypto.py index 87bfb8c9..21ed72f7 100644 --- a/examples/websocket/crypto.py +++ b/examples/websocket/crypto.py @@ -2,10 +2,12 @@ from polygon.websocket.models import WebSocketMessage, Market from typing import List -c = WebSocketClient(market=Market.Crypto, subscriptions=['XT.*']) +c = WebSocketClient(market=Market.Crypto, subscriptions=["XT.*"]) + def handle_msg(msgs: List[WebSocketMessage]): for m in msgs: print(m) + c.run(handle_msg) diff --git a/examples/websocket/raw.py b/examples/websocket/raw.py index 74c6d91e..064aca12 100644 --- a/examples/websocket/raw.py +++ b/examples/websocket/raw.py @@ -2,9 +2,11 @@ from typing import Union import json -c = WebSocketClient(subscriptions=['T.*'], raw=True) +c = WebSocketClient(subscriptions=["T.*"], raw=True) + def handle_msg(msgs: Union[str, bytes]): print(json.loads(msgs)) + c.run(handle_msg) diff --git a/examples/websocket/simple.py b/examples/websocket/simple.py index f6596886..d290b8c2 100644 --- a/examples/websocket/simple.py +++ b/examples/websocket/simple.py @@ -2,10 +2,12 @@ from polygon.websocket.models import WebSocketMessage from typing import List -c = WebSocketClient(subscriptions=['T.*']) +c = WebSocketClient(subscriptions=["T.*"]) + def handle_msg(msgs: List[WebSocketMessage]): for m in msgs: print(m) + c.run(handle_msg) From 77a7a7e70aff6ea88877b34114626f2294f21b8e Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 11 May 2022 12:42:13 -0400 Subject: [PATCH 074/448] fix financials and add example (#173) * fix financials and add example * style --- examples/rest/financials.py | 6 ++++++ polygon/rest/models/tickers.py | 12 ++++++++---- test_rest/test_tickers.py | 4 ++-- 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 examples/rest/financials.py diff --git a/examples/rest/financials.py b/examples/rest/financials.py new file mode 100644 index 00000000..ad71a001 --- /dev/null +++ b/examples/rest/financials.py @@ -0,0 +1,6 @@ +from polygon import RESTClient + +client = RESTClient() + +financials = client.get_ticker_details("NFLX") +print(financials) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 51da29de..ee4712b1 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -4,16 +4,18 @@ @dataclass -class Address: +class CompanyAddress: "Contains address data for a ticker detail." address1: Optional[str] = None + address2: Optional[str] = None city: Optional[str] = None state: Optional[str] = None + country: Optional[str] = None postal_code: Optional[str] = None @staticmethod def from_dict(d): - return Address(**d) + return CompanyAddress(**d) @dataclass @@ -69,7 +71,7 @@ def from_dict(d): class TickerDetails: "TickerDetails contains data for a specified ticker symbol." active: Optional[bool] = None - address: Optional[Address] = None + address: Optional[CompanyAddress] = None branding: Optional[Branding] = None cik: Optional[str] = None composite_figi: Optional[str] = None @@ -98,7 +100,9 @@ class TickerDetails: def from_dict(d): return TickerDetails( active=d.get("active", None), - address=None if "address" not in d else Address.from_dict(d["address"]), + address=None + if "address" not in d + else CompanyAddress.from_dict(d["address"]), branding=None if "branding" not in d else Branding.from_dict(d["branding"]), cik=d.get("cik", None), composite_figi=d.get("composite_figi", None), diff --git a/test_rest/test_tickers.py b/test_rest/test_tickers.py index bc48e641..7e534c46 100644 --- a/test_rest/test_tickers.py +++ b/test_rest/test_tickers.py @@ -5,7 +5,7 @@ TickerTypes, Publisher, Branding, - Address, + CompanyAddress, ) from base import BaseTest @@ -93,7 +93,7 @@ def test_get_ticker_details(self): details = self.c.get_ticker_details("AAPL") expected = TickerDetails( active=True, - address=Address( + address=CompanyAddress( address1="ONE APPLE PARK WAY", city="CUPERTINO", state="CA", From 8baca91bbd9c9265235d5c64c563a0b4fcb0a18d Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 11 May 2022 13:59:54 -0400 Subject: [PATCH 075/448] make examples simpler (#172) * make examples simpler * remove api key --- examples/rest/raw-get.py | 12 ++++++------ examples/rest/raw-list.py | 4 ++-- examples/rest/simple-get.py | 21 +++------------------ examples/rest/simple-list.py | 4 ++-- polygon/__init__.py | 1 + polygon/rest/base.py | 10 ++++++++++ 6 files changed, 24 insertions(+), 28 deletions(-) diff --git a/examples/rest/raw-get.py b/examples/rest/raw-get.py index ac792463..89800015 100644 --- a/examples/rest/raw-get.py +++ b/examples/rest/raw-get.py @@ -2,16 +2,16 @@ from typing import cast from urllib3 import HTTPResponse -client = RESTClient(verbose=True) +client = RESTClient() aggs = cast( HTTPResponse, client.get_aggs( - ticker="AAPL", - multiplier=1, - timespan="day", - from_="2022-04-01", - to="2022-04-04", + "AAPL", + 1, + "day", + "2022-04-01", + "2022-04-04", raw=True, ), ) diff --git a/examples/rest/raw-list.py b/examples/rest/raw-list.py index ec52fbba..5a5a5642 100644 --- a/examples/rest/raw-list.py +++ b/examples/rest/raw-list.py @@ -2,11 +2,11 @@ from typing import cast from urllib3 import HTTPResponse -client = RESTClient(verbose=True) +client = RESTClient() trades = cast( HTTPResponse, - client.list_trades(ticker="AAA", timestamp="2022-04-20", limit=5, raw=True), + client.list_trades("AAA", "2022-04-20", 5, raw=True), ) print(trades.data) # b'{ diff --git a/examples/rest/simple-get.py b/examples/rest/simple-get.py index acc862ae..9a374222 100644 --- a/examples/rest/simple-get.py +++ b/examples/rest/simple-get.py @@ -1,21 +1,6 @@ from polygon import RESTClient -from datetime import date, datetime -client = RESTClient(verbose=True) +client = RESTClient() -aggs1 = client.get_aggs( - ticker="AAPL", multiplier=1, timespan="day", from_="2005-04-04", to="2005-04-04" -) -aggs2 = client.get_aggs( - ticker="AAPL", - multiplier=1, - timespan="day", - from_=date(2005, 4, 4), - to=datetime(2005, 4, 4), -) - -if aggs1 != aggs2: - print(aggs1, aggs2) - assert False -else: - print(aggs1) +aggs = client.get_aggs("AAPL", 1, "day", "2004-04-04", "2004-04-04") +print(aggs) diff --git a/examples/rest/simple-list.py b/examples/rest/simple-list.py index a9b82e7e..dc93f315 100644 --- a/examples/rest/simple-list.py +++ b/examples/rest/simple-list.py @@ -1,8 +1,8 @@ from polygon import RESTClient -client = RESTClient(verbose=True) +client = RESTClient() trades = [] -for t in client.list_trades(ticker="AAA", timestamp="2022-04-20", limit=5): +for t in client.list_trades("AAA", "2022-04-04", limit=5): trades.append(t) print(trades) diff --git a/polygon/__init__.py b/polygon/__init__.py index e4e0ced3..7fe320e3 100644 --- a/polygon/__init__.py +++ b/polygon/__init__.py @@ -1,2 +1,3 @@ from .rest import RESTClient +from .rest.base import NoResults from .websocket import WebSocketClient, AuthError diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 43afa2e1..c5bf8a3a 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -14,6 +14,10 @@ pass +class NoResults(Exception): + pass + + class BaseClient: def __init__( self, @@ -79,6 +83,12 @@ def _get( obj = self._decode(resp) if result_key: + if result_key not in obj: + raise NoResults( + f'Expected key "{result_key}" in response {obj}.' + + "Make sure you have sufficient permissions and your request parameters are valid." + + f"This is the url that returned no results: {resp.geturl()}" + ) obj = obj[result_key] if deserializer: From f16a7e6a74efa33d30c63d5f9645fc3d4df69cc9 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Wed, 11 May 2022 14:00:30 -0400 Subject: [PATCH 076/448] bump minimum python version to 3.8 (#175) --- README.md | 2 +- docs/source/Getting-Started.rst | 2 +- poetry.lock | 48 ++++----------------------------- polygon/rest/base.py | 4 +-- pyproject.toml | 2 +- 5 files changed, 10 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 5de2b34e..c92a9829 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Python client for the [Polygon.io API](https://polygon.io). `pip install polygon-api-client~=1.0.0b` -Requires Python >= 3.7. +Requires Python >= 3.8. ## Getting started See the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index dc2171ab..5acf2401 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -3,7 +3,7 @@ Getting Started Requirements: - `Polygon.io API key `_ - - `Python >= 3.7 `_ + - `Python >= 3.8 `_ - `This package `_ .. code-block:: shell diff --git a/poetry.lock b/poetry.lock index 8ffca2eb..0199d3a0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -31,7 +31,6 @@ mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] @@ -69,7 +68,6 @@ python-versions = ">=3.7" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" @@ -120,7 +118,6 @@ optional = false python-versions = ">=3.7" [package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] @@ -161,7 +158,6 @@ python-versions = ">=3.6" [package.dependencies] mypy-extensions = ">=0.4.3" tomli = ">=1.1.0" -typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""} typing-extensions = ">=3.10" [package.extras] @@ -218,7 +214,7 @@ python-versions = ">=3.6" [[package]] name = "pyparsing" -version = "3.0.8" +version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "dev" optional = false @@ -402,14 +398,6 @@ category = "dev" optional = false python-versions = ">=3.7" -[[package]] -name = "typed-ast" -version = "1.5.3" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false -python-versions = ">=3.6" - [[package]] name = "types-certifi" version = "2021.10.8.2" @@ -477,8 +465,8 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" -python-versions = "^3.7" -content-hash = "d6e34b1cf2ee9c25cf7917f12cc312fc66b486a5d87821f575b906f843f14753" +python-versions = "^3.8" +content-hash = "eddae0498064f9df11d4d364d2bd19f77fe15262b2e04692572edf655351d7b4" [metadata.files] alabaster = [ @@ -641,8 +629,8 @@ pygments = [ {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, ] pyparsing = [ - {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, - {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pytz = [ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, @@ -696,32 +684,6 @@ tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -typed-ast = [ - {file = "typed_ast-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ad3b48cf2b487be140072fb86feff36801487d4abb7382bb1929aaac80638ea"}, - {file = "typed_ast-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:542cd732351ba8235f20faa0fc7398946fe1a57f2cdb289e5497e1e7f48cfedb"}, - {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc2c11ae59003d4a26dda637222d9ae924387f96acae9492df663843aefad55"}, - {file = "typed_ast-1.5.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd5df1313915dbd70eaaa88c19030b441742e8b05e6103c631c83b75e0435ccc"}, - {file = "typed_ast-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:e34f9b9e61333ecb0f7d79c21c28aa5cd63bec15cb7e1310d7d3da6ce886bc9b"}, - {file = "typed_ast-1.5.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f818c5b81966d4728fec14caa338e30a70dfc3da577984d38f97816c4b3071ec"}, - {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3042bfc9ca118712c9809201f55355479cfcdc17449f9f8db5e744e9625c6805"}, - {file = "typed_ast-1.5.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fff9fdcce59dc61ec1b317bdb319f8f4e6b69ebbe61193ae0a60c5f9333dc49"}, - {file = "typed_ast-1.5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:8e0b8528838ffd426fea8d18bde4c73bcb4167218998cc8b9ee0a0f2bfe678a6"}, - {file = "typed_ast-1.5.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ef1d96ad05a291f5c36895d86d1375c0ee70595b90f6bb5f5fdbee749b146db"}, - {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed44e81517364cb5ba367e4f68fca01fba42a7a4690d40c07886586ac267d9b9"}, - {file = "typed_ast-1.5.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f60d9de0d087454c91b3999a296d0c4558c1666771e3460621875021bf899af9"}, - {file = "typed_ast-1.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9e237e74fd321a55c90eee9bc5d44be976979ad38a29bbd734148295c1ce7617"}, - {file = "typed_ast-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee852185964744987609b40aee1d2eb81502ae63ee8eef614558f96a56c1902d"}, - {file = "typed_ast-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:27e46cdd01d6c3a0dd8f728b6a938a6751f7bd324817501c15fb056307f918c6"}, - {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d64dabc6336ddc10373922a146fa2256043b3b43e61f28961caec2a5207c56d5"}, - {file = "typed_ast-1.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8cdf91b0c466a6c43f36c1964772918a2c04cfa83df8001ff32a89e357f8eb06"}, - {file = "typed_ast-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:9cc9e1457e1feb06b075c8ef8aeb046a28ec351b1958b42c7c31c989c841403a"}, - {file = "typed_ast-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e20d196815eeffb3d76b75223e8ffed124e65ee62097e4e73afb5fec6b993e7a"}, - {file = "typed_ast-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:37e5349d1d5de2f4763d534ccb26809d1c24b180a477659a12c4bde9dd677d74"}, - {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f1a27592fac87daa4e3f16538713d705599b0a27dfe25518b80b6b017f0a6d"}, - {file = "typed_ast-1.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8831479695eadc8b5ffed06fdfb3e424adc37962a75925668deeb503f446c0a3"}, - {file = "typed_ast-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:20d5118e494478ef2d3a2702d964dae830aedd7b4d3b626d003eea526be18718"}, - {file = "typed_ast-1.5.3.tar.gz", hash = "sha256:27f25232e2dd0edfe1f019d6bfaaf11e86e657d9bdb7b0956db95f560cceb2b3"}, -] types-certifi = [ {file = "types-certifi-2021.10.8.2.tar.gz", hash = "sha256:a36dc1cb4aeeea8c97430297db10b4c0481ba612ed443e48e3e8aa091f359440"}, {file = "types_certifi-2021.10.8.2-py3-none-any.whl", hash = "sha256:d8d61752071a10747f441c169967e31d43c1875d851973f4f9851c1cb8c5ed9d"}, diff --git a/polygon/rest/base.py b/polygon/rest/base.py index c5bf8a3a..c4da8afa 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -116,9 +116,9 @@ def _get_params( params = caller_locals["params"] if params is None: params = {} - # https://docs.python.org/3.7/library/inspect.html#inspect.Signature + # https://docs.python.org/3.8/library/inspect.html#inspect.Signature for argname, v in inspect.signature(fn).parameters.items(): - # https://docs.python.org/3.7/library/inspect.html#inspect.Parameter + # https://docs.python.org/3.8/library/inspect.html#inspect.Parameter if argname in ["params", "raw"]: continue if v.default != v.empty: diff --git a/pyproject.toml b/pyproject.toml index 7e55dd56..0bfe1a8a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ packages = [ ] [tool.poetry.dependencies] -python = "^3.7" +python = "^3.8" urllib3 = "^1.26.9" websockets = "^10.3" certifi = "^2021.10.8" From d85091f23df5fbfff99637773e09f0bef5d760d5 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Wed, 11 May 2022 16:13:10 -0400 Subject: [PATCH 077/448] Audited models for missing fields, removed unneeded arrays and enum imports, add Exceptions docs (#176) --- docs/source/Exceptions.rst | 18 ++ docs/source/Models.rst | 13 +- docs/source/index.rst | 1 + polygon/__init__.py | 2 +- polygon/rest/base.py | 4 +- polygon/rest/models/conditions.py | 15 +- polygon/rest/models/dividends.py | 5 +- polygon/rest/models/exchanges.py | 7 +- polygon/rest/models/markets.py | 4 +- polygon/rest/models/quotes.py | 12 +- polygon/rest/models/snapshot.py | 42 ++-- polygon/rest/models/tickers.py | 18 +- polygon/rest/snapshot.py | 14 +- test_rest/test_conditions.py | 320 ++++++++++++------------------ test_rest/test_markets.py | 10 +- test_rest/test_quotes.py | 8 +- test_rest/test_snapshots.py | 260 ++++++++---------------- test_rest/test_tickers.py | 14 +- 18 files changed, 315 insertions(+), 452 deletions(-) create mode 100644 docs/source/Exceptions.rst diff --git a/docs/source/Exceptions.rst b/docs/source/Exceptions.rst new file mode 100644 index 00000000..c33a122b --- /dev/null +++ b/docs/source/Exceptions.rst @@ -0,0 +1,18 @@ +.. _exceptions_header: + +Exceptions +============================================================== + +============================================================== +AuthError +============================================================== +.. autoclass:: polygon.websocket.__init__.AuthError + :members: + :undoc-members: + +============================================================== +NoResultsError +============================================================== +.. autoclass:: polygon.rest.base.NoResultsError + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/source/Models.rst b/docs/source/Models.rst index 05dcb437..1b41c235 100644 --- a/docs/source/Models.rst +++ b/docs/source/Models.rst @@ -51,12 +51,12 @@ Last Quote ============================================================== Snapshot Min ============================================================== -.. autoclass:: polygon.rest.models.SnapshotMin +.. autoclass:: polygon.rest.models.MinuteSnapshot ============================================================== Snapshot ============================================================== -.. autoclass:: polygon.rest.models.Snapshot +.. autoclass:: polygon.rest.models.TickerSnapshot ============================================================== Day Option Contract Snapshot @@ -68,15 +68,10 @@ Option Details ============================================================== .. autoclass:: polygon.rest.models.OptionDetails -============================================================== -Option Last Quote -============================================================== -.. autoclass:: polygon.rest.models.OptionLastQuote - ============================================================== Option Greeks ============================================================== -.. autoclass:: polygon.rest.models.OptionGreeks +.. autoclass:: polygon.rest.models.Greeks ============================================================== Underlying Asset @@ -106,7 +101,7 @@ Ticker ============================================================== Address ============================================================== -.. autoclass:: polygon.rest.models.Address +.. autoclass:: polygon.rest.models.CompanyAddress ============================================================== Branding diff --git a/docs/source/index.rst b/docs/source/index.rst index efe82e2f..f3925eb1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -18,6 +18,7 @@ This documentation is for the Python client only. For details about the response Models Enums WebSocket-Enums + Exceptions Indices and tables ================== diff --git a/polygon/__init__.py b/polygon/__init__.py index 7fe320e3..39e6f09c 100644 --- a/polygon/__init__.py +++ b/polygon/__init__.py @@ -1,3 +1,3 @@ from .rest import RESTClient -from .rest.base import NoResults +from .rest.base import NoResultsError from .websocket import WebSocketClient, AuthError diff --git a/polygon/rest/base.py b/polygon/rest/base.py index c4da8afa..3f96b963 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -14,7 +14,7 @@ pass -class NoResults(Exception): +class NoResultsError(Exception): pass @@ -84,7 +84,7 @@ def _get( if result_key: if result_key not in obj: - raise NoResults( + raise NoResultsError( f'Expected key "{result_key}" in response {obj}.' + "Make sure you have sufficient permissions and your request parameters are valid." + f"This is the url that returned no results: {resp.geturl()}" diff --git a/polygon/rest/models/conditions.py b/polygon/rest/models/conditions.py index 32a268d0..e94984a8 100644 --- a/polygon/rest/models/conditions.py +++ b/polygon/rest/models/conditions.py @@ -1,5 +1,4 @@ -from typing import Optional -from .common import AssetClass, DataType +from typing import Optional, List from dataclasses import dataclass @@ -50,10 +49,10 @@ def from_dict(d): return UpdateRules( consolidated=None if "consolidated" not in d - else [Consolidated.from_dict(d["consolidated"])], + else Consolidated.from_dict(d["consolidated"]), market_center=None if "market_center" not in d - else [MarketCenter.from_dict(d["market_center"])], + else MarketCenter.from_dict(d["market_center"]), ) @@ -61,8 +60,8 @@ def from_dict(d): class Condition: "Condition contains data for a condition that Polygon.io uses." abbreviation: Optional[str] = None - asset_class: Optional[AssetClass] = None - data_types: Optional[DataType] = None + asset_class: Optional[str] = None + data_types: Optional[List[str]] = None description: Optional[str] = None exchange: Optional[int] = None id: Optional[int] = None @@ -85,9 +84,9 @@ def from_dict(d): name=d.get("name", None), sip_mapping=None if "sip_mapping" not in d - else [SipMapping.from_dict(d["sip_mapping"])], + else SipMapping.from_dict(d["sip_mapping"]), type=d.get("type", None), update_rules=None if "update_rules" not in d - else [UpdateRules.from_dict(d["update_rules"])], + else UpdateRules.from_dict(d["update_rules"]), ) diff --git a/polygon/rest/models/dividends.py b/polygon/rest/models/dividends.py index 014e5d4d..2ae3ba80 100644 --- a/polygon/rest/models/dividends.py +++ b/polygon/rest/models/dividends.py @@ -1,5 +1,4 @@ from typing import Optional -from .common import DividendType, Frequency from dataclasses import dataclass @@ -8,9 +7,9 @@ class Dividend: "Dividend contains data for a historical cash dividend, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount." cash_amount: Optional[float] = None declaration_date: Optional[str] = None - dividend_type: Optional[DividendType] = None + dividend_type: Optional[str] = None ex_dividend_date: Optional[str] = None - frequency: Optional[Frequency] = None + frequency: Optional[int] = None pay_date: Optional[str] = None record_date: Optional[str] = None ticker: Optional[str] = None diff --git a/polygon/rest/models/exchanges.py b/polygon/rest/models/exchanges.py index 1cd0e07d..ef0254fe 100644 --- a/polygon/rest/models/exchanges.py +++ b/polygon/rest/models/exchanges.py @@ -1,5 +1,4 @@ from typing import Optional -from .common import AssetClass, Locale, ExchangeType from dataclasses import dataclass @@ -7,14 +6,14 @@ class Exchange: "Exchange contains data for a condition that Polygon.io uses." acronym: Optional[str] = None - asset_class: Optional[AssetClass] = None + asset_class: Optional[str] = None id: Optional[int] = None - locale: Optional[Locale] = None + locale: Optional[str] = None mic: Optional[str] = None name: Optional[str] = None operating_mic: Optional[str] = None participant_id: Optional[str] = None - type: Optional[ExchangeType] = None + type: Optional[str] = None url: Optional[str] = None @staticmethod diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 248e0e8e..3a3bbbc2 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -56,11 +56,11 @@ def from_dict(d): after_hours=d.get("after_hours", None), currencies=None if "currencies" not in d - else [MarketCurrencies.from_dict(d["currencies"])], + else MarketCurrencies.from_dict(d["currencies"]), early_hours=d.get("early_hours", None), exchanges=None if "exchanges" not in d - else [MarketExchanges.from_dict(d["exchanges"])], + else MarketExchanges.from_dict(d["exchanges"]), market=d.get("market", None), server_time=d.get("server_time", None), ) diff --git a/polygon/rest/models/quotes.py b/polygon/rest/models/quotes.py index 07082404..c19e711a 100644 --- a/polygon/rest/models/quotes.py +++ b/polygon/rest/models/quotes.py @@ -63,7 +63,7 @@ def from_dict(d): @dataclass -class Last: +class ForexQuote: "Contains data for a forex quote." ask: Optional[float] = None bid: Optional[float] = None @@ -72,19 +72,19 @@ class Last: @staticmethod def from_dict(d): - return Last(**d) + return ForexQuote(**d) @dataclass class LastForexQuote: "ForexLastQuote contains data for the last quote tick for a forex currency pair." - last: Optional[Last] = None + last: Optional[ForexQuote] = None symbol: Optional[str] = None @staticmethod def from_dict(d): return LastForexQuote( - last=None if "last" not in d else Last.from_dict(d["last"]), + last=None if "last" not in d else ForexQuote.from_dict(d["last"]), symbol=d.get("symbol", None), ) @@ -95,7 +95,7 @@ class RealTimeCurrencyConversion: converted: Optional[float] = None from_: Optional[str] = None initial_amount: Optional[float] = None - last: Optional[Last] = None + last: Optional[ForexQuote] = None to: Optional[str] = None @staticmethod @@ -104,6 +104,6 @@ def from_dict(d): converted=d.get("converted", None), from_=d.get("from_", None), initial_amount=d.get("initialAmount", None), - last=None if "last" not in d else Last.from_dict(d["last"]), + last=None if "last" not in d else ForexQuote.from_dict(d["last"]), to=d.get("to", None), ) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 2cdbb2bf..db2e3366 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -6,7 +6,7 @@ @dataclass -class SnapshotMin: +class MinuteSnapshot: "Most recent minute bar." accumulated_volume: Optional[float] = None open: Optional[float] = None @@ -18,7 +18,7 @@ class SnapshotMin: @staticmethod def from_dict(d): - return SnapshotMin( + return MinuteSnapshot( d.get("av", None), d.get("o", None), d.get("h", None), @@ -30,12 +30,12 @@ def from_dict(d): @dataclass -class Snapshot: +class TickerSnapshot: "Contains the most up-to-date market data for all traded ticker symbols." day: Optional[Agg] = None last_quote: Optional[LastQuote] = None last_trade: Optional[LastTrade] = None - min: Optional[SnapshotMin] = None + min: Optional[MinuteSnapshot] = None prev_day: Optional[Agg] = None ticker: Optional[str] = None todays_change: Optional[float] = None @@ -44,16 +44,16 @@ class Snapshot: @staticmethod def from_dict(d): - return Snapshot( - day=None if "day" not in d else [Agg.from_dict(d["day"])], + return TickerSnapshot( + day=None if "day" not in d else Agg.from_dict(d["day"]), last_quote=None if "last_quote" not in d - else [LastQuote.from_dict(d["last_quote"])], + else LastQuote.from_dict(d["last_quote"]), last_trade=None if "last_trade" not in d - else [LastTrade.from_dict(d["last_trade"])], - min=None if "min" not in d else [SnapshotMin.from_dict(d["min"])], - prev_day=None if "prev_day" not in d else [Agg.from_dict(d["prev_day"])], + else LastTrade.from_dict(d["last_trade"]), + min=None if "min" not in d else MinuteSnapshot.from_dict(d["min"]), + prev_day=None if "prev_day" not in d else Agg.from_dict(d["prev_day"]), ticker=d.get("ticker", None), todays_change=d.get("todays_change", None), todays_change_percent=d.get("todays_change_percent", None), @@ -96,7 +96,7 @@ def from_dict(d): @dataclass -class OptionLastQuote: +class LastQuoteOptionContractSnapshot: "Contains data for the most recent quote in an options contract." ask: Optional[float] = None ask_size: Optional[float] = None @@ -108,11 +108,11 @@ class OptionLastQuote: @staticmethod def from_dict(d): - return OptionLastQuote(**d) + return LastQuoteOptionContractSnapshot(**d) @dataclass -class OptionGreeks: +class Greeks: "Contains data for the greeks in an options contract." delta: Optional[float] = None gamma: Optional[float] = None @@ -121,7 +121,7 @@ class OptionGreeks: @staticmethod def from_dict(d): - return OptionGreeks(**d) + return Greeks(**d) @dataclass @@ -144,9 +144,9 @@ class OptionContractSnapshot: break_even_price: Optional[float] = None day: Optional[DayOptionContractSnapshot] = None details: Optional[OptionDetails] = None - greeks: Optional[OptionGreeks] = None + greeks: Optional[Greeks] = None implied_volatility: Optional[float] = None - last_quote: Optional[OptionLastQuote] = None + last_quote: Optional[LastQuoteOptionContractSnapshot] = None open_interest: Optional[float] = None underlying_asset: Optional[UnderlyingAsset] = None @@ -156,19 +156,19 @@ def from_dict(d): break_even_price=d.get("break_even_price", None), day=None if "day" not in d - else [DayOptionContractSnapshot.from_dict(d["day"])], + else DayOptionContractSnapshot.from_dict(d["day"]), details=None if "details" not in d - else [OptionDetails.from_dict(d["details"])], - greeks=None if "greeks" not in d else [OptionGreeks.from_dict(d["greeks"])], + else OptionDetails.from_dict(d["details"]), + greeks=None if "greeks" not in d else Greeks.from_dict(d["greeks"]), implied_volatility=d.get("implied_volatility", None), last_quote=None if "last_quote" not in d - else [OptionLastQuote.from_dict(d["last_quote"])], + else LastQuoteOptionContractSnapshot.from_dict(d["last_quote"]), open_interest=d.get("open_interest", None), underlying_asset=None if "underlying_asset" not in d - else [UnderlyingAsset.from_dict(d["underlying_asset"])], + else UnderlyingAsset.from_dict(d["underlying_asset"]), ) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index ee4712b1..4f650baa 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -1,5 +1,4 @@ from typing import Optional, List -from .common import Locale, Market, AssetClass from dataclasses import dataclass @@ -23,6 +22,9 @@ class Branding: "Contains branding data for a ticker detail." icon_url: Optional[str] = None logo_url: Optional[str] = None + accent_color: Optional[str] = None + light_color: Optional[str] = None + dark_color: Optional[str] = None @staticmethod def from_dict(d): @@ -54,8 +56,8 @@ class Ticker: base_currency_name: Optional[str] = None delisted_utc: Optional[str] = None last_updated_utc: Optional[str] = None - locale: Optional[Locale] = None - market: Optional[Market] = None + locale: Optional[str] = None + market: Optional[str] = None name: Optional[str] = None primary_exchange: Optional[str] = None share_class_figi: Optional[str] = None @@ -81,8 +83,8 @@ class TickerDetails: ticker_root: Optional[str] = None homepage_url: Optional[str] = None list_date: Optional[str] = None - locale: Optional[Locale] = None - market: Optional[Market] = None + locale: Optional[str] = None + market: Optional[str] = None market_cap: Optional[float] = None name: Optional[str] = None phone_number: Optional[str] = None @@ -159,7 +161,7 @@ def from_dict(d): published_utc=d.get("published_utc", None), publisher=None if "publisher" not in d - else [Publisher.from_dict(d["publisher"])], + else Publisher.from_dict(d["publisher"]), tickers=d.get("tickers", None), title=d.get("title", None), ) @@ -168,10 +170,10 @@ def from_dict(d): @dataclass class TickerTypes: "TickerTypes contains data for ticker types." - asset_class: Optional[AssetClass] = None + asset_class: Optional[str] = None code: Optional[str] = None description: Optional[str] = None - locale: Optional[Locale] = None + locale: Optional[str] = None @staticmethod def from_dict(d): diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 2aa5eefa..8784ae39 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -1,7 +1,7 @@ from .base import BaseClient from typing import Optional, Any, Dict, List, Union from .models import ( - Snapshot, + TickerSnapshot, Direction, OptionContractSnapshot, SnapshotMarketType, @@ -17,7 +17,7 @@ def get_snapshot_all( tickers: Optional[Union[str, List[str]]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[List[Snapshot], HTTPResponse]: + ) -> Union[List[TickerSnapshot], HTTPResponse]: """ Get the most up-to-date market data for all traded stock symbols. @@ -33,7 +33,7 @@ def get_snapshot_all( return self._get( path=url, params=self._get_params(self.get_snapshot_all, locals()), - deserializer=Snapshot.from_dict, + deserializer=TickerSnapshot.from_dict, raw=raw, result_key="tickers", ) @@ -44,7 +44,7 @@ def get_snapshot_direction( market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[List[Snapshot], HTTPResponse]: + ) -> Union[List[TickerSnapshot], HTTPResponse]: """ Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets. @@ -61,7 +61,7 @@ def get_snapshot_direction( path=url, params=self._get_params(self.get_snapshot_direction, locals()), result_key="tickers", - deserializer=Snapshot.from_dict, + deserializer=TickerSnapshot.from_dict, raw=raw, ) @@ -71,7 +71,7 @@ def get_snapshot_ticker( market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", params: Optional[Dict[str, Any]] = None, raw: bool = False, - ) -> Union[Snapshot, HTTPResponse]: + ) -> Union[TickerSnapshot, HTTPResponse]: """ Get the most up-to-date market data for all traded stock symbols. @@ -86,7 +86,7 @@ def get_snapshot_ticker( path=url, params=self._get_params(self.get_snapshot_ticker, locals()), result_key="ticker", - deserializer=Snapshot.from_dict, + deserializer=TickerSnapshot.from_dict, raw=raw, ) diff --git a/test_rest/test_conditions.py b/test_rest/test_conditions.py index f3495a6e..3ec5bb00 100644 --- a/test_rest/test_conditions.py +++ b/test_rest/test_conditions.py @@ -21,26 +21,20 @@ def test_list_conditions(self): id=1, legacy=None, name="Acquisition", - sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="A")], + sip_mapping=SipMapping(CTA=None, OPRA=None, UTP="A"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -51,26 +45,20 @@ def test_list_conditions(self): id=2, legacy=None, name="Average Price Trade", - sip_mapping=[SipMapping(CTA="B", OPRA=None, UTP="W")], + sip_mapping=SipMapping(CTA="B", OPRA=None, UTP="W"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=False, - updates_open_close=False, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=False, - updates_open_close=False, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -81,26 +69,20 @@ def test_list_conditions(self): id=3, legacy=None, name="Automatic Execution", - sip_mapping=[SipMapping(CTA="E", OPRA=None, UTP=None)], + sip_mapping=SipMapping(CTA="E", OPRA=None, UTP=None), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -111,26 +93,20 @@ def test_list_conditions(self): id=4, legacy=None, name="Bunched Trade", - sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="B")], + sip_mapping=SipMapping(CTA=None, OPRA=None, UTP="B"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -141,26 +117,20 @@ def test_list_conditions(self): id=5, legacy=None, name="Bunched Sold Trade", - sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="G")], + sip_mapping=SipMapping(CTA=None, OPRA=None, UTP="G"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=False, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=False, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -171,26 +141,20 @@ def test_list_conditions(self): id=6, legacy=True, name="CAP Election", - sip_mapping=[SipMapping(CTA="I", OPRA=None, UTP=None)], + sip_mapping=SipMapping(CTA="I", OPRA=None, UTP=None), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -201,26 +165,20 @@ def test_list_conditions(self): id=7, legacy=None, name="Cash Sale", - sip_mapping=[SipMapping(CTA="C", OPRA=None, UTP="C")], + sip_mapping=SipMapping(CTA="C", OPRA=None, UTP="C"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=False, - updates_open_close=False, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=False, - updates_open_close=False, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=False, + updates_open_close=False, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -231,26 +189,20 @@ def test_list_conditions(self): id=8, legacy=None, name="Closing Prints", - sip_mapping=[SipMapping(CTA=None, OPRA=None, UTP="6")], + sip_mapping=SipMapping(CTA=None, OPRA=None, UTP="6"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -261,26 +213,20 @@ def test_list_conditions(self): id=9, legacy=None, name="Cross Trade", - sip_mapping=[SipMapping(CTA="X", OPRA=None, UTP="X")], + sip_mapping=SipMapping(CTA="X", OPRA=None, UTP="X"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=True, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=True, + updates_volume=True, + ), + ), ), Condition( abbreviation=None, @@ -291,26 +237,20 @@ def test_list_conditions(self): id=10, legacy=None, name="Derivatively Priced", - sip_mapping=[SipMapping(CTA="4", OPRA=None, UTP="4")], + sip_mapping=SipMapping(CTA="4", OPRA=None, UTP="4"), type="sale_condition", - update_rules=[ - UpdateRules( - consolidated=[ - Consolidated( - updates_high_low=True, - updates_open_close=False, - updates_volume=True, - ) - ], - market_center=[ - MarketCenter( - updates_high_low=True, - updates_open_close=False, - updates_volume=True, - ) - ], - ) - ], + update_rules=UpdateRules( + consolidated=Consolidated( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ), + market_center=MarketCenter( + updates_high_low=True, + updates_open_close=False, + updates_volume=True, + ), + ), ), ] self.assertEqual(conditions, expected) diff --git a/test_rest/test_markets.py b/test_rest/test_markets.py index 2e8b767b..64614101 100644 --- a/test_rest/test_markets.py +++ b/test_rest/test_markets.py @@ -130,13 +130,11 @@ def test_get_market_status(self): status = self.c.get_market_status() expected = MarketStatus( after_hours=None, - currencies=[MarketCurrencies(crypto="open", fx="open")], + currencies=MarketCurrencies(crypto="open", fx="open"), early_hours=None, - exchanges=[ - MarketExchanges( - nasdaq="extended-hours", nyse="extended-hours", otc="extended-hours" - ) - ], + exchanges=MarketExchanges( + nasdaq="extended-hours", nyse="extended-hours", otc="extended-hours" + ), market="extended-hours", server_time=None, ) diff --git a/test_rest/test_quotes.py b/test_rest/test_quotes.py index 98470149..17b701b6 100644 --- a/test_rest/test_quotes.py +++ b/test_rest/test_quotes.py @@ -2,7 +2,7 @@ from polygon.rest.models import ( Quote, LastQuote, - Last, + ForexQuote, LastForexQuote, RealTimeCurrencyConversion, ) @@ -339,7 +339,9 @@ def test_get_last_quote(self): def test_get_last_forex_quote(self): last_forex = self.c.get_last_forex_quote("AUD", "USD") expected = LastForexQuote( - last=Last(ask=0.69527, bid=0.6952, exchange=48, timestamp=1652193694000), + last=ForexQuote( + ask=0.69527, bid=0.6952, exchange=48, timestamp=1652193694000 + ), symbol="AUD/USD", ) @@ -351,7 +353,7 @@ def test_get_real_time_currency_conversion(self): converted=69.31, from_=None, initial_amount=100, - last=Last( + last=ForexQuote( ask=1.4436264, bid=1.4427932, exchange=48, timestamp=1652195426000 ), to="USD", diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index e882ac4d..f8f4023a 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -1,13 +1,13 @@ from polygon.rest.models import ( - Snapshot, + TickerSnapshot, OptionContractSnapshot, SnapshotTickerFullBook, Agg, - SnapshotMin, + MinuteSnapshot, OrderBookQuote, UnderlyingAsset, - OptionLastQuote, - OptionGreeks, + LastQuoteOptionContractSnapshot, + Greeks, OptionDetails, DayOptionContractSnapshot, ) @@ -18,32 +18,28 @@ class SnapshotsTest(BaseTest): def test_get_snapshot_all(self): snapshots = self.c.get_snapshot_all() expected = [ - Snapshot( - day=[ - Agg( - open=20.64, - high=20.64, - low=20.506, - close=20.506, - volume=37216, - vwap=20.616, - timestamp=None, - transactions=None, - ) - ], + TickerSnapshot( + day=Agg( + open=20.64, + high=20.64, + low=20.506, + close=20.506, + volume=37216, + vwap=20.616, + timestamp=None, + transactions=None, + ), last_quote=None, last_trade=None, - min=[ - SnapshotMin( - accumulated_volume=37216, - open=20.506, - high=20.506, - low=20.506, - close=20.506, - volume=5000, - vwap=20.5105, - ) - ], + min=MinuteSnapshot( + accumulated_volume=37216, + open=20.506, + high=20.506, + low=20.506, + close=20.506, + volume=5000, + vwap=20.5105, + ), prev_day=None, ticker="BCAT", todays_change=None, @@ -53,104 +49,30 @@ def test_get_snapshot_all(self): ] self.assertEqual(snapshots, expected) - def test_get_snapshot_direction(self): - snapshots = self.c.get_snapshot_direction("gainers") - expected = [ - Snapshot( - day=[ - Agg( - open=6.81, - high=6.99, - low=6.4, - close=6.42, - volume=115782, - vwap=6.656, - timestamp=None, - transactions=None, - ) - ], - last_quote=None, - last_trade=None, - min=[ - SnapshotMin( - accumulated_volume=115689, - open=6.49, - high=6.542, - low=6.42, - close=6.42, - volume=2671, - vwap=6.4604, - ) - ], - prev_day=None, - ticker="NVCN", - todays_change=None, - todays_change_percent=None, - updated=1651251360000000000, - ), - Snapshot( - day=[ - Agg( - open=4.31, - high=4.95, - low=4.21, - close=4.2107, - volume=453199, - vwap=4.4181, - timestamp=None, - transactions=None, - ) - ], - last_quote=None, - last_trade=None, - min=[ - SnapshotMin( - accumulated_volume=453189, - open=4.2107, - high=4.2107, - low=4.2107, - close=4.2107, - volume=1012, - vwap=4.2107, - ) - ], - prev_day=None, - ticker="BIOL", - todays_change=None, - todays_change_percent=None, - updated=1651251789345841015, - ), - ] - self.assertEqual(snapshots, expected) - def test_get_snapshot_ticker(self): snapshots = self.c.get_snapshot_ticker("AAPL") - expected = Snapshot( - day=[ - Agg( - open=161.84, - high=166.2, - low=159.8, - close=160.315, - volume=68840127, - vwap=162.7124, - timestamp=None, - transactions=None, - ) - ], + expected = TickerSnapshot( + day=Agg( + open=161.84, + high=166.2, + low=159.8, + close=160.315, + volume=68840127, + vwap=162.7124, + timestamp=None, + transactions=None, + ), last_quote=None, last_trade=None, - min=[ - SnapshotMin( - accumulated_volume=68834255, - open=160.71, - high=160.71, - low=160.3, - close=160.3, - volume=197226, - vwap=160.5259, - ) - ], + min=MinuteSnapshot( + accumulated_volume=68834255, + open=160.71, + high=160.71, + low=160.3, + close=160.3, + volume=197226, + vwap=160.5259, + ), prev_day=None, ticker="AAPL", todays_change=None, @@ -163,60 +85,50 @@ def test_get_snapshot_option(self): snapshots = self.c.get_snapshot_option("AAPL", "O:AAPL230616C00150000") expected = OptionContractSnapshot( break_even_price=179.075, - day=[ - DayOptionContractSnapshot( - change=-2.3999999999999986, - change_percent=-7.643312101910824, - close=29, - high=32.25, - last_updated=1651204800000000000, - low=29, - open=29.99, - previous_close=31.4, - volume=8, - vwap=30.7738, - ) - ], - details=[ - OptionDetails( - contract_type="call", - exercise_style="american", - expiration_date="2023-06-16", - shares_per_contract=100, - strike_price=150, - ticker="O:AAPL230616C00150000", - ) - ], - greeks=[ - OptionGreeks( - delta=0.6436614934293701, - gamma=0.0061735291012820675, - theta=-0.028227189324641973, - vega=0.6381159723175714, - ) - ], + day=DayOptionContractSnapshot( + change=-2.3999999999999986, + change_percent=-7.643312101910824, + close=29, + high=32.25, + last_updated=1651204800000000000, + low=29, + open=29.99, + previous_close=31.4, + volume=8, + vwap=30.7738, + ), + details=OptionDetails( + contract_type="call", + exercise_style="american", + expiration_date="2023-06-16", + shares_per_contract=100, + strike_price=150, + ticker="O:AAPL230616C00150000", + ), + greeks=Greeks( + delta=0.6436614934293701, + gamma=0.0061735291012820675, + theta=-0.028227189324641973, + vega=0.6381159723175714, + ), implied_volatility=0.3570277203465058, - last_quote=[ - OptionLastQuote( - ask=29.25, - ask_size=209, - bid=28.9, - bid_size=294, - last_updated=1651254260800059648, - midpoint=29.075, - timeframe="REAL-TIME", - ) - ], + last_quote=LastQuoteOptionContractSnapshot( + ask=29.25, + ask_size=209, + bid=28.9, + bid_size=294, + last_updated=1651254260800059648, + midpoint=29.075, + timeframe="REAL-TIME", + ), open_interest=8133, - underlying_asset=[ - UnderlyingAsset( - change_to_break_even=19.11439999999999, - last_updated=1651254263172073152, - price=159.9606, - ticker="AAPL", - timeframe="REAL-TIME", - ) - ], + underlying_asset=UnderlyingAsset( + change_to_break_even=19.11439999999999, + last_updated=1651254263172073152, + price=159.9606, + ticker="AAPL", + timeframe="REAL-TIME", + ), ) self.assertEqual(snapshots, expected) diff --git a/test_rest/test_tickers.py b/test_rest/test_tickers.py index 7e534c46..b965753e 100644 --- a/test_rest/test_tickers.py +++ b/test_rest/test_tickers.py @@ -140,14 +140,12 @@ def test_list_ticker_news(self): image_url="https://images.mktw.net/im-533637/social", keywords=None, published_utc="2022-04-28T17:08:00Z", - publisher=[ - Publisher( - favicon_url="https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico", - homepage_url="https://www.marketwatch.com/", - logo_url="https://s3.polygon.io/public/assets/news/logos/marketwatch.svg", - name="MarketWatch", - ) - ], + publisher=Publisher( + favicon_url="https://s3.polygon.io/public/assets/news/favicons/marketwatch.ico", + homepage_url="https://www.marketwatch.com/", + logo_url="https://s3.polygon.io/public/assets/news/logos/marketwatch.svg", + name="MarketWatch", + ), tickers=["MSFT", "TSN", "NFLX", "AMZN"], title="Theres a big hole in the Feds theory of inflation—incomes are falling at a record 10.9 rate", ) From 8e4dd29ff10bd61f48e7b4b2e5c56dbbcc8e147a Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 11 May 2022 16:28:36 -0400 Subject: [PATCH 078/448] test on windows/osx (#174) * test on windows/osx * fix test paths for osx and windows * style * only lint 3.10 * remove mac * replace : with ; * windows hack * debugging * only hack on windows * more windows hacks * pook * style * fix static * more hacking * please pook * windowsss * style * lint * remove base export --- .github/workflows/lint.yml | 2 +- .github/workflows/test.yml | 8 +- poetry.lock | 165 +++++++++++++++++- polygon/rest/__init__.py | 8 +- polygon/rest/base.py | 9 +- polygon/rest/snapshot.py | 6 +- pyproject.toml | 2 +- test_rest/base.py | 22 ++- ...2.json => USD&amount=100&precision=2.json} | 0 ...rue.json => 2005-04-01&adjusted=True.json} | 0 ...rue.json => 2005-04-04&adjusted=True.json} | 0 ...ticker=NFLX.json => news&ticker=NFLX.json} | 0 .../tickers/{X:BTCUSD => X;BTCUSD}/book.json | 0 ...s?market.type=stocks.json => gainers.json} | 0 ...AAPL?market.type=stocks.json => AAPL.json} | 0 .../index.json} | 0 ...LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json} | 0 ...son => conditions&asset_class=stocks.json} | 0 ...U1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json} | 0 ...150000.json => O;AAPL230616C00150000.json} | 0 .../{AAPL?limit=2.json => AAPL&limit=2.json} | 0 test_rest/test_snapshots.py | 4 +- 22 files changed, 201 insertions(+), 25 deletions(-) rename test_rest/mocks/v1/conversion/AUD/{USD?amount=100&precision=2.json => USD&amount=100&precision=2.json} (100%) rename test_rest/mocks/v1/open-close/AAPL/{2005-04-01?adjusted=True.json => 2005-04-01&adjusted=True.json} (100%) rename test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/{2005-04-04?adjusted=True.json => 2005-04-04&adjusted=True.json} (100%) rename test_rest/mocks/v2/reference/{news?ticker=NFLX.json => news&ticker=NFLX.json} (100%) rename test_rest/mocks/v2/snapshot/locale/global/markets/crypto/tickers/{X:BTCUSD => X;BTCUSD}/book.json (100%) rename test_rest/mocks/v2/snapshot/locale/us/markets/stocks/{gainers?market.type=stocks.json => gainers.json} (100%) rename test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/{AAPL?market.type=stocks.json => AAPL.json} (100%) rename test_rest/mocks/v2/snapshot/locale/us/markets/stocks/{tickers?market.type=stocks.json => tickers/index.json} (100%) rename test_rest/mocks/v3/quotes/{AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json => AAPL&cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json} (100%) rename test_rest/mocks/v3/reference/{conditions?asset.class=stocks.json => conditions&asset_class=stocks.json} (100%) rename test_rest/mocks/v3/reference/{tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json => tickers&cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json} (100%) rename test_rest/mocks/v3/snapshot/options/AAPL/{O:AAPL230616C00150000.json => O;AAPL230616C00150000.json} (100%) rename test_rest/mocks/v3/trades/{AAPL?limit=2.json => AAPL&limit=2.json} (100%) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index afb92d9c..76bc9a45 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.8', '3.9', '3.10'] + python-version: ['3.10'] name: Lint ${{ matrix.python-version }} steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dfc5498e..baecc7a2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,13 +10,17 @@ permissions: contents: read jobs: test: - runs-on: ubuntu-latest strategy: fail-fast: false matrix: + os: [ubuntu-latest, windows-latest] python-version: ['3.8', '3.9', '3.10'] - name: Unit test ${{ matrix.python-version }} + runs-on: ${{ matrix.os }} + name: ${{ matrix.os }} Unit test ${{ matrix.python-version }} steps: + - name: Windows hack + run: git config --system core.longpaths true + if: ${{ matrix.os == 'windows-latest' }} - uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v3 diff --git a/poetry.lock b/poetry.lock index 0199d3a0..ab3e1a5e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -6,6 +6,20 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + [[package]] name = "babel" version = "2.10.1" @@ -86,12 +100,16 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -name = "httpretty" -version = "1.1.4" -description = "HTTP client mock for Python" +name = "furl" +version = "2.1.3" +description = "URL manipulation made simple." category = "dev" optional = false -python-versions = ">=3" +python-versions = "*" + +[package.dependencies] +orderedmultidict = ">=1.0.1" +six = ">=1.8.0" [[package]] name = "idna" @@ -125,6 +143,21 @@ docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +[[package]] +name = "importlib-resources" +version = "5.7.1" +description = "Read resources from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + [[package]] name = "jinja2" version = "3.1.2" @@ -139,6 +172,25 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jsonschema" +version = "4.5.1" +description = "An implementation of JSON Schema validation for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +attrs = ">=17.4.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + [[package]] name = "markupsafe" version = "2.1.1" @@ -173,6 +225,17 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "orderedmultidict" +version = "1.0.1" +description = "Ordered Multivalue Dictionary" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +six = ">=1.8.0" + [[package]] name = "packaging" version = "21.3" @@ -204,6 +267,19 @@ python-versions = ">=3.7" docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +[[package]] +name = "pook" +version = "1.0.2" +description = "HTTP traffic mocking and expectations made easy" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +furl = ">=0.5.6" +jsonschema = ">=2.5.1" +xmltodict = ">=0.11.0" + [[package]] name = "pygments" version = "2.12.0" @@ -223,6 +299,14 @@ python-versions = ">=3.6.8" [package.extras] diagrams = ["railroad-diagrams", "jinja2"] +[[package]] +name = "pyrsistent" +version = "0.18.1" +description = "Persistent/Functional/Immutable data structures" +category = "dev" +optional = false +python-versions = ">=3.7" + [[package]] name = "pytz" version = "2022.1" @@ -249,6 +333,14 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "snowballstemmer" version = "2.2.0" @@ -451,6 +543,14 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "xmltodict" +version = "0.13.0" +description = "Makes working with XML feel like you are working with JSON" +category = "dev" +optional = false +python-versions = ">=3.4" + [[package]] name = "zipp" version = "3.8.0" @@ -473,6 +573,10 @@ alabaster = [ {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] babel = [ {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, @@ -522,8 +626,9 @@ docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, ] -httpretty = [ - {file = "httpretty-1.1.4.tar.gz", hash = "sha256:20de0e5dd5a18292d36d928cc3d6e52f8b2ac73daec40d41eb62dee154933b68"}, +furl = [ + {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, + {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -537,10 +642,18 @@ importlib-metadata = [ {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, ] +importlib-resources = [ + {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, + {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, +] jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] +jsonschema = [ + {file = "jsonschema-4.5.1-py3-none-any.whl", hash = "sha256:71b5e39324422543546572954ce71c67728922c104902cb7ce252e522235b33f"}, + {file = "jsonschema-4.5.1.tar.gz", hash = "sha256:7c6d882619340c3347a1bf7315e147e6d3dae439033ae6383d6acb908c101dfc"}, +] markupsafe = [ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, @@ -612,6 +725,10 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] +orderedmultidict = [ + {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, + {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, +] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, @@ -624,6 +741,11 @@ platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] +pook = [ + {file = "pook-1.0.2-py2-none-any.whl", hash = "sha256:cd3cbfe280d544e672f41a5b9482883841ba247f865858b57fd59f729e37616a"}, + {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, + {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, +] pygments = [ {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, @@ -632,6 +754,29 @@ pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] +pyrsistent = [ + {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, + {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, + {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, + {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, +] pytz = [ {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, @@ -640,6 +785,10 @@ requests = [ {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, @@ -754,6 +903,10 @@ websockets = [ {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, ] +xmltodict = [ + {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, + {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, +] zipp = [ {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index b0c31594..5607cc46 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -15,8 +15,8 @@ import os -base = "https://api.polygon.io" -env_key = "POLYGON_API_KEY" +BASE = "https://api.polygon.io" +ENV_KEY = "POLYGON_API_KEY" class RESTClient( @@ -33,12 +33,12 @@ class RESTClient( ): def __init__( self, - api_key: Optional[str] = os.getenv(env_key), + api_key: Optional[str] = os.getenv(ENV_KEY), connect_timeout: float = 10.0, read_timeout: float = 10.0, num_pools: int = 10, retries: int = 3, - base: str = base, + base: str = BASE, verbose: bool = False, ): super().__init__( diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 3f96b963..ca2ca4dd 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -129,7 +129,14 @@ def _get_params( elif isinstance(val, datetime): val = int(val.timestamp() * self.time_mult(datetime_res)) if val is not None: - params[argname.replace("_", ".")] = val + if ( + argname.endswith("_lt") + or argname.endswith("_lte") + or argname.endswith("_gt") + or argname.endswith("_gte") + ): + argname = argname.replace("_", ".") + params[argname] = val return params diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 8784ae39..e43836f8 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -13,7 +13,7 @@ class SnapshotClient(BaseClient): def get_snapshot_all( self, - market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", + market_type: Optional[Union[str, SnapshotMarketType]], tickers: Optional[Union[str, List[str]]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, @@ -40,8 +40,8 @@ def get_snapshot_all( def get_snapshot_direction( self, + market_type: Optional[Union[str, SnapshotMarketType]], direction: Union[str, Direction], - market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", params: Optional[Dict[str, Any]] = None, raw: bool = False, ) -> Union[List[TickerSnapshot], HTTPResponse]: @@ -67,8 +67,8 @@ def get_snapshot_direction( def get_snapshot_ticker( self, + market_type: Optional[Union[str, SnapshotMarketType]], ticker: str, - market_type: Optional[Union[str, SnapshotMarketType]] = "stocks", params: Optional[Dict[str, Any]] = None, raw: bool = False, ) -> Union[TickerSnapshot, HTTPResponse]: diff --git a/pyproject.toml b/pyproject.toml index 0bfe1a8a..a57d8a4f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,13 +33,13 @@ certifi = "^2021.10.8" black = "^22.3.0" mypy = "^0.942" types-urllib3 = "^1.26.13" -httpretty = "^1.1.4" Sphinx = "^4.5.0" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" types-certifi = "^2021.10.8" types-setuptools = "^57.4.14" +pook = "^1.0.2" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/test_rest/base.py b/test_rest/base.py index 69e94acb..45aa168e 100644 --- a/test_rest/base.py +++ b/test_rest/base.py @@ -1,8 +1,9 @@ from polygon import RESTClient import os +import re import unittest -import httpretty # type: ignore +import pook # type: ignore # mocks are stored in file tree mocks = [] @@ -13,9 +14,20 @@ if fname.endswith(".json"): abspath = os.path.join(dname, fname) with open(abspath, "r") as f: - urllpath = abspath.replace(mockdir, "").replace(".json", "") + urllpath = abspath.replace(mockdir, "").replace("\\", "/") + urllpath = re.sub(".json$", "", urllpath) + urllpath = re.sub("/index$", "", urllpath) + # Windows will be sad. We support dev on Windows. + if "?" in urllpath: + raise Exception(f"use & instead of ? in path ${urllpath}") + urllpath = urllpath.replace("&", "?", 1) + if ":" in urllpath: + raise Exception(f"use ; instead of : in path ${urllpath}") + urllpath = urllpath.replace(";", ":", 1) + # print(abspath, urllpath) mocks.append((urllpath, f.read())) + unittest.util._MAX_LENGTH = 30000 # type: ignore @@ -24,8 +36,8 @@ class BaseTest(unittest.TestCase): def setUpClass(cls): cls.maxDiff = None cls.c = RESTClient("", verbose=True) - httpretty.enable(verbose=True, allow_net_connect=False) + pook.on() for m in mocks: url = cls.c.BASE + m[0] - # print('register', url) - httpretty.register_uri(httpretty.GET, url, m[1], match_querystring=True) + # print("register", url) + pook.get(url, reply=200, response_body=m[1]) diff --git a/test_rest/mocks/v1/conversion/AUD/USD?amount=100&precision=2.json b/test_rest/mocks/v1/conversion/AUD/USD&amount=100&precision=2.json similarity index 100% rename from test_rest/mocks/v1/conversion/AUD/USD?amount=100&precision=2.json rename to test_rest/mocks/v1/conversion/AUD/USD&amount=100&precision=2.json diff --git a/test_rest/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json b/test_rest/mocks/v1/open-close/AAPL/2005-04-01&adjusted=True.json similarity index 100% rename from test_rest/mocks/v1/open-close/AAPL/2005-04-01?adjusted=True.json rename to test_rest/mocks/v1/open-close/AAPL/2005-04-01&adjusted=True.json diff --git a/test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json b/test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04&adjusted=True.json similarity index 100% rename from test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04?adjusted=True.json rename to test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04&adjusted=True.json diff --git a/test_rest/mocks/v2/reference/news?ticker=NFLX.json b/test_rest/mocks/v2/reference/news&ticker=NFLX.json similarity index 100% rename from test_rest/mocks/v2/reference/news?ticker=NFLX.json rename to test_rest/mocks/v2/reference/news&ticker=NFLX.json diff --git a/test_rest/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json b/test_rest/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X;BTCUSD/book.json similarity index 100% rename from test_rest/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X:BTCUSD/book.json rename to test_rest/mocks/v2/snapshot/locale/global/markets/crypto/tickers/X;BTCUSD/book.json diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers.json similarity index 100% rename from test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers?market.type=stocks.json rename to test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers.json diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json similarity index 100% rename from test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL?market.type=stocks.json rename to test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json similarity index 100% rename from test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers?market.type=stocks.json rename to test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json diff --git a/test_rest/mocks/v3/quotes/AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json b/test_rest/mocks/v3/quotes/AAPL&cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json similarity index 100% rename from test_rest/mocks/v3/quotes/AAPL?cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json rename to test_rest/mocks/v3/quotes/AAPL&cursor=YXA9MTkyODgxNjYmYXM9JmxpbWl0PTEwJm9yZGVyPWRlc2Mmc29ydD10aW1lc3RhbXAmdGltZXN0YW1wLmx0ZT0yMDIyLTA1LTEwVDE0JTNBMTElM0ExMi42OTA2NjExODla.json diff --git a/test_rest/mocks/v3/reference/conditions?asset.class=stocks.json b/test_rest/mocks/v3/reference/conditions&asset_class=stocks.json similarity index 100% rename from test_rest/mocks/v3/reference/conditions?asset.class=stocks.json rename to test_rest/mocks/v3/reference/conditions&asset_class=stocks.json diff --git a/test_rest/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json b/test_rest/mocks/v3/reference/tickers&cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json similarity index 100% rename from test_rest/mocks/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json rename to test_rest/mocks/v3/reference/tickers&cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIyLTA0LTI3JmxpbWl0PTImb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUFBJTdDZjEyMmJjYmY4YWQwNzRmZmJlMTZmNjkxOWQ0ZDc3NjZlMzA3MWNmNmU1Nzg3OGE0OGU1NjQ1YzQyM2U3NzJhOSZzb3J0PXRpY2tlcg.json diff --git a/test_rest/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json b/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json similarity index 100% rename from test_rest/mocks/v3/snapshot/options/AAPL/O:AAPL230616C00150000.json rename to test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json diff --git a/test_rest/mocks/v3/trades/AAPL?limit=2.json b/test_rest/mocks/v3/trades/AAPL&limit=2.json similarity index 100% rename from test_rest/mocks/v3/trades/AAPL?limit=2.json rename to test_rest/mocks/v3/trades/AAPL&limit=2.json diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index f8f4023a..806e9a8a 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -16,7 +16,7 @@ class SnapshotsTest(BaseTest): def test_get_snapshot_all(self): - snapshots = self.c.get_snapshot_all() + snapshots = self.c.get_snapshot_all("stocks") expected = [ TickerSnapshot( day=Agg( @@ -50,7 +50,7 @@ def test_get_snapshot_all(self): self.assertEqual(snapshots, expected) def test_get_snapshot_ticker(self): - snapshots = self.c.get_snapshot_ticker("AAPL") + snapshots = self.c.get_snapshot_ticker("stocks", "AAPL") expected = TickerSnapshot( day=Agg( open=161.84, From 407555d18f2a7c54a91f914137cea8b31073ef89 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Thu, 12 May 2022 15:30:54 -0400 Subject: [PATCH 079/448] Custom class decorator to handle excess parameters (#177) --- polygon/modelclass.py | 23 ++++++++++++++ polygon/rest/models/aggs.py | 10 +++--- polygon/rest/models/conditions.py | 12 +++---- polygon/rest/models/dividends.py | 4 +-- polygon/rest/models/exchanges.py | 4 +-- polygon/rest/models/financials.py | 36 ++++++++++----------- polygon/rest/models/markets.py | 10 +++--- polygon/rest/models/quotes.py | 12 +++---- polygon/rest/models/snapshot.py | 22 ++++++------- polygon/rest/models/splits.py | 4 +-- polygon/rest/models/tickers.py | 16 +++++----- polygon/rest/models/trades.py | 8 ++--- polygon/websocket/models/models.py | 22 ++++++------- test_rest/test_modelclass.py | 51 ++++++++++++++++++++++++++++++ 14 files changed, 154 insertions(+), 80 deletions(-) create mode 100644 polygon/modelclass.py create mode 100644 test_rest/test_modelclass.py diff --git a/polygon/modelclass.py b/polygon/modelclass.py new file mode 100644 index 00000000..179e2689 --- /dev/null +++ b/polygon/modelclass.py @@ -0,0 +1,23 @@ +import inspect +from dataclasses import dataclass + + +def modelclass(cls): + cls = dataclass(cls) + attributes = [ + a + for a in cls.__dict__["__annotations__"].keys() + if not a.startswith("__") and not inspect.isroutine(a) + ] + + def init(self, *args, **kwargs): + for (i, a) in enumerate(args): + if i < len(attributes): + self.__dict__[attributes[i]] = a + for (k, v) in kwargs.items(): + if k in attributes: + self.__dict__[k] = v + + cls.__init__ = init + + return cls diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index b14d4969..72aa0db2 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -1,8 +1,8 @@ -from dataclasses import dataclass from typing import Optional +from ...modelclass import modelclass -@dataclass +@modelclass class Agg: "Contains aggregate data for a given ticker symbol over a given date range in a custom time window size." open: Optional[float] = None @@ -28,7 +28,7 @@ def from_dict(d): ) -@dataclass +@modelclass class GroupedDailyAgg: "Contains daily open, high, low, and close (OHLC) data for a given date." ticker: Optional[str] = None @@ -56,7 +56,7 @@ def from_dict(d): ) -@dataclass +@modelclass class DailyOpenCloseAgg: "Contains data for open, close and afterhours prices of a ticker symbol on a specified date." after_hours: Optional[float] = None @@ -86,7 +86,7 @@ def from_dict(d): ) -@dataclass +@modelclass class PreviousCloseAgg: "Contains data for the previous day's open, high, low, and close (OHLC) of the specified stock ticker." ticker: Optional[str] = None diff --git a/polygon/rest/models/conditions.py b/polygon/rest/models/conditions.py index e94984a8..3fc0d776 100644 --- a/polygon/rest/models/conditions.py +++ b/polygon/rest/models/conditions.py @@ -1,8 +1,8 @@ from typing import Optional, List -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class SipMapping: "Contains data for a mapping to a symbol for each SIP that has a given condition." CTA: Optional[str] = None @@ -14,7 +14,7 @@ def from_dict(d): return SipMapping(**d) -@dataclass +@modelclass class Consolidated: "Contains data for aggregation rules on a consolidated (all exchanges) basis." updates_high_low: Optional[bool] = None @@ -26,7 +26,7 @@ def from_dict(d): return Consolidated(**d) -@dataclass +@modelclass class MarketCenter: "Contains data for aggregation rules on a per-market-center basis." updates_high_low: Optional[bool] = None @@ -38,7 +38,7 @@ def from_dict(d): return MarketCenter(**d) -@dataclass +@modelclass class UpdateRules: "Contains data for a list of aggregation rules." consolidated: Optional[Consolidated] = None @@ -56,7 +56,7 @@ def from_dict(d): ) -@dataclass +@modelclass class Condition: "Condition contains data for a condition that Polygon.io uses." abbreviation: Optional[str] = None diff --git a/polygon/rest/models/dividends.py b/polygon/rest/models/dividends.py index 2ae3ba80..1abe5dc5 100644 --- a/polygon/rest/models/dividends.py +++ b/polygon/rest/models/dividends.py @@ -1,8 +1,8 @@ from typing import Optional -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class Dividend: "Dividend contains data for a historical cash dividend, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount." cash_amount: Optional[float] = None diff --git a/polygon/rest/models/exchanges.py b/polygon/rest/models/exchanges.py index ef0254fe..cd93a7d9 100644 --- a/polygon/rest/models/exchanges.py +++ b/polygon/rest/models/exchanges.py @@ -1,8 +1,8 @@ from typing import Optional -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class Exchange: "Exchange contains data for a condition that Polygon.io uses." acronym: Optional[str] = None diff --git a/polygon/rest/models/financials.py b/polygon/rest/models/financials.py index 6f578187..85a63e37 100644 --- a/polygon/rest/models/financials.py +++ b/polygon/rest/models/financials.py @@ -1,8 +1,8 @@ from typing import Optional, Dict -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class DataPoint: "An individual financial data point." formula: Optional[str] = None @@ -17,7 +17,7 @@ def from_dict(d): return DataPoint(**d) -@dataclass +@modelclass class ExchangeGainsLosses: "Contains exchange gains losses data for a cash flow statement." formula: Optional[str] = None @@ -32,7 +32,7 @@ def from_dict(d): return ExchangeGainsLosses(**d) -@dataclass +@modelclass class NetCashFlow: "Contains net cash flow data for a cash flow statement." formula: Optional[str] = None @@ -47,7 +47,7 @@ def from_dict(d): return NetCashFlow(**d) -@dataclass +@modelclass class NetCashFlowFromFinancingActivities: "Contains net cash flow from financing activities data for a cash flow statement." formula: Optional[str] = None @@ -62,7 +62,7 @@ def from_dict(d): return NetCashFlowFromFinancingActivities(**d) -@dataclass +@modelclass class CashFlowStatement: "Contains cash flow statement data." exchange_gains_losses: Optional[ExchangeGainsLosses] = None @@ -88,7 +88,7 @@ def from_dict(d): ) -@dataclass +@modelclass class ComprehensiveIncomeLoss: "Contains comprehensive income loss data for comprehensive income." formula: Optional[str] = None @@ -103,7 +103,7 @@ def from_dict(d): return ComprehensiveIncomeLoss(**d) -@dataclass +@modelclass class ComprehensiveIncomeLossAttributableToParent: "Contains comprehensive income loss attributable to parent data for comprehensive income." formula: Optional[str] = None @@ -118,7 +118,7 @@ def from_dict(d): return ComprehensiveIncomeLossAttributableToParent(**d) -@dataclass +@modelclass class OtherComprehensiveIncomeLoss: "Contains other comprehensive income loss data for comprehensive income." formula: Optional[str] = None @@ -133,7 +133,7 @@ def from_dict(d): return OtherComprehensiveIncomeLoss(**d) -@dataclass +@modelclass class ComprehensiveIncome: "Contains comprehensive income data." comprehensive_income_loss: Optional[ComprehensiveIncomeLoss] = None @@ -161,7 +161,7 @@ def from_dict(d): ) -@dataclass +@modelclass class BasicEarningsPerShare: "Contains basic earning per share data for an income statement." formula: Optional[str] = None @@ -176,7 +176,7 @@ def from_dict(d): return BasicEarningsPerShare(**d) -@dataclass +@modelclass class CostOfRevenue: "Contains cost of revenue data for an income statement." formula: Optional[str] = None @@ -191,7 +191,7 @@ def from_dict(d): return CostOfRevenue(**d) -@dataclass +@modelclass class GrossProfit: "Contains gross profit data for an income statement." formula: Optional[str] = None @@ -206,7 +206,7 @@ def from_dict(d): return GrossProfit(**d) -@dataclass +@modelclass class OperatingExpenses: "Contains operating expenses data for an income statement." formula: Optional[str] = None @@ -221,7 +221,7 @@ def from_dict(d): return OperatingExpenses(**d) -@dataclass +@modelclass class Revenues: "Contains revenues data for an income statement." formula: Optional[str] = None @@ -236,7 +236,7 @@ def from_dict(d): return Revenues(**d) -@dataclass +@modelclass class IncomeStatement: "Contains income statement data." basic_earnings_per_share: Optional[BasicEarningsPerShare] = None @@ -264,7 +264,7 @@ def from_dict(d): ) -@dataclass +@modelclass class Financials: "Contains financial data." balance_sheet: Optional[Dict[str, DataPoint]] = None @@ -290,7 +290,7 @@ def from_dict(d): ) -@dataclass +@modelclass class StockFinancial: "StockFinancial contains historical financial data for a stock ticker." cik: Optional[str] = None diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 3a3bbbc2..0ef769be 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -1,8 +1,8 @@ from typing import Optional -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class MarketCurrencies: "Contains currency market status data." crypto: Optional[str] = None @@ -13,7 +13,7 @@ def from_dict(d): return MarketCurrencies(**d) -@dataclass +@modelclass class MarketExchanges: "Contains exchange market status data." nasdaq: Optional[str] = None @@ -25,7 +25,7 @@ def from_dict(d): return MarketExchanges(**d) -@dataclass +@modelclass class MarketHoliday: "MarketHoliday contains data for upcoming market holidays and their open/close times." close: Optional[str] = None @@ -40,7 +40,7 @@ def from_dict(d): return MarketHoliday(**d) -@dataclass +@modelclass class MarketStatus: "MarketStatus contains data for the current trading status of the exchanges and overall financial markets." after_hours: Optional[bool] = None diff --git a/polygon/rest/models/quotes.py b/polygon/rest/models/quotes.py index c19e711a..c4f2c00f 100644 --- a/polygon/rest/models/quotes.py +++ b/polygon/rest/models/quotes.py @@ -1,8 +1,8 @@ from typing import Optional, List -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class Quote: "Quote contains quote data for a specified ticker symbol." ask_exchange: Optional[int] = None @@ -24,7 +24,7 @@ def from_dict(d): return Quote(**d) -@dataclass +@modelclass class LastQuote: "LastQuote contains data for the most recent NBBO (Quote) tick for a given stock." ticker: Optional[str] = None @@ -62,7 +62,7 @@ def from_dict(d): ) -@dataclass +@modelclass class ForexQuote: "Contains data for a forex quote." ask: Optional[float] = None @@ -75,7 +75,7 @@ def from_dict(d): return ForexQuote(**d) -@dataclass +@modelclass class LastForexQuote: "ForexLastQuote contains data for the last quote tick for a forex currency pair." last: Optional[ForexQuote] = None @@ -89,7 +89,7 @@ def from_dict(d): ) -@dataclass +@modelclass class RealTimeCurrencyConversion: "RealTimeCurrencyConversion contains data for currency conversions using the latest market conversion rates." converted: Optional[float] = None diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index db2e3366..072b8421 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -1,11 +1,11 @@ -from dataclasses import dataclass from typing import Optional, List, Dict from .aggs import Agg from .quotes import LastQuote from .trades import LastTrade +from ...modelclass import modelclass -@dataclass +@modelclass class MinuteSnapshot: "Most recent minute bar." accumulated_volume: Optional[float] = None @@ -29,7 +29,7 @@ def from_dict(d): ) -@dataclass +@modelclass class TickerSnapshot: "Contains the most up-to-date market data for all traded ticker symbols." day: Optional[Agg] = None @@ -61,7 +61,7 @@ def from_dict(d): ) -@dataclass +@modelclass class DayOptionContractSnapshot: "Contains data for the most recent daily bar in an options contract." change: Optional[float] = None @@ -80,7 +80,7 @@ def from_dict(d): return DayOptionContractSnapshot(**d) -@dataclass +@modelclass class OptionDetails: "Contains details for an options contract." contract_type: Optional[str] = None @@ -95,7 +95,7 @@ def from_dict(d): return OptionDetails(**d) -@dataclass +@modelclass class LastQuoteOptionContractSnapshot: "Contains data for the most recent quote in an options contract." ask: Optional[float] = None @@ -111,7 +111,7 @@ def from_dict(d): return LastQuoteOptionContractSnapshot(**d) -@dataclass +@modelclass class Greeks: "Contains data for the greeks in an options contract." delta: Optional[float] = None @@ -124,7 +124,7 @@ def from_dict(d): return Greeks(**d) -@dataclass +@modelclass class UnderlyingAsset: "Contains data for the underlying stock in an options contract." change_to_break_even: Optional[float] = None @@ -138,7 +138,7 @@ def from_dict(d): return UnderlyingAsset(**d) -@dataclass +@modelclass class OptionContractSnapshot: "Contains data for the snapshot of an option contract of a stock equity." break_even_price: Optional[float] = None @@ -172,7 +172,7 @@ def from_dict(d): ) -@dataclass +@modelclass class OrderBookQuote: "Contains data for a book bid or ask." price: Optional[float] = None @@ -186,7 +186,7 @@ def from_dict(d): ) -@dataclass +@modelclass class SnapshotTickerFullBook: "Contains the current level 2 book of a single ticker. This is the combined book from all of the exchanges." ticker: Optional[str] = None diff --git a/polygon/rest/models/splits.py b/polygon/rest/models/splits.py index 037a3e1e..93244c50 100644 --- a/polygon/rest/models/splits.py +++ b/polygon/rest/models/splits.py @@ -1,8 +1,8 @@ from typing import Optional -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class Split: "Split contains data for a historical stock split, including the ticker symbol, the execution date, and the factors of the split ratio." execution_date: Optional[str] = None diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 4f650baa..0b5e11f0 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -1,8 +1,8 @@ from typing import Optional, List -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class CompanyAddress: "Contains address data for a ticker detail." address1: Optional[str] = None @@ -17,7 +17,7 @@ def from_dict(d): return CompanyAddress(**d) -@dataclass +@modelclass class Branding: "Contains branding data for a ticker detail." icon_url: Optional[str] = None @@ -31,7 +31,7 @@ def from_dict(d): return Branding(**d) -@dataclass +@modelclass class Publisher: "Contains publisher data for ticker news." favicon_url: Optional[str] = None @@ -44,7 +44,7 @@ def from_dict(d): return Publisher(**d) -@dataclass +@modelclass class Ticker: "Ticker contains data for a specified ticker symbol." active: Optional[bool] = None @@ -69,7 +69,7 @@ def from_dict(d): return Ticker(**d) -@dataclass +@modelclass class TickerDetails: "TickerDetails contains data for a specified ticker symbol." active: Optional[bool] = None @@ -133,7 +133,7 @@ def from_dict(d): ) -@dataclass +@modelclass class TickerNews: "TickerDetails contains data for news articles relating to a stock ticker symbol." amp_url: Optional[str] = None @@ -167,7 +167,7 @@ def from_dict(d): ) -@dataclass +@modelclass class TickerTypes: "TickerTypes contains data for ticker types." asset_class: Optional[str] = None diff --git a/polygon/rest/models/trades.py b/polygon/rest/models/trades.py index 09825097..25b9adc7 100644 --- a/polygon/rest/models/trades.py +++ b/polygon/rest/models/trades.py @@ -1,8 +1,8 @@ from typing import Optional, List -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class Trade: "Trade contains trade data for a specified ticker symbol." conditions: Optional[List[int]] = None @@ -23,7 +23,7 @@ def from_dict(d): return Trade(**d) -@dataclass +@modelclass class LastTrade: "Contains data for the most recent trade for a given ticker symbol." ticker: Optional[str] = None @@ -59,7 +59,7 @@ def from_dict(d): ) -@dataclass +@modelclass class CryptoTrade: "Contains data for a crypto trade." conditions: Optional[List[int]] = None diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 53f7743d..75232007 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -1,9 +1,9 @@ from typing import Optional, List, Union, NewType from .common import EventType -from dataclasses import dataclass +from ...modelclass import modelclass -@dataclass +@modelclass class EquityAgg: "EquityAgg contains aggregate data for either stock tickers or option contracts." event_type: Optional[Union[str, EventType]] = None @@ -41,7 +41,7 @@ def from_dict(d): ) -@dataclass +@modelclass class CurrencyAgg: "CurrencyAgg contains aggregate data for either forex currency pairs or crypto pairs." event_type: Optional[Union[str, EventType]] = None @@ -73,7 +73,7 @@ def from_dict(d): ) -@dataclass +@modelclass class EquityTrade: "EquityTrade contains trade data for either stock tickers or option contracts." event_type: Optional[Union[str, EventType]] = None @@ -103,7 +103,7 @@ def from_dict(d): ) -@dataclass +@modelclass class CryptoTrade: "CryptoTrade contains trade data for a crypto pair." event_type: Optional[Union[str, EventType]] = None @@ -131,7 +131,7 @@ def from_dict(d): ) -@dataclass +@modelclass class EquityQuote: "EquityQuote contains quote data for either stock tickers or option contracts." event_type: Optional[Union[str, EventType]] = None @@ -165,7 +165,7 @@ def from_dict(d): ) -@dataclass +@modelclass class ForexQuote: "ForexQuote contains quote data for a forex currency pair." event_type: Optional[Union[str, EventType]] = None @@ -187,7 +187,7 @@ def from_dict(d): ) -@dataclass +@modelclass class CryptoQuote: "CryptoQuote contains quote data for a crypto pair." event_type: Optional[Union[str, EventType]] = None @@ -215,7 +215,7 @@ def from_dict(d): ) -@dataclass +@modelclass class Imbalance: "Imbalance contains imbalance event data for a given stock ticker symbol." event_type: Optional[Union[str, EventType]] = None @@ -245,7 +245,7 @@ def from_dict(d): ) -@dataclass +@modelclass class LimitUpLimitDown: "LimitUpLimitDown contains LULD event data for a given stock ticker symbol." event_type: Optional[Union[str, EventType]] = None @@ -271,7 +271,7 @@ def from_dict(d): ) -@dataclass +@modelclass class Level2Book: "Level2Book contains level 2 book data for a given crypto pair." event_type: Optional[Union[str, EventType]] = None diff --git a/test_rest/test_modelclass.py b/test_rest/test_modelclass.py new file mode 100644 index 00000000..651a6393 --- /dev/null +++ b/test_rest/test_modelclass.py @@ -0,0 +1,51 @@ +from polygon.rest.models import Agg +from base import BaseTest + + +class ModelclassTest(BaseTest): + def test_extra_field(self): + a = Agg( + open=1.5032, + high=1.5064, + low=1.4489, + close=1.4604, + volume=642646396.0, + vwap=1.469, + timestamp=1112331600000, + transactions=82132, + ) + b = Agg( + open=1.5032, + high=1.5064, + low=1.4489, + close=1.4604, + volume=642646396.0, + vwap=1.469, + timestamp=1112331600000, + transactions=82132, + extra_field=22, + ) + self.assertEqual(a, b) + + def test_init_order(self): + a = Agg( + open=1.5032, + high=1.5064, + low=1.4489, + close=1.4604, + volume=642646396.0, + vwap=1.469, + timestamp=1112331600000, + transactions=82132, + ) + b = Agg( + 1.5032, + 1.5064, + 1.4489, + 1.4604, + 642646396.0, + 1.469, + 1112331600000, + 82132, + ) + self.assertEqual(a, b) From ccbeb626b063e9b9d94b28e35cda968b9d3e8e0e Mon Sep 17 00:00:00 2001 From: zack <43246297+clickingbuttons@users.noreply.github.com> Date: Fri, 13 May 2022 11:29:09 -0400 Subject: [PATCH 080/448] bump example date --- examples/rest/simple-get.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rest/simple-get.py b/examples/rest/simple-get.py index 9a374222..43ad4387 100644 --- a/examples/rest/simple-get.py +++ b/examples/rest/simple-get.py @@ -2,5 +2,5 @@ client = RESTClient() -aggs = client.get_aggs("AAPL", 1, "day", "2004-04-04", "2004-04-04") +aggs = client.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04") print(aggs) From 82a8a939df2ec0af561dcc804f00d6c9855f3a44 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 16 May 2022 14:58:34 -0400 Subject: [PATCH 081/448] add contributing docs (#182) --- .github/ISSUE_TEMPLATE/bug_report.md | 37 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 28 +++++++++++++++++ README.md | 8 +++++ 3 files changed, 73 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..d9320547 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,37 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** + + +**To Reproduce** + + +**Expected behavior** + + +**Screenshots** + + +**Additional context** + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..8d22d026 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,28 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** + + +**Describe the solution you'd like** + + +**Describe alternatives you've considered** + + +**Additional context** + diff --git a/README.md b/README.md index c92a9829..9df0bcc7 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,11 @@ Requires Python >= 3.8. ## Getting started See the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) section in our docs or view the [examples](./examples) directory. + +# Contributing + +For now, we're generally not accepting pull requests from outside contributors +but we're open to bug reports and feature requests. Or if you have more general +feedback, feel free to reach out on +our [Slack channel](https://polygon.io/contact). + From c63b6e35097368ceea0be9a30682efd241d38787 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 16 May 2022 15:00:11 -0400 Subject: [PATCH 082/448] add limit param to financials (#181) * add limit param to financials * fix lint * add sort and order to list_ticker_news * add default values for list_tickers limit, order, and sort Co-authored-by: Darcy Linde <{47221647+Darcy-Linde@users.noreply.github.com}> --- examples/rest/financials.py | 5 +++++ polygon/rest/reference.py | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/examples/rest/financials.py b/examples/rest/financials.py index ad71a001..ecf67e56 100644 --- a/examples/rest/financials.py +++ b/examples/rest/financials.py @@ -4,3 +4,8 @@ financials = client.get_ticker_details("NFLX") print(financials) + +for (i, n) in enumerate(client.list_ticker_news("INTC", limit=5)): + print(i, n) + if i == 5: + break diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 7f681314..75f186a1 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -78,9 +78,9 @@ def list_tickers( 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, + limit: Optional[int] = 10, + sort: Optional[Union[str, Sort]] = "ticker", + order: Optional[Union[str, Order]] = "asc", params: Optional[Dict[str, Any]] = None, raw: bool = False, ) -> Union[Iterator[Ticker], HTTPResponse]: @@ -154,6 +154,9 @@ def list_ticker_news( published_utc_lte: Optional[str] = None, published_utc_gt: Optional[str] = None, published_utc_gte: 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[TickerNews], HTTPResponse]: From 015764b6d2d8a023e421bc1cd39f09d7eca75bf0 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Tue, 17 May 2022 13:22:47 -0400 Subject: [PATCH 083/448] Options contracts (#183) --- docs/source/Contracts.rst | 24 ++ docs/source/index.rst | 1 + polygon/rest/__init__.py | 2 + polygon/rest/models/__init__.py | 1 + polygon/rest/models/contracts.py | 47 +++ polygon/rest/reference.py | 198 ++++++++---- ...s&cursor=YXA9JTdCJTIySUQlMjIlM0ElMjIy.json | 116 +++++++ .../mocks/v3/reference/options/contracts.json | 117 +++++++ .../contracts/OEVRI240119C00002500.json | 15 + test_rest/test_contracts.py | 287 ++++++++++++++++++ 10 files changed, 749 insertions(+), 59 deletions(-) create mode 100644 docs/source/Contracts.rst create mode 100644 polygon/rest/models/contracts.py create mode 100644 test_rest/mocks/v3/reference/options/contracts&cursor=YXA9JTdCJTIySUQlMjIlM0ElMjIy.json create mode 100644 test_rest/mocks/v3/reference/options/contracts.json create mode 100644 test_rest/mocks/v3/reference/options/contracts/OEVRI240119C00002500.json create mode 100644 test_rest/test_contracts.py diff --git a/docs/source/Contracts.rst b/docs/source/Contracts.rst new file mode 100644 index 00000000..9278168f --- /dev/null +++ b/docs/source/Contracts.rst @@ -0,0 +1,24 @@ +.. _contracts_header: + +Contracts +================================= + +================================= +Get option contract +================================= + +- `Options Contract`_ + +.. automethod:: polygon.RESTClient.get_options_contract + +================================= +List Options Contracts +================================= + +- `Options Contracts`_ + +.. automethod:: polygon.RESTClient.list_options_contracts + + +.. _Options Contract: https://polygon.io/docs/options/get_v3_reference_options_contracts__options_ticker +.. _Options Contracts: https://polygon.io/docs/options/get_v3_reference_options_contracts \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index f3925eb1..b445b803 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -19,6 +19,7 @@ This documentation is for the Python client only. For details about the response Enums WebSocket-Enums Exceptions + Contracts Indices and tables ================== diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 5607cc46..5a2e4a3c 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -9,6 +9,7 @@ DividendsClient, ConditionsClient, ExchangesClient, + ContractsClient, ) from .vX import VXClient from typing import Optional @@ -30,6 +31,7 @@ class RESTClient( DividendsClient, ConditionsClient, ExchangesClient, + ContractsClient, ): def __init__( self, diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index ce0103be..8fca108c 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -10,3 +10,4 @@ from .exchanges import * from .snapshot import * from .financials import * +from .contracts import * diff --git a/polygon/rest/models/contracts.py b/polygon/rest/models/contracts.py new file mode 100644 index 00000000..d618f5b1 --- /dev/null +++ b/polygon/rest/models/contracts.py @@ -0,0 +1,47 @@ +from typing import Optional, List +from ...modelclass import modelclass + + +@modelclass +class Underlying: + "Underlying contains data for an underlying or deliverable associated with an option contract." + amount: Optional[float] = None + type: Optional[str] = None + underlying: Optional[str] = None + + @staticmethod + def from_dict(d): + return Underlying(**d) + + +@modelclass +class OptionsContract: + "OptionsContract contains data for a specified ticker symbol." + additional_underlyings: Optional[List[Underlying]] = None + cfi: Optional[str] = None + correction: Optional[str] = None + exercise_style: Optional[str] = None + expiration_date: Optional[str] = None + primary_exchange: Optional[str] = None + shares_per_contract: Optional[float] = None + strike_price: Optional[float] = None + ticker: Optional[str] = None + underlying_ticker: Optional[str] = None + + @staticmethod + def from_dict(d): + return OptionsContract( + additional_underlyings=None + if "additional_underlyings" not in d + else Underlying.from_dict(d["additional_underlyings"]), + cfi=d.get("cfi", None), + correction=d.get("correction", None), + exercise_style=d.get("exercise_style", None), + expiration_date=d.get("expiration_date", None), + primary_exchange=d.get("primary_exchange", None), + shares_per_contract=d.get("shares_per_contract", None), + strike_price=d.get("strike_price", None), + size=d.get("size", None), + ticker=d.get("ticker", None), + underlying_ticker=d.get("underlying_ticker", None), + ) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 75f186a1..0b5bf0d5 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -19,6 +19,7 @@ DataType, SIP, Exchange, + OptionsContract, ) from urllib3 import HTTPResponse from datetime import date @@ -31,9 +32,9 @@ def get_market_holidays( """ Get upcoming market holidays and their open/close times. - :param params: Any additional query params - :param raw: Return HTTPResponse object instead of results object - :return: List of market holidays + :param params: Any additional query params. + :param raw: Return HTTPResponse object instead of results object. + :return: List of market holidays. """ url = "/v1/marketstatus/upcoming" @@ -51,9 +52,9 @@ def get_market_status( """ Get the current trading status of the exchanges and overall financial markets. - :param params: Any additional query params - :param raw: Return HTTPResponse object instead of results object - :return: Market status + :param params: Any additional query params. + :param raw: Return HTTPResponse object instead of results object. + :return: Market status. """ url = "/v1/marketstatus/now" @@ -88,10 +89,10 @@ def list_tickers( 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: Ticker 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 ticker_lt: Ticker 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. @@ -103,9 +104,9 @@ def list_tickers( :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 + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: List of tickers. """ url = "/v3/reference/tickers" @@ -168,9 +169,9 @@ def list_ticker_news( :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 + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: Ticker News. """ url = "/v2/reference/news" @@ -193,9 +194,9 @@ def get_ticker_types( :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 + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: Ticker Types. """ url = "/v3/reference/tickers/types" @@ -232,22 +233,22 @@ def list_splits( Get a list of historical stock splits, including the ticker symbol, the execution date, and the factors of the split ratio. :param ticker: Return the stock splits that contain this ticker. - :param ticker_lt: Ticker 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 ticker_lt: Ticker 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 execution_date: Query by execution date with the format YYYY-MM-DD. - :param execution_date_lt: Execution date less than - :param execution_date_lte: Execution date less than or equal to - :param execution_date_gt: Execution date greater than - :param execution_date_gte: Execution date greater than or equal to + :param execution_date_lt: Execution date less than. + :param execution_date_lte: Execution date less than or equal to. + :param execution_date_gt: Execution date greater than. + :param execution_date_gte: Execution date greater than or equal to. :param reverse_split: Query for reverse stock splits. A split ratio where split_from is greater than split_to represents a reverse split. By default this filter is not used. :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: List of splits + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: List of splits. """ url = "/v3/reference/splits" @@ -304,39 +305,39 @@ def list_dividends( Get a list of historical cash dividends, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount. :param ticker: Return the dividends that contain this ticker. - :param ticker_lt: Ticker 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 ticker_lt: Ticker 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 ex_dividend_date: Query by ex-dividend date with the format YYYY-MM-DD. - :param ex_dividend_date_lt: Ex-dividend date less than - :param ex_dividend_date_lte: Ex-dividend date less than or equal to - :param ex_dividend_date_gt: Ex-dividend date greater than - :param ex_dividend_date_gte: Ex-dividend date greater than or equal to + :param ex_dividend_date_lt: Ex-dividend date less than. + :param ex_dividend_date_lte: Ex-dividend date less than or equal to. + :param ex_dividend_date_gt: Ex-dividend date greater than. + :param ex_dividend_date_gte: Ex-dividend date greater than or equal to. :param record_date: Query by record date with the format YYYY-MM-DD. - :param record_date_lt: Record date less than - :param record_date_lte: Record date less than or equal to - :param record_date_gt: Record date greater than - :param record_date_gte: Record date greater than or equal to + :param record_date_lt: Record date less than. + :param record_date_lte: Record date less than or equal to. + :param record_date_gt: Record date greater than. + :param record_date_gte: Record date greater than or equal to. :param declaration_date: Query by declaration date with the format YYYY-MM-DD. - :param declaration_date_lt: Declaration date less than - :param declaration_date_lte: Declaration date less than or equal to - :param declaration_date_gt: Declaration date greater than - :param declaration_date_gte: Declaration date greater than or equal to + :param declaration_date_lt: Declaration date less than. + :param declaration_date_lte: Declaration date less than or equal to. + :param declaration_date_gt: Declaration date greater than. + :param declaration_date_gte: Declaration date greater than or equal to. :param pay_date: Query by pay date with the format YYYY-MM-DD. - :param pay_date_lt: Pay date less than - :param pay_date_lte: Pay date less than or equal to - :param pay_date_gt: Pay date greater than - :param pay_date_gte: Pay date greater than or equal to + :param pay_date_lt: Pay date less than. + :param pay_date_lte: Pay date less than or equal to. + :param pay_date_gt: Pay date greater than. + :param pay_date_gte: Pay date greater than or equal to. :param frequency: Query by the number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly). :param cash_amount: Query by the cash amount of the dividend. :param dividend_type: Query by the type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD. Special Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC. :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: List of dividends + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: List of dividends. """ url = "/v3/reference/dividends" @@ -371,9 +372,9 @@ def list_conditions( :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: List of conditions + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: List of conditions. """ url = "/v3/reference/conditions" @@ -398,9 +399,9 @@ def get_exchanges( :param asset_class: Filter by asset class. :param locale: Filter by locale. - :param params: Any additional query params - :param raw: Return HTTPResponse object instead of results object - :return: List of exchanges + :param params: Any additional query params. + :param raw: Return HTTPResponse object instead of results object. + :return: List of exchanges. """ url = "/v3/reference/exchanges" @@ -411,3 +412,82 @@ def get_exchanges( raw=raw, result_key="results", ) + + +class ContractsClient(BaseClient): + def get_options_contract( + self, + ticker: str, + as_of: Union[str, date] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[OptionsContract, HTTPResponse]: + """ + Get the most recent trade for a ticker. + + :param ticker: The ticker symbol of the asset + :param as_of: Specify a point in time for the contract as of this date with format YYYY-MM-DD. + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: Last trade. + """ + url = f"/v3/reference/options/contracts/{ticker}" + + return self._get( + path=url, + params=self._get_params(self.get_options_contract, locals()), + result_key="results", + deserializer=OptionsContract.from_dict, + raw=raw, + ) + + def list_options_contracts( + self, + underlying_ticker: Optional[str] = None, + underlying_ticker_lt: Optional[str] = None, + underlying_ticker_lte: Optional[str] = None, + underlying_ticker_gt: Optional[str] = None, + underlying_ticker_gte: Optional[str] = None, + contract_type: Optional[str] = None, + expiration_date: Optional[Union[str, date]] = None, + expiration_date_lt: Optional[Union[str, date]] = None, + expiration_date_lte: Optional[Union[str, date]] = None, + expiration_date_gt: Optional[Union[str, date]] = None, + expiration_date_gte: Optional[Union[str, date]] = None, + as_of: Optional[Union[str, date]] = None, + strike_price: Optional[float] = None, + strike_price_lt: Optional[float] = None, + strike_price_lte: Optional[float] = None, + strike_price_gt: Optional[float] = None, + strike_price_gte: Optional[float] = None, + expired: Optional[bool] = 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[OptionsContract], HTTPResponse]: + """ + List historical options contracts. + + :param underlying_ticker: Query for contracts relating to an underlying stock ticker. + :param contract_type: Query by the type of contract. + :param expiration_date: Query by contract expiration with date format YYYY-MM-DD. + :param as_of: Specify a point in time for contracts as of this date with format YYYY-MM-DD. + :param strike_price: Query by strike price of a contract. + :param expired: Query for expired contracts. + :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: List of options contracts. + """ + url = "/v3/reference/options/contracts" + + return self._paginate( + path=url, + params=self._get_params(self.list_options_contracts, locals()), + raw=raw, + deserializer=OptionsContract.from_dict, + ) diff --git a/test_rest/mocks/v3/reference/options/contracts&cursor=YXA9JTdCJTIySUQlMjIlM0ElMjIy.json b/test_rest/mocks/v3/reference/options/contracts&cursor=YXA9JTdCJTIySUQlMjIlM0ElMjIy.json new file mode 100644 index 00000000..4a041387 --- /dev/null +++ b/test_rest/mocks/v3/reference/options/contracts&cursor=YXA9JTdCJTIySUQlMjIlM0ElMjIy.json @@ -0,0 +1,116 @@ +{ + "results": [ + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 115, + "ticker": "O:A220520C00115000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 120, + "ticker": "O:A220520C00120000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 125, + "ticker": "O:A220520C00125000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 130, + "ticker": "O:A220520C00130000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 135, + "ticker": "O:A220520C00135000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 140, + "ticker": "O:A220520C00140000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 145, + "ticker": "O:A220520C00145000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:A220520C00150000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 155, + "ticker": "O:A220520C00155000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 160, + "ticker": "O:A220520C00160000", + "underlying_ticker": "A" + } + ], + "status": "OK", + "request_id": "7ab36c77b9412ecc95275a94461be18f" +} \ No newline at end of file diff --git a/test_rest/mocks/v3/reference/options/contracts.json b/test_rest/mocks/v3/reference/options/contracts.json new file mode 100644 index 00000000..639c5cf5 --- /dev/null +++ b/test_rest/mocks/v3/reference/options/contracts.json @@ -0,0 +1,117 @@ +{ + "results": [ + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 65, + "ticker": "O:A220520C00065000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 70, + "ticker": "O:A220520C00070000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 75, + "ticker": "O:A220520C00075000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 80, + "ticker": "O:A220520C00080000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 85, + "ticker": "O:A220520C00085000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 90, + "ticker": "O:A220520C00090000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 95, + "ticker": "O:A220520C00095000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 100, + "ticker": "O:A220520C00100000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 105, + "ticker": "O:A220520C00105000", + "underlying_ticker": "A" + }, + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-05-20", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 110, + "ticker": "O:A220520C00110000", + "underlying_ticker": "A" + } + ], + "status": "OK", + "request_id": "30ece14c74dcfc5ad4785b08fd21456d", + "next_url": "https://api.polygon.io/v3/reference/options/contracts?cursor=YXA9JTdCJTIySUQlMjIlM0ElMjIy" +} \ No newline at end of file diff --git a/test_rest/mocks/v3/reference/options/contracts/OEVRI240119C00002500.json b/test_rest/mocks/v3/reference/options/contracts/OEVRI240119C00002500.json new file mode 100644 index 00000000..5ceaa157 --- /dev/null +++ b/test_rest/mocks/v3/reference/options/contracts/OEVRI240119C00002500.json @@ -0,0 +1,15 @@ +{ + "results": { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2024-01-19", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 2.5, + "ticker": "O:EVRI240119C00002500", + "underlying_ticker": "EVRI" + }, + "status": "OK", + "request_id": "c6a1dbcd2337b5887761d09bd4afdff8" +} \ No newline at end of file diff --git a/test_rest/test_contracts.py b/test_rest/test_contracts.py new file mode 100644 index 00000000..39ad7215 --- /dev/null +++ b/test_rest/test_contracts.py @@ -0,0 +1,287 @@ +from polygon.rest.models import OptionsContract +from base import BaseTest + + +class ContractsTest(BaseTest): + def test_get_options_contract(self): + contract = self.c.get_options_contract("OEVRI240119C00002500") + expected = OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2024-01-19", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=2.5, + size=None, + ticker="O:EVRI240119C00002500", + underlying_ticker="EVRI", + ) + self.assertEqual(contract, expected) + + def test_list_options_contracts(self): + contracts = [c for c in self.c.list_options_contracts()] + expected = [ + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=65, + size=None, + ticker="O:A220520C00065000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=70, + size=None, + ticker="O:A220520C00070000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=75, + size=None, + ticker="O:A220520C00075000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=80, + size=None, + ticker="O:A220520C00080000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=85, + size=None, + ticker="O:A220520C00085000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=90, + size=None, + ticker="O:A220520C00090000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=95, + size=None, + ticker="O:A220520C00095000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=100, + size=None, + ticker="O:A220520C00100000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=105, + size=None, + ticker="O:A220520C00105000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=110, + size=None, + ticker="O:A220520C00110000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=115, + size=None, + ticker="O:A220520C00115000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=120, + size=None, + ticker="O:A220520C00120000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=125, + size=None, + ticker="O:A220520C00125000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=130, + size=None, + ticker="O:A220520C00130000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=135, + size=None, + ticker="O:A220520C00135000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=140, + size=None, + ticker="O:A220520C00140000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=145, + size=None, + ticker="O:A220520C00145000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=150, + size=None, + ticker="O:A220520C00150000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=155, + size=None, + ticker="O:A220520C00155000", + underlying_ticker="A", + ), + OptionsContract( + additional_underlyings=None, + cfi="OCASPS", + correction=None, + exercise_style="american", + expiration_date="2022-05-20", + primary_exchange="BATO", + shares_per_contract=100, + strike_price=160, + size=None, + ticker="O:A220520C00160000", + underlying_ticker="A", + ), + ] + self.assertEqual(contracts, expected) From b43d39cda24ac7ba8cda219661fc7d659ef47a48 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Tue, 17 May 2022 15:42:22 -0400 Subject: [PATCH 084/448] Add Logger (#184) * add logger * pretty logging * lint --- polygon/logging.py | 12 ++++++ polygon/rest/base.py | 11 +++--- polygon/websocket/__init__.py | 56 +++++++++++++--------------- polygon/websocket/models/__init__.py | 5 ++- test_websocket/base_ws.py | 5 ++- 5 files changed, 50 insertions(+), 39 deletions(-) create mode 100644 polygon/logging.py diff --git a/polygon/logging.py b/polygon/logging.py new file mode 100644 index 00000000..171f4f41 --- /dev/null +++ b/polygon/logging.py @@ -0,0 +1,12 @@ +import logging +import sys + + +def get_logger(name: str) -> logging.Logger: + logger = logging.getLogger(name) + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s") + handler.setFormatter(formatter) + logger.addHandler(handler) + + return logger diff --git a/polygon/rest/base.py b/polygon/rest/base.py index ca2ca4dd..6442215d 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -6,7 +6,10 @@ from typing import Optional, Any, Dict from datetime import datetime import pkg_resources # part of setuptools +from ..logging import get_logger +import logging +logger = get_logger("RESTClient") version = "unknown" try: version = pkg_resources.require("polygon-api-client")[0].version @@ -49,7 +52,8 @@ def __init__( ) self.timeout = urllib3.Timeout(connect=connect_timeout, read=read_timeout) self.retries = retries - self.verbose = verbose + if verbose: + logger.setLevel(logging.DEBUG) def _decode(self, resp): return json.loads(resp.data.decode("utf-8")) @@ -65,8 +69,7 @@ def _get( if params is None: params = {} params = {str(k): str(v) for k, v in params.items() if v is not None} - if self.verbose: - print("_get", path, params) + logger.debug("_get %s params %s", path, params) resp = self.client.request( "GET", self.BASE + path, @@ -144,7 +147,6 @@ def _paginate_iter( self, path: str, params: dict, - raw: bool, deserializer, result_key: str = "results", ): @@ -183,5 +185,4 @@ def _paginate( params=params, deserializer=deserializer, result_key=result_key, - raw=True, ) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index eccd0e03..017a9773 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -1,6 +1,7 @@ import os from enum import Enum from typing import Optional, Union, List, Set, Callable, Awaitable +import logging import json import asyncio import ssl @@ -8,8 +9,11 @@ from .models import * from websockets.client import connect, WebSocketClientProtocol from websockets.exceptions import ConnectionClosedOK, ConnectionClosedError +from ..logging import get_logger +import logging env_key = "POLYGON_API_KEY" +logger = get_logger("WebSocketClient") class AuthError(Exception): @@ -35,7 +39,7 @@ def __init__( :param api_key: Your API keYour API key. :param feed: The feed to subscribe to. :param raw: Whether to pass raw Union[str, bytes] to user callback. - :param verbose: Whether to print client and server status messages. + :param verbose: Whether to log client and server status messages. :param subscriptions: List of subscription parameters. :param max_reconnects: How many times to reconnect on network outage before ending .connect event loop. :return: A client. @@ -48,7 +52,8 @@ def __init__( self.feed = feed self.market = market self.raw = raw - self.verbose = verbose + if verbose: + logger.setLevel(logging.DEBUG) self.websocket_cfg = kwargs if isinstance(feed, Enum): feed = feed.value @@ -82,8 +87,7 @@ async def connect( :raises AuthError: If invalid API key is supplied. """ reconnects = 0 - if self.verbose: - print("connect:", self.url) + logger.debug("connect: %s", self.url) # darwin needs some extra <3 ssl_context = None if self.url.startswith("wss://"): @@ -96,21 +100,19 @@ async def connect( self.websocket = s try: msg = await s.recv() - if self.verbose: - print("connected:", msg) - if self.verbose: - print("authing:") + logger.debug("connected: %s", msg) + logger.debug("authing...") await s.send(json.dumps({"action": "auth", "params": self.api_key})) auth_msg = await s.recv() auth_msg_parsed = json.loads(auth_msg) - if self.verbose: - print("authed:", auth_msg) + logger.debug("authed: %s", auth_msg) if auth_msg_parsed[0]["status"] == "auth_failed": raise AuthError(auth_msg_parsed[0]["message"]) while True: if self.schedule_resub: - if self.verbose: - print("reconciling:", self.subs, self.scheduled_subs) + logger.debug( + "reconciling: %s %s", self.subs, self.scheduled_subs + ) new_subs = self.scheduled_subs.difference(self.subs) await self._subscribe(new_subs) old_subs = self.subs.difference(self.scheduled_subs) @@ -126,21 +128,18 @@ async def connect( msgJson = json.loads(cmsg) # type: ignore for m in msgJson: if m["ev"] == "status": - if self.verbose: - print("status:", m["message"]) + logger.debug("status: %s", m["message"]) continue if not self.raw: - cmsg = parse(msgJson) + cmsg = parse(msgJson, logger) if len(cmsg) > 0: await processor(cmsg) # type: ignore except ConnectionClosedOK: - if self.verbose: - print("connection closed (OK)") + logger.debug("connection closed (OK)") return except ConnectionClosedError: - if self.verbose: - print("connection closed (error)") + logger.debug("connection closed (ERR)") reconnects += 1 if self.max_reconnects is not None and reconnects > self.max_reconnects: return @@ -172,16 +171,14 @@ async def _subscribe(self, topics: Union[List[str], Set[str]]): if self.websocket is None or len(topics) == 0: return subs = ",".join(topics) - if self.verbose: - print("subbing:", subs) + logger.debug("subbing: %s", subs) await self.websocket.send(json.dumps({"action": "subscribe", "params": subs})) async def _unsubscribe(self, topics: Union[List[str], Set[str]]): if self.websocket is None or len(topics) == 0: return subs = ",".join(topics) - if self.verbose: - print("unsubbing:", subs) + logger.debug("unsubbing: %s", subs) await self.websocket.send(json.dumps({"action": "unsubscribe", "params": subs})) @staticmethod @@ -189,7 +186,7 @@ def _parse_subscription(s: str): s = s.strip() split = s.split(".") if len(split) != 2: - print("invalid subscription:", s) + logger.warning("invalid subscription:", s) return [None, None] return split @@ -204,8 +201,7 @@ def subscribe(self, *subscriptions: str): topic, sym = self._parse_subscription(s) if topic == None: continue - if self.verbose: - print("add:", s) + logger.debug("sub desired: %s", s) self.scheduled_subs.add(s) # If user subs to X.*, remove other X.\w+ if sym == "*": @@ -225,8 +221,7 @@ def unsubscribe(self, *subscriptions: str): topic, sym = self._parse_subscription(s) if topic == None: continue - if self.verbose: - print("discard:", s) + logger.debug("sub undesired: %s", s) self.scheduled_subs.discard(s) # If user unsubs to X.*, remove other X.\w+ @@ -248,11 +243,10 @@ async def close(self): """ Close the websocket connection. """ - if self.verbose: - print("closing:") + logger.debug("closing") if self.websocket: await self.websocket.close() self.websocket = None else: - print("no websocket open to close") + logger.warning("no websocket open to close") diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py index 259f0e44..67c60adc 100644 --- a/polygon/websocket/models/__init__.py +++ b/polygon/websocket/models/__init__.py @@ -1,6 +1,7 @@ from typing import Dict, Any, List from .common import * from .models import * +import logging def parse_single(data: Dict[str, Any]): @@ -30,13 +31,13 @@ def parse_single(data: Dict[str, Any]): return None -def parse(msg: List[Dict[str, Any]]) -> List[WebSocketMessage]: +def parse(msg: List[Dict[str, Any]], logger: logging.Logger) -> List[WebSocketMessage]: res = [] for m in msg: parsed = parse_single(m) if parsed is None: if m["ev"] != "status": - print("could not parse message", m) + logger.warning("could not parse message %s", m) else: res.append(parsed) return res diff --git a/test_websocket/base_ws.py b/test_websocket/base_ws.py index 2d27c53b..c4a6acad 100644 --- a/test_websocket/base_ws.py +++ b/test_websocket/base_ws.py @@ -22,4 +22,7 @@ def expectResponse(self, msg): async def asyncSetUp(self): self.maxDiff = None loop = asyncio.get_event_loop() - loop.create_task(run_mock_server()) + self.task = loop.create_task(run_mock_server()) + + async def asyncTearDown(self): + self.task.cancel() From d49d9874a9d361120948223139d95ed521fb590e Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Tue, 17 May 2022 16:43:55 -0400 Subject: [PATCH 085/448] add dependabot (#185) --- .github/dependabot.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..87d184e9 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "poetry" + directory: "/" + schedule: + interval: "weekly" From b0842c945cfd7dbf2b69b862f2861e16f94dba0b Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Tue, 17 May 2022 16:51:53 -0400 Subject: [PATCH 086/448] fix dependabot (#186) --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 87d184e9..6a7695c0 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,6 +1,6 @@ version: 2 updates: - - package-ecosystem: "poetry" + - package-ecosystem: "pip" directory: "/" schedule: interval: "weekly" From ff235fb94b47c0795d9dfd54bf3ed2414e360ef4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 May 2022 16:58:30 -0400 Subject: [PATCH 087/448] Bump mypy from 0.942 to 0.950 (#187) Bumps [mypy](https://github.com/python/mypy) from 0.942 to 0.950. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.942...v0.950) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 54 ++++++++++++++++++++++++-------------------------- pyproject.toml | 2 +- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/poetry.lock b/poetry.lock index ab3e1a5e..dbeafcc9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -182,10 +182,8 @@ python-versions = ">=3.7" [package.dependencies] attrs = ">=17.4.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -201,7 +199,7 @@ python-versions = ">=3.7" [[package]] name = "mypy" -version = "0.942" +version = "0.950" description = "Optional static typing for Python" category = "dev" optional = false @@ -209,7 +207,7 @@ python-versions = ">=3.6" [package.dependencies] mypy-extensions = ">=0.4.3" -tomli = ">=1.1.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = ">=3.10" [package.extras] @@ -566,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "eddae0498064f9df11d4d364d2bd19f77fe15262b2e04692572edf655351d7b4" +content-hash = "a2d1b2db53fe389ef468d1f961725af60fd4832b4430000cc7969ef231cc8c38" [metadata.files] alabaster = [ @@ -697,29 +695,29 @@ markupsafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mypy = [ - {file = "mypy-0.942-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d"}, - {file = "mypy-0.942-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46"}, - {file = "mypy-0.942-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6776e5fa22381cc761df53e7496a805801c1a751b27b99a9ff2f0ca848c7eca0"}, - {file = "mypy-0.942-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee"}, - {file = "mypy-0.942-cp310-cp310-win_amd64.whl", hash = "sha256:64235137edc16bee6f095aba73be5334677d6f6bdb7fa03cfab90164fa294a17"}, - {file = "mypy-0.942-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b840cfe89c4ab6386c40300689cd8645fc8d2d5f20101c7f8bd23d15fca14904"}, - {file = "mypy-0.942-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b184db8c618c43c3a31b32ff00cd28195d39e9c24e7c3b401f3db7f6e5767f5"}, - {file = "mypy-0.942-cp36-cp36m-win_amd64.whl", hash = "sha256:1a0459c333f00e6a11cbf6b468b870c2b99a906cb72d6eadf3d1d95d38c9352c"}, - {file = "mypy-0.942-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c3e497588afccfa4334a9986b56f703e75793133c4be3a02d06a3df16b67a58"}, - {file = "mypy-0.942-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f6ad963172152e112b87cc7ec103ba0f2db2f1cd8997237827c052a3903eaa6"}, - {file = "mypy-0.942-cp37-cp37m-win_amd64.whl", hash = "sha256:0e2dd88410937423fba18e57147dd07cd8381291b93d5b1984626f173a26543e"}, - {file = "mypy-0.942-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:246e1aa127d5b78488a4a0594bd95f6d6fb9d63cf08a66dafbff8595d8891f67"}, - {file = "mypy-0.942-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d8d3ba77e56b84cd47a8ee45b62c84b6d80d32383928fe2548c9a124ea0a725c"}, - {file = "mypy-0.942-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2bc249409a7168d37c658e062e1ab5173300984a2dada2589638568ddc1db02b"}, - {file = "mypy-0.942-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9521c1265ccaaa1791d2c13582f06facf815f426cd8b07c3a485f486a8ffc1f3"}, - {file = "mypy-0.942-cp38-cp38-win_amd64.whl", hash = "sha256:e865fec858d75b78b4d63266c9aff770ecb6a39dfb6d6b56c47f7f8aba6baba8"}, - {file = "mypy-0.942-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ce34a118d1a898f47def970a2042b8af6bdcc01546454726c7dd2171aa6dfca"}, - {file = "mypy-0.942-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:10daab80bc40f84e3f087d896cdb53dc811a9f04eae4b3f95779c26edee89d16"}, - {file = "mypy-0.942-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3841b5433ff936bff2f4dc8d54cf2cdbfea5d8e88cedfac45c161368e5770ba6"}, - {file = "mypy-0.942-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f7106cbf9cc2f403693bf50ed7c9fa5bb3dfa9007b240db3c910929abe2a322"}, - {file = "mypy-0.942-cp39-cp39-win_amd64.whl", hash = "sha256:7742d2c4e46bb5017b51c810283a6a389296cda03df805a4f7869a6f41246534"}, - {file = "mypy-0.942-py3-none-any.whl", hash = "sha256:a1b383fe99678d7402754fe90448d4037f9512ce70c21f8aee3b8bf48ffc51db"}, - {file = "mypy-0.942.tar.gz", hash = "sha256:17e44649fec92e9f82102b48a3bf7b4a5510ad0cd22fa21a104826b5db4903e2"}, + {file = "mypy-0.950-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf9c261958a769a3bd38c3e133801ebcd284ffb734ea12d01457cb09eacf7d7b"}, + {file = "mypy-0.950-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5b5bd0ffb11b4aba2bb6d31b8643902c48f990cc92fda4e21afac658044f0c0"}, + {file = "mypy-0.950-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e7647df0f8fc947388e6251d728189cfadb3b1e558407f93254e35abc026e22"}, + {file = "mypy-0.950-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eaff8156016487c1af5ffa5304c3e3fd183edcb412f3e9c72db349faf3f6e0eb"}, + {file = "mypy-0.950-cp310-cp310-win_amd64.whl", hash = "sha256:563514c7dc504698fb66bb1cf897657a173a496406f1866afae73ab5b3cdb334"}, + {file = "mypy-0.950-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dd4d670eee9610bf61c25c940e9ade2d0ed05eb44227275cce88701fee014b1f"}, + {file = "mypy-0.950-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca75ecf2783395ca3016a5e455cb322ba26b6d33b4b413fcdedfc632e67941dc"}, + {file = "mypy-0.950-cp36-cp36m-win_amd64.whl", hash = "sha256:6003de687c13196e8a1243a5e4bcce617d79b88f83ee6625437e335d89dfebe2"}, + {file = "mypy-0.950-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c653e4846f287051599ed8f4b3c044b80e540e88feec76b11044ddc5612ffed"}, + {file = "mypy-0.950-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e19736af56947addedce4674c0971e5dceef1b5ec7d667fe86bcd2b07f8f9075"}, + {file = "mypy-0.950-cp37-cp37m-win_amd64.whl", hash = "sha256:ef7beb2a3582eb7a9f37beaf38a28acfd801988cde688760aea9e6cc4832b10b"}, + {file = "mypy-0.950-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0112752a6ff07230f9ec2f71b0d3d4e088a910fdce454fdb6553e83ed0eced7d"}, + {file = "mypy-0.950-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee0a36edd332ed2c5208565ae6e3a7afc0eabb53f5327e281f2ef03a6bc7687a"}, + {file = "mypy-0.950-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77423570c04aca807508a492037abbd72b12a1fb25a385847d191cd50b2c9605"}, + {file = "mypy-0.950-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ce6a09042b6da16d773d2110e44f169683d8cc8687e79ec6d1181a72cb028d2"}, + {file = "mypy-0.950-cp38-cp38-win_amd64.whl", hash = "sha256:5b231afd6a6e951381b9ef09a1223b1feabe13625388db48a8690f8daa9b71ff"}, + {file = "mypy-0.950-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0384d9f3af49837baa92f559d3fa673e6d2652a16550a9ee07fc08c736f5e6f8"}, + {file = "mypy-0.950-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1fdeb0a0f64f2a874a4c1f5271f06e40e1e9779bf55f9567f149466fc7a55038"}, + {file = "mypy-0.950-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:61504b9a5ae166ba5ecfed9e93357fd51aa693d3d434b582a925338a2ff57fd2"}, + {file = "mypy-0.950-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a952b8bc0ae278fc6316e6384f67bb9a396eb30aced6ad034d3a76120ebcc519"}, + {file = "mypy-0.950-cp39-cp39-win_amd64.whl", hash = "sha256:eaea21d150fb26d7b4856766e7addcf929119dd19fc832b22e71d942835201ef"}, + {file = "mypy-0.950-py3-none-any.whl", hash = "sha256:a4d9898f46446bfb6405383b57b96737dcfd0a7f25b748e78ef3e8c576bba3cb"}, + {file = "mypy-0.950.tar.gz", hash = "sha256:1b333cfbca1762ff15808a0ef4f71b5d3eed8528b23ea1c3fb50543c867d68de"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, diff --git a/pyproject.toml b/pyproject.toml index a57d8a4f..add9cd68 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2021.10.8" [tool.poetry.dev-dependencies] black = "^22.3.0" -mypy = "^0.942" +mypy = "^0.950" types-urllib3 = "^1.26.13" Sphinx = "^4.5.0" sphinx-rtd-theme = "^1.0.0" From edc4ec3e7edb075b2c0e693de6aea7d11b8555f6 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Tue, 17 May 2022 17:04:15 -0400 Subject: [PATCH 088/448] add codeowners (#188) --- .github/CODEOWNERS | 1 + upload | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) create mode 100644 .github/CODEOWNERS delete mode 100755 upload diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..d6b33d22 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @clickingbuttons diff --git a/upload b/upload deleted file mode 100755 index 81baf9cf..00000000 --- a/upload +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -python -m twine upload --username ${USERNAME} --password ${PASSWORD} dist/* From 277ad78be7261c3a624d650e794c8ed3e28eae4f Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Wed, 18 May 2022 13:01:12 -0400 Subject: [PATCH 089/448] add rest and ws specs (#189) --- .polygon/rest.json | 13039 ++++++++++++++++++++++++++++++++++++++ .polygon/websocket.json | 3284 ++++++++++ 2 files changed, 16323 insertions(+) create mode 100644 .polygon/rest.json create mode 100644 .polygon/websocket.json diff --git a/.polygon/rest.json b/.polygon/rest.json new file mode 100644 index 00000000..9737c376 --- /dev/null +++ b/.polygon/rest.json @@ -0,0 +1,13039 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Polygon API", + "description": "The future of fintech.", + "version": "1.0.0" + }, + "servers": [ + { + "url": "https://api.polygon.io", + "description": "Polygon Platform API" + }, + { + "url": "https://api.staging.polygon.io", + "description": "Polygon Platform API (Staging)" + } + ], + "x-polygon-order": { + "stocks": { + "market": [ + "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}", + "/v2/aggs/grouped/locale/us/market/stocks/{date}", + "/v1/open-close/{stocksTicker}/{date}", + "/v2/aggs/ticker/{stocksTicker}/prev", + "/v3/trades/{stockTicker}", + "/v2/ticks/stocks/trades/{ticker}/{date}", + "/v2/last/trade/{stocksTicker}", + "/v3/quotes/{stockTicker}", + "/v2/ticks/stocks/nbbo/{ticker}/{date}", + "/v2/last/nbbo/{stocksTicker}", + "/v2/snapshot/locale/us/markets/stocks/tickers", + "/v2/snapshot/locale/us/markets/stocks/{direction}", + "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}" + ], + "reference": [ + "/v3/reference/tickers", + "/v1/meta/symbols/{stocksTicker}/company", + "/v3/reference/tickers/{ticker}", + "/v2/reference/news", + "/v3/reference/tickers/types", + "/v1/marketstatus/upcoming", + "/v1/marketstatus/now", + "/v1/reference/sec/filings", + "/v1/reference/sec/filings/{filing_id}", + "/v1/reference/sec/filings/{filing_id}/files", + "/v1/reference/sec/filings/{filing_id}/files/{file_id}", + "/v3/reference/splits", + "/v3/reference/dividends", + "/vX/reference/financials", + "/v3/reference/conditions", + "/v3/reference/exchanges" + ] + }, + "options": { + "market": [ + "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}", + "/v1/open-close/{optionsTicker}/{date}", + "/v2/aggs/ticker/{optionsTicker}/prev", + "/v3/trades/{optionsTicker}", + "/v2/last/trade/{optionsTicker}", + "/v3/quotes/{optionsTicker}", + "/v3/snapshot/options/{underlyingAsset}/{optionContract}", + "/v3/snapshot/options/{underlyingAsset}" + ], + "reference": [ + "/v3/reference/options/contracts/{options_ticker}", + "/v3/reference/options/contracts", + "/v3/reference/tickers", + "/v1/meta/symbols/{stocksTicker}/company", + "/v3/reference/tickers/{ticker}", + "/v2/reference/news", + "/v3/reference/tickers/types", + "/v1/marketstatus/upcoming", + "/v1/marketstatus/now", + "/v3/reference/conditions", + "/v3/reference/exchanges" + ] + }, + "fx": { + "market": [ + "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}", + "/v2/aggs/grouped/locale/global/market/fx/{date}", + "/v2/aggs/ticker/{forexTicker}/prev", + "/v3/quotes/{fxTicker}", + "/v1/historic/forex/{from}/{to}/{date}", + "/v1/last_quote/currencies/{from}/{to}", + "/v1/conversion/{from}/{to}", + "/v2/snapshot/locale/global/markets/forex/tickers", + "/v2/snapshot/locale/global/markets/forex/{direction}", + "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" + ], + "reference": [ + "/v3/reference/tickers", + "/v1/marketstatus/upcoming", + "/v1/marketstatus/now", + "/v3/reference/conditions", + "/v3/reference/exchanges" + ] + }, + "crypto": { + "market": [ + "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}", + "/v2/aggs/grouped/locale/global/market/crypto/{date}", + "/v1/open-close/crypto/{from}/{to}/{date}", + "/v2/aggs/ticker/{cryptoTicker}/prev", + "/v3/trades/{cryptoTicker}", + "/v1/historic/crypto/{from}/{to}/{date}", + "/v1/last/crypto/{from}/{to}", + "/v2/snapshot/locale/global/markets/crypto/tickers", + "/v2/snapshot/locale/global/markets/crypto/{direction}", + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}", + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" + ], + "reference": [ + "/v3/reference/tickers", + "/v1/marketstatus/upcoming", + "/v1/marketstatus/now", + "/v3/reference/conditions", + "/v3/reference/exchanges" + ] + } + }, + "tags": [ + { + "name": "reference", + "description": "Reference API", + "x-polygon-sub-tags": [ + "tickers:list", + "tickers:types", + "tickers:get", + "options:contracts:list", + "news", + "tickers", + "stocks", + "sec:filings", + "sec:filing", + "sec:filing:files", + "sec:filing:file", + "stocks:market", + "conditions", + "stocks:meta:exchanges", + "crypto", + "exchanges" + ] + }, + { + "name": "stocks", + "description": "Stocks API", + "x-polygon-sub-tags": [ + "trades", + "quotes", + "last:trade", + "last:quote", + "open-close", + "aggregates", + "snapshot" + ] + }, + { + "name": "options", + "description": "Options API", + "x-polygon-sub-tags": [ + "trades", + "quotes", + "last:trade", + "last:quote", + "open-close", + "aggregates", + "snapshot" + ] + }, + { + "name": "fx", + "description": "Forex API", + "x-polygon-sub-tags": [ + "trades", + "quotes", + "conversion", + "last:trade", + "last:quote", + "aggregates", + "snapshot" + ] + }, + { + "name": "crypto", + "description": "Crypto API", + "x-polygon-sub-tags": [ + "trades", + "last:trade", + "open-close", + "aggregates", + "snapshot" + ] + } + ], + "paths": { + "/v3/reference/tickers": { + "get": { + "summary": "Tickers", + "description": "Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex.\n", + "tags": [ + "reference:tickers:list" + ], + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a ticker symbol.\nDefaults to empty string which queries all tickers.\n", + "required": false, + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "name": "type", + "in": "query", + "description": "Specify the type of the tickers. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).\nDefaults to empty string which queries all types.\n", + "required": false, + "schema": { + "type": "string", + "enum": [ + "CS", + "ADRC", + "ADRP", + "ADRR", + "UNIT", + "RIGHT", + "PFD", + "FUND", + "SP", + "WARRANT", + "INDEX", + "ETF", + "ETN" + ] + } + }, + { + "name": "market", + "in": "query", + "description": "Filter by market type. By default all markets are included.\n", + "required": false, + "schema": { + "type": "string", + "enum": [ + "stocks", + "crypto", + "fx" + ] + } + }, + { + "name": "exchange", + "in": "query", + "description": "Specify the primary exchange of the asset in the ISO code format. Find more information about the ISO codes [at the ISO org website](https://www.iso20022.org/market-identifier-codes).\nDefaults to empty string which queries all exchanges.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cusip", + "in": "query", + "description": "Specify the CUSIP code of the asset you want to search for. Find more information about CUSIP codes [at their website](https://www.cusip.com/identifiers.html#/CUSIP).\nDefaults to empty string which queries all CUSIPs.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "cik", + "in": "query", + "description": "Specify the CIK of the asset you want to search for. Find more information about CIK codes [at their website](https://www.sec.gov/edgar/searchedgar/cik.htm).\nDefaults to empty string which queries all CIKs.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "date", + "in": "query", + "description": "Specify a point in time to retrieve tickers available on that date.\nDefaults to the most recent available date.\n", + "required": false, + "schema": { + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "format": "date" + } + ] + } + }, + { + "name": "search", + "in": "query", + "description": "Search for terms within the ticker and/or company name.\n", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "active", + "in": "query", + "description": "Specify if the tickers returned should be actively traded on the queried date. Default is true.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "sort", + "in": "query", + "description": "The field to sort the results on. Default is ticker.\nIf the `search` query parameter is present, `sort` is ignored and results are ordered by relevance.\n", + "required": false, + "schema": { + "type": "string", + "enum": [ + "ticker", + "name", + "market", + "locale", + "primary_exchange", + "type", + "currency_symbol", + "currency_name", + "base_currency_symbol", + "base_currency_name", + "cik", + "composite_figi", + "share_class_figi", + "last_updated_utc", + "delisted_utc" + ] + }, + "example": "ticker" + }, + { + "name": "order", + "in": "query", + "description": "The order to sort the results on. Default is asc (ascending).\n", + "required": false, + "schema": { + "type": "string", + "enum": [ + "asc", + "desc" + ] + }, + "example": "asc" + }, + { + "example": 10, + "required": false, + "name": "limit", + "in": "query", + "description": "Limit the size of the response, default is 100 and max is 1000.\n\nIf your query returns more than the max limit and you want to retrieve the next page of results,\nsee the `next_url` response attribute.\n", + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "default": 100 + } + } + ], + "responses": { + "200": { + "description": "Reference Tickers.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "results": { + "type": "array", + "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response. \n", + "items": { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "name": { + "type": "string", + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" + }, + "market": { + "type": "string", + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx" + ] + }, + "locale": { + "type": "string", + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ] + }, + "primary_exchange": { + "type": "string", + "description": "The ISO code of the primary listing exchange for this asset." + }, + "type": { + "type": "string", + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." + }, + "active": { + "type": "boolean", + "description": "Whether or not the asset is actively traded. False means the asset has been delisted." + }, + "currency_name": { + "type": "string", + "description": "The name of the currency that this asset is traded with." + }, + "cik": { + "type": "string", + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." + }, + "composite_figi": { + "type": "string", + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "share_class_figi": { + "type": "string", + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "last_updated_utc": { + "type": "string", + "format": "date-time", + "description": "The information is accurate up to this time." + }, + "delisted_utc": { + "type": "string", + "format": "date-time", + "description": "The last date that the asset was traded." + } + }, + "required": [ + "ticker", + "name", + "market", + "locale" + ] + } + } + } + }, + { + "type": "object", + "properties": { + "next_url": { + "type": "string", + "description": "If present, this value can be used to fetch the next page of data." + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "count": { + "type": "integer", + "description": "The total number of results for this request." + } + } + } + ] + }, + "example": { + "results": [ + { + "ticker": "A", + "name": "Agilent Technologies Inc.", + "market": "stocks", + "locale": "us", + "primary_exchange": "XNYS", + "type": "CS", + "active": true, + "currency_name": "usd", + "cik": "0001090872", + "composite_figi": "BBG000BWQYZ5", + "share_class_figi": "BBG001SCTQY4", + "last_updated_utc": "2021-04-25T00:00:00Z" + } + ], + "status": "OK", + "request_id": "e70013d92930de90e089dc8fa098888e", + "count": 1, + "next_url": "https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy" + } + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "x-polygon-entitlement-data-type": { + "name": "reference", + "description": "Reference data" + } + } + }, + "/v3/reference/tickers/{ticker}": { + "get": { + "summary": "Ticker Details v3", + "description": "Get a single ticker supported by Polygon.io. This response will have detailed information about the ticker and the company behind it.\n", + "tags": [ + "reference:tickers:get" + ], + "parameters": [ + { + "name": "ticker", + "in": "path", + "description": "The ticker symbol of the asset.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + { + "name": "date", + "in": "query", + "description": "Specify a point in time to get information about the ticker available on that date.\nWhen retrieving information from SEC filings, we compare this date with the period of report date on the SEC filing.\n\nFor example, consider an SEC filing submitted by AAPL on 2019-07-31, with a period of report date ending on 2019-06-29.\nThat means that the filing was submitted on 2019-07-31, but the filing was created based on information from 2019-06-29.\nIf you were to query for AAPL details on 2019-06-29, the ticker details would include information from the SEC filing.\n\nDefaults to the most recent available date.\n", + "required": false, + "schema": { + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "format": "date" + } + ] + } + } + ], + "responses": { + "200": { + "description": "Reference Tickers.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "results": { + "type": "object", + "description": "Ticker with details.\n", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "name": { + "type": "string", + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" + }, + "market": { + "type": "string", + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx" + ] + }, + "locale": { + "type": "string", + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ] + }, + "primary_exchange": { + "type": "string", + "description": "The ISO code of the primary listing exchange for this asset." + }, + "type": { + "type": "string", + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." + }, + "active": { + "type": "boolean", + "description": "Whether or not the asset is actively traded. False means the asset has been delisted." + }, + "currency_name": { + "type": "string", + "description": "The name of the currency that this asset is traded with." + }, + "cik": { + "type": "string", + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." + }, + "composite_figi": { + "type": "string", + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "share_class_figi": { + "type": "string", + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "delisted_utc": { + "type": "string", + "format": "date-time", + "description": "The last date that the asset was traded." + }, + "share_class_shares_outstanding": { + "type": "number", + "format": "double", + "description": "The recorded number of outstanding shares for this particular share class." + }, + "weighted_shares_outstanding": { + "type": "number", + "format": "double", + "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n" + }, + "market_cap": { + "type": "number", + "format": "double", + "description": "The most recent close price of the ticker multiplied by weighted outstanding shares." + }, + "phone_number": { + "type": "string", + "description": "The phone number for the company behind this ticker." + }, + "address": { + "type": "object", + "properties": { + "address1": { + "type": "string", + "description": "The first line of the company's headquarters address." + }, + "city": { + "type": "string", + "description": "The city of the company's headquarters address." + }, + "state": { + "type": "string", + "description": "The state of the company's headquarters address." + }, + "postal_code": { + "type": "string", + "description": "The postal code of the company's headquarters address." + } + } + }, + "sic_code": { + "type": "string", + "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n" + }, + "sic_description": { + "type": "string", + "description": "A description of this ticker's SIC code." + }, + "ticker_root": { + "type": "string", + "description": "The root of a specified ticker. For example, the root of BRK.A is BRK." + }, + "ticker_suffix": { + "type": "string", + "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A." + }, + "total_employees": { + "type": "number", + "description": "The approximate number of employees for the company." + }, + "list_date": { + "type": "string", + "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD." + }, + "homepage_url": { + "type": "string", + "description": "The URL of the company's website homepage." + }, + "description": { + "type": "string", + "description": "A description of the company and what they do/offer." + }, + "branding": { + "type": "object", + "properties": { + "logo_url": { + "type": "string", + "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" + }, + "icon_url": { + "type": "string", + "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" + } + } + } + }, + "required": [ + "ticker", + "name", + "market", + "locale", + "active", + "currency_name" + ] + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "count": { + "type": "integer", + "description": "The total number of results for this request." + } + } + } + ] + }, + "example": { + "results": { + "ticker": "AAPL", + "name": "Apple Inc.", + "market": "stocks", + "locale": "us", + "primary_exchange": "XNAS", + "type": "CS", + "active": true, + "currency_name": "usd", + "cik": "0000320193", + "composite_figi": "BBG000B9XRY4", + "share_class_figi": "BBG001S5N8V8", + "share_class_shares_outstanding": 16406400000, + "weighted_shares_outstanding": 16334371000, + "market_cap": 2771126040150, + "phone_number": "(408) 996-1010", + "address": { + "address1": "One Apple Park Way", + "city": "Cupertino", + "state": "CA", + "postal_code": "95014" + }, + "sic_code": "3571", + "sic_description": "ELECTRONIC COMPUTERS", + "ticker_root": "AAPL", + "total_employees": 154000, + "list_date": "1980-12-12", + "homepage_url": "https://www.apple.com", + "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", + "branding": { + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg", + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png" + } + }, + "status": "OK", + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe" + } + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "x-polygon-entitlement-data-type": { + "name": "reference", + "description": "Reference data" + } + } + }, + "/v2/reference/news": { + "get": { + "summary": "Ticker News", + "description": "Get the most recent news articles relating to a stock ticker symbol,\nincluding a summary of the article and a link to the original source.\n", + "tags": [ + "reference:tickers" + ], + "parameters": [ + { + "example": 10, + "name": "limit", + "in": "query", + "description": "Limit the size of the response, default is 100 and max is 1000.\n\nIf your query returns more than the max limit and you want to retrieve the next page of results,\nsee the `next_url` response attribute.\n", + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 1000, + "default": 100 + } + }, + { + "example": "descending", + "name": "order", + "in": "query", + "description": "Order the results in ascending or descending order.\n", + "required": false, + "schema": { + "type": "string", + "enum": [ + "asc", + "ascending", + "desc", + "descending" + ], + "default": "ascending" + } + }, + { + "schema": { + "enum": [ + "published_utc" + ], + "default": "published_utc" + }, + "example": "published_utc", + "name": "sort", + "in": "query", + "description": "The field key to sort the results on.\n" + }, + { + "name": "ticker", + "schema": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "x-polygon-filter-field": { + "range": true + }, + "in": "query", + "description": "Return results where this field equals the value.\n" + }, + { + "name": "published_utc", + "schema": { + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "format": "date" + } + ] + }, + "x-polygon-filter-field": { + "range": true + }, + "in": "query", + "description": "Return results where this field equals the value.\n" + } + ], + "responses": { + "200": { + "description": "An array of news articles.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "required": [ + "id", + "publisher", + "title", + "author", + "published_utc", + "article_url", + "tickers" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the article.\n" + }, + "publisher": { + "type": "object", + "required": [ + "name", + "logo_url", + "homepage_url" + ], + "properties": { + "name": { + "type": "string", + "description": "The publisher's name.\n" + }, + "logo_url": { + "type": "string", + "format": "url", + "description": "The publisher's logo URL.\n" + }, + "homepage_url": { + "type": "string", + "format": "url", + "description": "The publisher's homepage URL.\n" + }, + "favicon_url": { + "type": "string", + "format": "url", + "description": "The publisher's homepage favicon URL.\n" + } + } + }, + "title": { + "type": "string", + "description": "The title of the news article.\n" + }, + "author": { + "type": "string", + "description": "The article's author.\n" + }, + "published_utc": { + "type": "string", + "format": "date-time", + "description": "The date the article was published on.\n" + }, + "article_url": { + "type": "string", + "format": "url", + "description": "A link to the news article.\n" + }, + "tickers": { + "type": "array", + "description": "The ticker symbols associated with the article.\n", + "items": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + }, + "amp_url": { + "type": "string", + "format": "url", + "description": "The mobile friendly Accelerated Mobile Page (AMP) URL.\n" + }, + "image_url": { + "type": "string", + "format": "url", + "description": "The article's image URL.\n" + }, + "description": { + "type": "string", + "description": "A description of the article.\n" + }, + "keywords": { + "type": "array", + "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).\n", + "items": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "object", + "properties": { + "next_url": { + "type": "string", + "description": "If present, this value can be used to fetch the next page of data." + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "count": { + "type": "integer", + "description": "The total number of results for this request." + } + } + } + ] + }, + "example": { + "results": [ + { + "id": "nJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA", + "publisher": { + "name": "Benzinga", + "homepage_url": "https://www.benzinga.com/", + "logo_url": "https://s3.polygon.io/public/public/assets/news/logos/benzinga.svg", + "favicon_url": "https://s3.polygon.io/public/public/assets/news/favicons/benzinga.ico" + }, + "title": "Cathie Wood Adds More Coinbase, Skillz, Trims Square", + "author": "Rachit Vats", + "published_utc": "2021-04-26T02:33:17Z", + "article_url": "https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square", + "tickers": [ + "DOCU", + "DDD", + "NIU", + "ARKF", + "NVDA", + "SKLZ", + "PCAR", + "MASS", + "PSTI", + "SPFR", + "TREE", + "PHR", + "IRDM", + "BEAM", + "ARKW", + "ARKK", + "ARKG", + "PSTG", + "SQ", + "IONS", + "SYRS" + ], + "amp_url": "https://amp.benzinga.com/amp/content/20784086", + "image_url": "https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720", + "description": "

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ: COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

\n

The investment firm’s Ark Innovation ETF (NYSE: ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

\n

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE: SKLZ), just a day after snapping 1.2 million shares of the stock.

\n

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

", + "keywords": [ + "Sector ETFs", + "Penny Stocks", + "Cryptocurrency", + "Small Cap", + "Markets", + "Trading Ideas", + "ETFs" + ] + } + ], + "status": "OK", + "request_id": "831afdb0b8078549fed053476984947a", + "count": 1, + "next_url": "https://api.polygon.io:443/v2/reference/news?cursor=eyJsaW1pdCI6MSwic29ydCI6InB1Ymxpc2hlZF91dGMiLCJvcmRlciI6ImFzY2VuZGluZyIsInRpY2tlciI6e30sInB1Ymxpc2hlZF91dGMiOnsiZ3RlIjoiMjAyMS0wNC0yNiJ9LCJzZWFyY2hfYWZ0ZXIiOlsxNjE5NDA0Mzk3MDAwLG51bGxdfQ" + } + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + } + }, + "x-polygon-entitlement-data-type": { + "name": "reference", + "description": "Reference data" + } + } + }, + "/v1/marketstatus/upcoming": { + "get": { + "summary": "Market Holidays", + "description": "Get upcoming market holidays and their open/close times.\n", + "tags": [ + "reference:stocks:market" + ], + "responses": { + "200": { + "description": "Holidays for each market in the near future.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "exchange": { + "type": "string", + "description": "Which market the record is for." + }, + "name": { + "type": "string", + "description": "The name of the holiday." + }, + "status": { + "type": "string", + "description": "The status of the market on the holiday." + }, + "date": { + "type": "string", + "format": "date", + "description": "The date of the holiday." + }, + "open": { + "type": "string", + "format": "date-time", + "description": "The market open time on the holiday (if it's not closed)." + }, + "close": { + "type": "string", + "format": "date-time", + "description": "The market close time on the holiday (if it's not closed)." + } + } + } + }, + "example": [ + { + "exchange": "NYSE", + "name": "Thanksgiving", + "date": "2020-11-26T00:00:00.000Z", + "status": "closed" + }, + { + "exchange": "NASDAQ", + "name": "Thanksgiving", + "date": "2020-11-26T00:00:00.000Z", + "status": "closed" + }, + { + "exchange": "OTC", + "name": "Thanksgiving", + "date": "2020-11-26T00:00:00.000Z", + "status": "closed" + }, + { + "exchange": "NASDAQ", + "name": "Thanksgiving", + "date": "2020-11-27T00:00:00.000Z", + "status": "early-close", + "open": "2020-11-27T14:30:00.000Z", + "close": "2020-11-27T18:00:00.000Z" + }, + { + "exchange": "NYSE", + "name": "Thanksgiving", + "date": "2020-11-27T00:00:00.000Z", + "status": "early-close", + "open": "2020-11-27T14:30:00.000Z", + "close": "2020-11-27T18:00:00.000Z" + } + ] + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + }, + "409": { + "description": "Parameter is invalid or incorrect." + } + }, + "x-polygon-entitlement-data-type": { + "name": "reference", + "description": "Reference data" + } + } + }, + "/v1/marketstatus/now": { + "get": { + "summary": "Market Status", + "description": "Get the current trading status of the exchanges and overall financial markets.\n", + "tags": [ + "reference:stocks:market" + ], + "responses": { + "200": { + "description": "Status of the market and each exchange", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "market": { + "type": "string", + "description": "The status of the market as a whole." + }, + "earlyHours": { + "type": "boolean", + "description": "Whether or not the market is in pre-market hours." + }, + "afterHours": { + "type": "boolean", + "description": "Whether or not the market is in post-market hours." + }, + "serverTime": { + "type": "string", + "format": "date-time", + "description": "The current time of the server." + }, + "exchanges": { + "type": "object", + "properties": { + "nyse": { + "type": "string", + "description": "The status of the NYSE market." + }, + "nasdaq": { + "type": "string", + "description": "The status of the Nasdaq market." + }, + "otc": { + "type": "string", + "description": "The status of the OTC market." + } + } + }, + "currencies": { + "type": "object", + "properties": { + "fx": { + "type": "string", + "description": "The status of the forex market." + }, + "crypto": { + "type": "string", + "description": "The status of the crypto market." + } + } + } + } + }, + "example": { + "market": "extended-hours", + "earlyHours": false, + "afterHours": true, + "serverTime": "2020-11-10T22:37:37.000Z", + "exchanges": { + "nyse": "extended-hours", + "nasdaq": "extended-hours", + "otc": "closed" + }, + "currencies": { + "fx": "open", + "crypto": "open" + } + } + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + }, + "409": { + "description": "Parameter is invalid or incorrect." + } + }, + "x-polygon-entitlement-data-type": { + "name": "reference", + "description": "Reference data" + } + } + }, + "/v2/ticks/stocks/trades/{ticker}/{date}": { + "get": { + "summary": "Trades", + "description": "Get trades for a given ticker symbol on a specified date.\n", + "tags": [ + "stocks:trades" + ], + "parameters": [ + { + "name": "ticker", + "in": "path", + "description": "The ticker symbol we want trades for.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + { + "name": "date", + "in": "path", + "description": "The date/day of the trades to retrieve in the format YYYY-MM-DD.", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "example": "2020-10-14" + }, + { + "name": "timestamp", + "in": "query", + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "timestampLimit", + "in": "query", + "description": "The maximum timestamp allowed in the results.\n", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "reverse", + "in": "query", + "description": "Reverse the order of the results.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "limit", + "in": "query", + "description": "Limit the size of the response, max 50000 and default 5000.", + "required": false, + "schema": { + "type": "integer" + }, + "example": 10 + } + ], + "responses": { + "200": { + "description": "A list of trades.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "results_count": { + "type": "integer", + "description": "The total number of results for this request." + }, + "db_latency": { + "type": "integer", + "description": "Latency in milliseconds for the query results from the database." + }, + "success": { + "type": "boolean", + "description": "Whether or not this query was executed successfully." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "e": { + "type": "integer", + "description": "The trade correction indicator.\n" + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "r": { + "type": "integer", + "description": "The ID for the Trade Reporting Facility where the trade took place.\n" + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + } + } + } + } + ] + }, + "example": { + "ticker": "AAPL", + "results_count": 2, + "db_latency": 11, + "success": true, + "results": [ + { + "t": 1517562000016036600, + "y": 1517562000015577000, + "q": 1063, + "i": "1", + "x": 11, + "s": 100, + "c": [ + 12, + 41 + ], + "p": 171.55, + "z": 3 + }, + { + "t": 1517562000016038100, + "y": 1517562000015577600, + "q": 1064, + "i": "2", + "x": 11, + "s": 100, + "c": [ + 12, + 41 + ], + "p": 171.55, + "z": 3 + } + ], + "map": { + "I": { + "name": "orig_id", + "type": "string" + }, + "x": { + "name": "exchange", + "type": "int" + }, + "p": { + "name": "price", + "type": "float64" + }, + "i": { + "name": "id", + "type": "string" + }, + "e": { + "name": "correction", + "type": "int" + }, + "r": { + "name": "trf_id", + "type": "int" + }, + "t": { + "name": "sip_timestamp", + "type": "int64" + }, + "y": { + "name": "participant_timestamp", + "type": "int64" + }, + "f": { + "name": "trf_timestamp", + "type": "int64" + }, + "q": { + "name": "sequence_number", + "type": "int64" + }, + "c": { + "name": "conditions", + "type": "int" + }, + "s": { + "name": "size", + "type": "int" + }, + "z": { + "name": "tape", + "type": "int" + } + } + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "path": "get_v3_trades__stockticker", + "name": "Trades v3" + } + } + } + }, + "/v2/ticks/stocks/nbbo/{ticker}/{date}": { + "get": { + "summary": "Quotes (NBBO)", + "description": "Get NBBO quotes for a given ticker symbol on a specified date.\n", + "tags": [ + "stocks:quotes" + ], + "parameters": [ + { + "name": "ticker", + "in": "path", + "description": "The ticker symbol we want quotes for.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + { + "name": "date", + "in": "path", + "description": "The date/day of the quotes to retrieve in the format YYYY-MM-DD.", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "example": "2020-10-14" + }, + { + "name": "timestamp", + "in": "query", + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "timestampLimit", + "in": "query", + "description": "The maximum timestamp allowed in the results.\n", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "reverse", + "in": "query", + "description": "Reverse the order of the results.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "limit", + "in": "query", + "description": "Limit the size of the response, max 50000 and default 5000.", + "required": false, + "schema": { + "type": "integer" + }, + "example": 10 + } + ], + "responses": { + "200": { + "description": "A list of quotes.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "results_count": { + "type": "integer", + "description": "The total number of results for this request." + }, + "db_latency": { + "type": "integer", + "description": "Latency in milliseconds for the query results from the database." + }, + "success": { + "type": "boolean", + "description": "Whether or not this query was executed successfully." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "array", + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "type": "integer", + "description": "The indicator code.\n" + } + }, + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." + }, + "x": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + }, + "X": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + } + } + } + } + ] + }, + "example": { + "ticker": "AAPL", + "success": true, + "results_count": 2, + "db_latency": 43, + "results": [ + { + "t": 1517562000065700400, + "y": 1517562000065321200, + "q": 2060, + "c": [ + 1 + ], + "z": 3, + "p": 102.7, + "s": 60, + "x": 11, + "P": 0, + "S": 0, + "X": 0 + }, + { + "t": 1517562000065791500, + "y": 1517562000065408300, + "q": 2061, + "c": [ + 1 + ], + "z": 3, + "p": 170, + "s": 2, + "x": 11, + "P": 0, + "S": 0, + "X": 0 + } + ], + "map": { + "t": { + "name": "sip_timestamp", + "type": "int64" + }, + "y": { + "name": "participant_timestamp", + "type": "int64" + }, + "i": { + "name": "indicators", + "type": "int" + }, + "P": { + "name": "ask_price", + "type": "float64" + }, + "X": { + "name": "ask_exchange", + "type": "int" + }, + "f": { + "name": "trf_timestamp", + "type": "int64" + }, + "q": { + "name": "sequence_number", + "type": "int" + }, + "c": { + "name": "conditions", + "type": "int" + }, + "p": { + "name": "bid_price", + "type": "float64" + }, + "s": { + "name": "bid_size", + "type": "int" + }, + "x": { + "name": "bid_exchange", + "type": "int" + }, + "S": { + "name": "ask_size", + "type": "int" + }, + "z": { + "name": "tape", + "type": "int" + } + } + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "path": "get_v3_quotes__stockticker", + "name": "Quotes (NBBO) v3" + } + } + } + }, + "/v2/last/trade/{stocksTicker}": { + "get": { + "summary": "Last Trade", + "description": "Get the most recent trade for a given stock.\n", + "tags": [ + "stocks:last:trade" + ], + "parameters": [ + { + "name": "stocksTicker", + "in": "path", + "description": "The ticker symbol of the stock/equity.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + } + ], + "responses": { + "200": { + "description": "The last trade for this stock.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "e": { + "type": "integer", + "description": "The trade correction indicator.\n" + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "r": { + "type": "integer", + "description": "The ID for the Trade Reporting Facility where the trade took place.\n" + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + } + } + } + ] + }, + "example": { + "request_id": "f05562305bd26ced64b98ed68b3c5d96", + "status": "OK", + "results": { + "T": "AAPL", + "c": [ + 37 + ], + "f": 1617901342969796400, + "i": "118749", + "p": 129.8473, + "q": 3135876, + "r": 202, + "s": 25, + "t": 1617901342969834000, + "x": 4, + "y": 1617901342968000000, + "z": 3 + } + } + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/last/nbbo/{stocksTicker}": { + "get": { + "summary": "Last Quote", + "description": "Get the most recent NBBO (Quote) tick for a given stock.\n", + "tags": [ + "stocks:last:quote" + ], + "parameters": [ + { + "name": "stocksTicker", + "in": "path", + "description": "The ticker symbol of the stock/equity.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + } + ], + "responses": { + "200": { + "description": "The last NBBO tick for this stock.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "array", + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "type": "integer", + "description": "The indicator code.\n" + } + }, + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." + }, + "x": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + }, + "X": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + } + } + } + ] + }, + "example": { + "request_id": "b84e24636301f19f88e0dfbf9a45ed5c", + "status": "OK", + "results": { + "P": 127.98, + "S": 7, + "T": "AAPL", + "X": 19, + "p": 127.96, + "q": 83480742, + "s": 1, + "t": 1617827221349730300, + "x": 11, + "y": 1617827221349366000, + "z": 3 + } + } + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v1/open-close/{stocksTicker}/{date}": { + "get": { + "summary": "Daily Open/Close", + "description": "Get the open, close and afterhours prices of a stock symbol on a certain date.\n", + "tags": [ + "stocks:open-close" + ], + "parameters": [ + { + "name": "stocksTicker", + "in": "path", + "description": "The ticker symbol of the stock/equity.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + { + "name": "date", + "in": "path", + "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "example": "2020-10-14" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The open/close of this stock symbol.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "from": { + "type": "string", + "format": "date", + "description": "The requested date." + }, + "symbol": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "open": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "high": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "low": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "close": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "volume": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "preMarket": { + "type": "integer", + "description": "The open price of the ticker symbol in pre-market trading." + }, + "afterHours": { + "type": "number", + "format": "double", + "description": "The close price of the ticker symbol in after hours trading." + } + } + }, + "example": { + "status": "OK", + "from": "2020-10-14T00:00:00.000Z", + "symbol": "AAPL", + "open": 324.66, + "high": 326.2, + "low": 322.3, + "close": 325.12, + "volume": 26122646, + "afterHours": 322.1, + "preMarket": 324.5 + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + } + } + }, + "/v2/aggs/grouped/locale/us/market/stocks/{date}": { + "get": { + "summary": "Grouped Daily (Bars)", + "description": "Get the daily open, high, low, and close (OHLC) for the entire stocks/equities markets.\n", + "tags": [ + "stocks:aggregates" + ], + "parameters": [ + { + "name": "date", + "in": "path", + "description": "The beginning date for the aggregate window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2020-10-14" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "Previous day OHLC for ticker", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "queryCount": 3, + "resultsCount": 3, + "adjusted": true, + "results": [ + { + "T": "KIMpL", + "v": 4369, + "vw": 26.0407, + "o": 26.07, + "c": 25.9102, + "h": 26.25, + "l": 25.91, + "t": 1602705600000, + "n": 74 + }, + { + "T": "TANH", + "v": 25933.6, + "vw": 23.493, + "o": 24.5, + "c": 23.4, + "h": 24.763, + "l": 22.65, + "t": 1602705600000, + "n": 1096 + }, + { + "T": "VSAT", + "v": 312583, + "vw": 34.4736, + "o": 34.9, + "c": 34.24, + "h": 35.47, + "l": 34.21, + "t": 1602705600000, + "n": 4966 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + } + } + }, + "/v2/aggs/ticker/{stocksTicker}/prev": { + "get": { + "summary": "Previous Close", + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified stock ticker.\n", + "tags": [ + "stocks:aggregates" + ], + "parameters": [ + { + "name": "stocksTicker", + "in": "path", + "description": "The ticker symbol of the stock/equity.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The previous day OHLC for the ticker.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "AAPL", + "status": "OK", + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "T": "AAPL", + "v": 131704427, + "vw": 116.3058, + "o": 115.55, + "c": 115.97, + "h": 117.59, + "l": 114.13, + "t": 1605042000000 + } + ], + "request_id": "6a7e466379af0a71039d60cc78e72282" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + } + } + }, + "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "get": { + "summary": "Aggregates (Bars)", + "description": "Get aggregate bars for a stock over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "tags": [ + "stocks:aggregates" + ], + "parameters": [ + { + "name": "stocksTicker", + "in": "path", + "description": "The ticker symbol of the stock/equity.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + { + "name": "multiplier", + "in": "path", + "description": "The size of the timespan multiplier.", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + }, + { + "name": "timespan", + "in": "path", + "description": "The size of the time window.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ] + }, + "example": "day" + }, + { + "name": "from", + "in": "path", + "description": "The start of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "to", + "in": "path", + "description": "The end of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" + ] + }, + "in": "query", + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc" + }, + { + "name": "limit", + "in": "query", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "required": false, + "schema": { + "type": "integer" + }, + "example": 120 + } + ], + "responses": { + "200": { + "description": "Stock Aggregates.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "AAPL", + "status": "OK", + "queryCount": 2, + "resultsCount": 2, + "adjusted": true, + "results": [ + { + "v": 135647456, + "vw": 74.6099, + "o": 74.06, + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "t": 1577941200000, + "n": 1 + }, + { + "v": 146535512, + "vw": 74.7026, + "o": 74.2875, + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "t": 1578027600000, + "n": 1 + } + ], + "request_id": "6a7e466379af0a71039d60cc78e72282" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + } + } + }, + "/v2/snapshot/locale/us/markets/stocks/tickers": { + "get": { + "summary": "Snapshot - All Tickers", + "description": "Get the most up-to-date market data for all traded stock symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "tags": [ + "stocks:snapshot" + ], + "parameters": [ + { + "name": "tickers", + "in": "query", + "description": "A comma separated list of tickers to get snapshots for.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Get current state for all tickers", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "count": { + "type": "integer", + "description": "The total number of results for this request." + } + } + }, + { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size in lots." + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size in lots." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "av": { + "type": "integer", + "description": "The accumulated volume." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "count": 1, + "tickers": [ + { + "day": { + "c": 20.506, + "h": 20.64, + "l": 20.506, + "o": 20.64, + "v": 37216, + "vw": 20.616 + }, + "lastQuote": { + "P": 20.6, + "S": 22, + "p": 20.5, + "s": 13, + "t": 1605192959994246100 + }, + "lastTrade": { + "c": [ + 14, + 41 + ], + "i": "71675577320245", + "p": 20.506, + "s": 2416, + "t": 1605192894630916600, + "x": 4 + }, + "min": { + "av": 37216, + "c": 20.506, + "h": 20.506, + "l": 20.506, + "o": 20.506, + "v": 5000, + "vw": 20.5105 + }, + "prevDay": { + "c": 20.63, + "h": 21, + "l": 20.5, + "o": 20.79, + "v": 292738, + "vw": 20.6939 + }, + "ticker": "BCAT", + "todaysChange": -0.124, + "todaysChangePerc": -0.601, + "updated": 1605192894630916600 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}": { + "get": { + "summary": "Snapshot - Ticker", + "description": "Get the most up-to-date market data for a single traded stock ticker.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "tags": [ + "stocks:snapshot" + ], + "parameters": [ + { + "name": "stocksTicker", + "in": "path", + "description": "The ticker symbol of the stock/equity.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + } + ], + "responses": { + "200": { + "description": "Get current state for a ticker", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "ticker": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size in lots." + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size in lots." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "av": { + "type": "integer", + "description": "The accumulated volume." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "request_id": "657e430f1ae768891f018e08e03598d8", + "ticker": { + "day": { + "c": 120.4229, + "h": 120.53, + "l": 118.81, + "o": 119.62, + "v": 28727868, + "vw": 119.725 + }, + "lastQuote": { + "P": 120.47, + "S": 4, + "p": 120.46, + "s": 8, + "t": 1605195918507251700 + }, + "lastTrade": { + "c": [ + 14, + 41 + ], + "i": "4046", + "p": 120.47, + "s": 236, + "t": 1605195918306274000, + "x": 10 + }, + "min": { + "av": 28724441, + "c": 120.4201, + "h": 120.468, + "l": 120.37, + "o": 120.435, + "v": 270796, + "vw": 120.4129 + }, + "prevDay": { + "c": 119.49, + "h": 119.63, + "l": 116.44, + "o": 117.19, + "v": 110597265, + "vw": 118.4998 + }, + "ticker": "AAPL", + "todaysChange": 0.98, + "todaysChangePerc": 0.82, + "updated": 1605195918306274000 + } + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/snapshot/locale/us/markets/stocks/{direction}": { + "get": { + "summary": "Snapshot - Gainers/Losers", + "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "tags": [ + "stocks:snapshot" + ], + "parameters": [ + { + "name": "direction", + "in": "path", + "description": "The direction of the snapshot results to return.\n", + "required": true, + "schema": { + "type": "string", + "enum": [ + "gainers", + "losers" + ] + }, + "example": "gainers" + } + ], + "responses": { + "200": { + "description": "Get the current tickers of the day", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size in lots." + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size in lots." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "av": { + "type": "integer", + "description": "The accumulated volume." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 14.2284, + "h": 15.09, + "l": 14.2, + "o": 14.33, + "v": 133963, + "vw": 14.5311 + }, + "lastQuote": { + "P": 14.44, + "S": 11, + "p": 14.2, + "s": 25, + "t": 1605195929997325600 + }, + "lastTrade": { + "c": [ + 63 + ], + "i": "79372124707124", + "p": 14.2284, + "s": 536, + "t": 1605195848258266000, + "x": 4 + }, + "min": { + "av": 133963, + "c": 14.2284, + "h": 14.325, + "l": 14.2, + "o": 14.28, + "v": 6108, + "vw": 14.2426 + }, + "prevDay": { + "c": 0.73, + "h": 0.799, + "l": 0.73, + "o": 0.75, + "v": 1568097, + "vw": 0.7721 + }, + "ticker": "PDS", + "todaysChange": 13.498, + "todaysChangePerc": 1849.096, + "updated": 1605195848258266000 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/last/trade/{optionsTicker}": { + "get": { + "summary": "Last Trade", + "description": "Get the most recent trade for a given options contract.\n", + "tags": [ + "options:last:trade" + ], + "parameters": [ + { + "name": "optionsTicker", + "in": "path", + "description": "The ticker symbol of the options contract.", + "required": true, + "schema": { + "type": "string" + }, + "example": "O:TSLA210903C00700000" + } + ], + "responses": { + "200": { + "description": "The last trade for this options contract.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "e": { + "type": "integer", + "description": "The trade correction indicator.\n" + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "r": { + "type": "integer", + "description": "The ID for the Trade Reporting Facility where the trade took place.\n" + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + } + } + } + ] + }, + "example": { + "request_id": "f05562305bd26ced64b98ed68b3c5d96", + "status": "OK", + "results": { + "T": "O:TSLA210903C00700000", + "c": [ + 227 + ], + "f": 1617901342969796400, + "i": "", + "p": 115.55, + "q": 1325541950, + "r": 202, + "s": 25, + "t": 1617901342969834000, + "x": 312 + } + } + } + } + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v1/open-close/{optionsTicker}/{date}": { + "get": { + "summary": "Daily Open/Close", + "description": "Get the open, close and afterhours prices of an options contract on a certain date.\n", + "tags": [ + "options:open-close" + ], + "parameters": [ + { + "name": "optionsTicker", + "in": "path", + "description": "The ticker symbol of the options contract.", + "required": true, + "schema": { + "type": "string" + }, + "example": "O:TSLA210903C00700000" + }, + { + "name": "date", + "in": "path", + "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "example": "2021-07-22" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The open/close of this stock symbol.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "from": { + "type": "string", + "format": "date", + "description": "The requested date." + }, + "symbol": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "open": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "high": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "low": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "close": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "volume": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "preMarket": { + "type": "integer", + "description": "The open price of the ticker symbol in pre-market trading." + }, + "afterHours": { + "type": "number", + "format": "double", + "description": "The close price of the ticker symbol in after hours trading." + } + } + }, + "example": { + "status": "OK", + "from": "2021-07-22", + "symbol": "O:TSLA210903C00700000", + "open": 25, + "high": 26.35, + "low": 25, + "close": 26.35, + "volume": 2, + "afterHours": 26.35, + "preMarket": 25 + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + } + } + }, + "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "get": { + "summary": "Aggregates (Bars)", + "description": "Get aggregate bars for an option contract over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "tags": [ + "options:aggregates" + ], + "parameters": [ + { + "name": "optionsTicker", + "in": "path", + "description": "The ticker symbol of the options contract.", + "required": true, + "schema": { + "type": "string" + }, + "example": "O:TSLA210903C00700000" + }, + { + "name": "multiplier", + "in": "path", + "description": "The size of the timespan multiplier.", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + }, + { + "name": "timespan", + "in": "path", + "description": "The size of the time window.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ] + }, + "example": "day" + }, + { + "name": "from", + "in": "path", + "description": "The start of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "to", + "in": "path", + "description": "The end of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" + ] + }, + "in": "query", + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc" + }, + { + "name": "limit", + "in": "query", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "required": false, + "schema": { + "type": "integer" + }, + "example": 120 + } + ], + "responses": { + "200": { + "description": "Options Aggregates.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "O:RDFN211119C00025000", + "queryCount": 2, + "resultsCount": 2, + "adjusted": true, + "results": [ + { + "v": 2, + "vw": 26.2, + "o": 26.2, + "c": 26.2, + "h": 26.2, + "l": 26.2, + "t": 1632369600000, + "n": 1 + }, + { + "v": 2, + "vw": 28.3, + "o": 28.3, + "c": 28.3, + "h": 28.3, + "l": 28.3, + "t": 1632456000000, + "n": 1 + } + ], + "status": "OK", + "request_id": "5585acde-5085-42d6-95b2-2e388a28370a", + "count": 2 + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + } + } + }, + "/v2/aggs/ticker/{optionsTicker}/prev": { + "get": { + "summary": "Previous Close", + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified option contract.\n", + "tags": [ + "options:aggregates" + ], + "parameters": [ + { + "name": "optionsTicker", + "in": "path", + "description": "The ticker symbol of the options contract.", + "required": true, + "schema": { + "type": "string" + }, + "example": "O:TSLA210903C00700000" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The previous day OHLC for the options contract.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "O:TSLA210903C00700000", + "status": "OK", + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "T": "O:TSLA210903C00700000", + "v": 131704427, + "vw": 116.3058, + "o": 115.55, + "c": 115.97, + "h": 117.59, + "l": 114.13, + "t": 1605042000000, + "n": 2 + } + ], + "request_id": "6a7e466379af0a71039d60cc78e72282" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + } + } + }, + "/v1/historic/forex/{from}/{to}/{date}": { + "get": { + "summary": "Historic Forex Ticks", + "description": "Get historic ticks for a forex currency pair.\n", + "tags": [ + "fx:trades" + ], + "parameters": [ + { + "name": "from", + "in": "path", + "description": "The \"from\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `from` would be **USD**.\n", + "required": true, + "schema": { + "type": "string" + }, + "example": "AUD" + }, + { + "name": "to", + "in": "path", + "description": "The \"to\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `to` would be **JPY**.\n", + "required": true, + "schema": { + "type": "string" + }, + "example": "USD" + }, + { + "name": "date", + "in": "path", + "description": "The date/day of the historic ticks to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "example": "2020-10-14" + }, + { + "name": "offset", + "in": "query", + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "limit", + "in": "query", + "description": "Limit the size of the response, max 10000.", + "required": false, + "schema": { + "type": "integer" + }, + "example": 100 + } + ], + "responses": { + "200": { + "description": "An array of forex ticks", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "day": { + "type": "string", + "format": "date", + "description": "The date that was evaluated from the request." + }, + "map": { + "type": "object", + "description": "A map for shortened result keys." + }, + "msLatency": { + "type": "integer", + "description": "The milliseconds of latency for the query results." + }, + "pair": { + "type": "string", + "description": "The currency pair that was evaluated from the request." + }, + "ticks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "day": "2020-10-14", + "map": { + "ap": "ask", + "bp": "bid", + "t": "timestamp" + }, + "msLatency": "0", + "pair": "AUD/USD", + "status": "success", + "ticks": [ + { + "x": 48, + "ap": 0.71703, + "bp": 0.71701, + "t": 1602633600000 + }, + { + "x": 48, + "ap": 0.71703, + "bp": 0.717, + "t": 1602633600000 + }, + { + "x": 48, + "ap": 0.71702, + "bp": 0.717, + "t": 1602633600000 + } + ], + "type": "forex" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "path": "get_v3_quotes__fxticker", + "name": "Quotes (BBO) v3" + } + } + } + }, + "/v1/conversion/{from}/{to}": { + "get": { + "summary": "Real-time Currency Conversion", + "description": "Get currency conversions using the latest market conversion rates. Note than you can convert in both directions. For example USD to CAD or CAD to USD.\n", + "tags": [ + "fx:conversion" + ], + "parameters": [ + { + "name": "from", + "in": "path", + "description": "The \"from\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AUD" + }, + { + "name": "to", + "in": "path", + "description": "The \"to\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "USD" + }, + { + "name": "amount", + "in": "query", + "description": "The amount to convert, with a decimal.", + "required": false, + "schema": { + "type": "integer" + }, + "example": 100 + }, + { + "name": "precision", + "in": "query", + "description": "The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy.", + "required": false, + "schema": { + "type": "integer", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + "example": 2 + } + ], + "responses": { + "200": { + "description": "The last tick for this currency pair, plus the converted amount for the requested amount.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "last": { + "type": "object", + "properties": { + "ask": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "bid": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "exchange": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "timestamp": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "from": { + "type": "string", + "description": "The \"from\" currency symbol." + }, + "to": { + "type": "string", + "description": "The \"to\" currency symbol." + }, + "initialAmount": { + "type": "number", + "format": "double", + "description": "The amount to convert." + }, + "converted": { + "type": "number", + "format": "double", + "description": "The result of the conversion." + } + } + } + ] + }, + "example": { + "status": "success", + "last": { + "bid": 1.3672596, + "ask": 1.3673344, + "exchange": 48, + "timestamp": 1605555313000 + }, + "from": "AUD", + "to": "USD", + "initialAmount": 100, + "converted": 73.14 + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + } + } + }, + "/v1/last_quote/currencies/{from}/{to}": { + "get": { + "summary": "Last Quote for a Currency Pair", + "description": "Get the last quote tick for a forex currency pair.\n", + "tags": [ + "fx:last:quote" + ], + "parameters": [ + { + "name": "from", + "in": "path", + "description": "The \"from\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AUD" + }, + { + "name": "to", + "in": "path", + "description": "The \"to\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "USD" + } + ], + "responses": { + "200": { + "description": "The last quote tick for this currency pair.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "last": { + "type": "object", + "properties": { + "ask": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "bid": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "exchange": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "timestamp": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + } + } + } + ] + }, + "example": { + "last": { + "ask": 0.73124, + "bid": 0.73122, + "exchange": 48, + "timestamp": 1605557756000 + }, + "request_id": "a73a29dbcab4613eeaf48583d3baacf0", + "status": "success", + "symbol": "AUD/USD" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + } + } + }, + "/v2/aggs/grouped/locale/global/market/fx/{date}": { + "get": { + "summary": "Grouped Daily (Bars)", + "description": "Get the daily open, high, low, and close (OHLC) for the entire forex markets.\n", + "tags": [ + "fx:aggregates" + ], + "parameters": [ + { + "name": "date", + "in": "path", + "description": "The beginning date for the aggregate window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2020-10-14" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "Previous day OHLC for ticker", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "queryCount": 3, + "resultsCount": 3, + "adjusted": true, + "results": [ + { + "T": "C:ILSCHF", + "v": 689, + "vw": 0.2702, + "o": 0.2698, + "c": 0.2704, + "h": 0.2706, + "l": 0.2693, + "t": 1602719999999, + "n": 689 + }, + { + "T": "C:GBPCAD", + "v": 407324, + "vw": 1.7062, + "o": 1.69955, + "c": 1.71103, + "h": 1.71642, + "l": 1.69064, + "t": 1602719999999, + "n": 407324 + }, + { + "T": "C:DKKAUD", + "v": 10639, + "vw": 0.2202, + "o": 0.22, + "c": 0.2214, + "h": 0.2214, + "l": 0.2195, + "t": 1602719999999, + "n": 10639 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + } + } + }, + "/v2/aggs/ticker/{forexTicker}/prev": { + "get": { + "summary": "Previous Close", + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified forex pair.\n", + "tags": [ + "fx:aggregates" + ], + "parameters": [ + { + "name": "forexTicker", + "in": "path", + "description": "The ticker symbol of the currency pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "C:EURUSD" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The previous day OHLC for the ticker.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "C:EURUSD", + "status": "OK", + "request_id": "08ec061fb85115678d68452c0a609cb7", + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "T": "C:EURUSD", + "v": 180300, + "vw": 1.055, + "o": 1.05252, + "c": 1.06206, + "h": 1.0631, + "l": 1.0505, + "t": 1651708799999, + "n": 180300 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + } + } + }, + "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "get": { + "summary": "Aggregates (Bars)", + "description": "Get aggregate bars for a forex pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "tags": [ + "fx:aggregates" + ], + "parameters": [ + { + "name": "forexTicker", + "in": "path", + "description": "The ticker symbol of the currency pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "C:EURUSD" + }, + { + "name": "multiplier", + "in": "path", + "description": "The size of the timespan multiplier.", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + }, + { + "name": "timespan", + "in": "path", + "description": "The size of the time window.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ] + }, + "example": "day" + }, + { + "name": "from", + "in": "path", + "description": "The start of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "to", + "in": "path", + "description": "The end of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" + ] + }, + "in": "query", + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc" + }, + { + "name": "limit", + "in": "query", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "required": false, + "schema": { + "type": "integer" + }, + "example": 120 + } + ], + "responses": { + "200": { + "description": "Forex Aggregates.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "C:EURUSD", + "status": "OK", + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "v": 125329, + "vw": 1.1789, + "o": 1.17921, + "c": 1.17721, + "h": 1.18305, + "l": 1.1756, + "t": 1626912000000, + "n": 125329 + } + ], + "request_id": "79c061995d8b627b736170bc9653f15d" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + } + } + }, + "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}": { + "get": { + "summary": "Snapshot - Ticker", + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded currency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "tags": [ + "fx:snapshot" + ], + "parameters": [ + { + "name": "ticker", + "in": "path", + "description": "The forex ticker.", + "required": true, + "schema": { + "type": "string" + }, + "example": "C:EURUSD" + } + ], + "responses": { + "200": { + "description": "Get current state for a ticker", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "ticker": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID on which this quote happened." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + ] + }, + "example": { + "request_id": "ad76e76ce183002c5937a7f02dfebde4", + "status": "OK", + "ticker": { + "day": { + "c": 1.18403, + "h": 1.1906, + "l": 1.18001, + "o": 1.18725, + "v": 83578 + }, + "lastQuote": { + "a": 1.18403, + "b": 1.18398, + "i": 0, + "t": 1606163759000, + "x": 48 + }, + "min": { + "c": 1.18396, + "h": 1.18423, + "l": 1.1838, + "o": 1.18404, + "v": 41 + }, + "prevDay": { + "c": 1.18724, + "h": 1.18727, + "l": 1.18725, + "o": 1.18725, + "v": 5, + "vw": 0 + }, + "ticker": "C:EURUSD", + "todaysChange": -0.00316, + "todaysChangePerc": -0.27458312, + "updated": 1606163759000 + } + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/snapshot/locale/global/markets/forex/tickers": { + "get": { + "summary": "Snapshot - All Tickers", + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded forex symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "tags": [ + "fx:snapshot" + ], + "parameters": [ + { + "name": "tickers", + "in": "query", + "description": "A comma separated list of tickers to get snapshots for.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Get current state for all tickers", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID on which this quote happened." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.11778221, + "h": 0.11812263, + "l": 0.11766631, + "o": 0.11797149, + "v": 77794 + }, + "lastQuote": { + "a": 0.11780678, + "b": 0.11777952, + "t": 1605280919000, + "x": 48 + }, + "min": { + "c": 0.117769, + "h": 0.11779633, + "l": 0.11773698, + "o": 0.11778, + "v": 202 + }, + "prevDay": { + "c": 0.11797258, + "h": 0.11797258, + "l": 0.11797149, + "o": 0.11797149, + "v": 2, + "vw": 0 + }, + "ticker": "C:HKDCHF", + "todaysChange": -0.00019306, + "todaysChangePerc": -0.1636482, + "updated": 1605280919000 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/snapshot/locale/global/markets/forex/{direction}": { + "get": { + "summary": "Snapshot - Gainers/Losers", + "description": "Get the current top 20 gainers or losers of the day in forex markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "tags": [ + "fx:snapshot" + ], + "parameters": [ + { + "name": "direction", + "in": "path", + "description": "The direction of the snapshot results to return.\n", + "required": true, + "schema": { + "type": "string", + "enum": [ + "gainers", + "losers" + ] + }, + "example": "gainers" + } + ], + "responses": { + "200": { + "description": "Get the current gainers / losers of the day", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID on which this quote happened." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.886156, + "h": 0.887111, + "l": 0.8825327, + "o": 0.8844732, + "v": 1041 + }, + "lastQuote": { + "a": 0.8879606, + "b": 0.886156, + "t": 1605283204000, + "x": 48 + }, + "min": { + "c": 0.886156, + "h": 0.886156, + "l": 0.886156, + "o": 0.886156, + "v": 1 + }, + "prevDay": { + "c": 0.8428527, + "h": 0.889773, + "l": 0.8428527, + "o": 0.8848539, + "v": 1078, + "vw": 0 + }, + "ticker": "C:PLNILS", + "todaysChange": 0.0433033, + "todaysChangePerc": 5.13770674, + "updated": 1605330008999 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v1/last/crypto/{from}/{to}": { + "get": { + "summary": "Last Trade for a Crypto Pair", + "description": "Get the last trade tick for a cryptocurrency pair.\n", + "tags": [ + "crypto:last:trade" + ], + "parameters": [ + { + "name": "from", + "in": "path", + "description": "The \"from\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "BTC" + }, + { + "name": "to", + "in": "path", + "description": "The \"to\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "USD" + } + ], + "responses": { + "200": { + "description": "The last tick for this currency pair.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "last": { + "type": "object", + "properties": { + "conditions": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "exchange": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "price": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "size": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "timestamp": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + } + } + } + ] + }, + "example": { + "last": { + "conditions": [ + 1 + ], + "exchange": 4, + "price": 16835.42, + "size": 0.006909, + "timestamp": 1605560885027 + }, + "request_id": "d2d779df015fe2b7fbb8e58366610ef7", + "status": "success", + "symbol": "BTC-USD" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + } + } + }, + "/v1/open-close/crypto/{from}/{to}/{date}": { + "get": { + "summary": "Daily Open/Close", + "description": "Get the open, close prices of a cryptocurrency symbol on a certain day.\n", + "tags": [ + "crypto:open-close" + ], + "parameters": [ + { + "name": "from", + "in": "path", + "description": "The \"from\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "BTC" + }, + { + "name": "to", + "in": "path", + "description": "The \"to\" symbol of the pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "USD" + }, + { + "name": "date", + "in": "path", + "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "example": "2020-10-14" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The open/close of this symbol.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + }, + "isUTC": { + "type": "boolean", + "description": "Whether or not the timestamps are in UTC timezone." + }, + "day": { + "type": "string", + "format": "date", + "description": "The date requested." + }, + "open": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "close": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "openTrades": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + } + } + } + }, + "closingTrades": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + } + } + } + } + } + }, + "example": { + "symbol": "BTC-USD", + "isUTC": true, + "day": "2020-10-09T00:00:00.000Z", + "open": 10932.44, + "close": 11050.64, + "openTrades": [ + { + "s": 0.002, + "p": 10932.44, + "x": 1, + "t": 1602201600056, + "c": [ + 2 + ], + "i": "511235746" + }, + { + "s": 0.02, + "p": 10923.76, + "x": 4, + "t": 1602201600141, + "c": [ + 2 + ], + "i": "511235751" + } + ], + "closingTrades": [ + { + "s": 0.006128, + "p": 11050.64, + "x": 4, + "t": 1602287999795, + "c": [ + 2 + ], + "i": "973323250" + }, + { + "s": 0.014, + "p": 11049.4, + "x": 17, + "t": 1602287999659, + "c": [ + 1 + ], + "i": "105717893" + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + } + } + }, + "/v1/historic/crypto/{from}/{to}/{date}": { + "get": { + "summary": "Historic Crypto Trades", + "description": "Get historic trade ticks for a cryptocurrency pair.\n", + "tags": [ + "crypto:trades" + ], + "parameters": [ + { + "name": "from", + "in": "path", + "description": "The \"from\" symbol of the crypto pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "BTC" + }, + { + "name": "to", + "in": "path", + "description": "The \"to\" symbol of the crypto pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "USD" + }, + { + "name": "date", + "in": "path", + "description": "The date/day of the historic ticks to retrieve.", + "required": true, + "schema": { + "type": "string", + "format": "date" + }, + "example": "2020-10-14" + }, + { + "name": "offset", + "in": "query", + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "required": false, + "schema": { + "type": "integer" + } + }, + { + "name": "limit", + "in": "query", + "description": "Limit the size of the response, max 10000.", + "required": false, + "schema": { + "type": "integer" + }, + "example": 100 + } + ], + "responses": { + "200": { + "description": "An array of crypto trade ticks.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "string", + "description": "The status of this request's response." + }, + { + "type": "object", + "properties": { + "day": { + "type": "string", + "format": "date", + "description": "The date that was evaluated from the request." + }, + "map": { + "type": "object", + "description": "A map for shortened result keys." + }, + "msLatency": { + "type": "integer", + "description": "The milliseconds of latency for the query results." + }, + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + }, + "ticks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + } + } + } + } + } + } + ] + }, + "example": { + "day": "2020-10-14T00:00:00.000Z", + "map": { + "c": "conditions", + "p": "price", + "s": "size", + "t": "timestamp", + "x": "exchange" + }, + "msLatency": 1, + "status": "success", + "symbol": "BTC-USD", + "ticks": [ + { + "s": 0.00188217, + "p": 15482.89, + "x": 1, + "t": 1604880000067, + "c": [ + 2 + ] + }, + { + "s": 0.00161739, + "p": 15482.11, + "x": 1, + "t": 1604880000167, + "c": [ + 2 + ] + } + ], + "type": "crypto" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "path": "get_v3_trades__cryptoticker", + "name": "Trades v3" + } + } + } + }, + "/v2/aggs/grouped/locale/global/market/crypto/{date}": { + "get": { + "summary": "Grouped Daily (Bars)", + "description": "Get the daily open, high, low, and close (OHLC) for the entire cryptocurrency markets.\n", + "tags": [ + "crypto:aggregates" + ], + "parameters": [ + { + "name": "date", + "in": "path", + "description": "The beginning date for the aggregate window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2020-10-14" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The previous day OHLC for the ticker.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "queryCount": 3, + "resultsCount": 3, + "adjusted": true, + "results": [ + { + "T": "X:ARDRUSD", + "v": 2, + "vw": 0.0551, + "o": 0.0550762, + "c": 0.0550762, + "h": 0.0550762, + "l": 0.0550762, + "t": 1580676480000, + "n": 18388 + }, + { + "T": "X:NGCUSD", + "v": 4734, + "vw": 0.0273, + "o": 0.0273733, + "c": 0.0272983, + "h": 0.0273733, + "l": 0.0272983, + "t": 1580674080000, + "n": 18 + }, + { + "T": "X:ZSCUSD", + "v": 390, + "vw": 0.0003, + "o": 0.00028531, + "c": 0.00028531, + "h": 0.00028531, + "l": 0.00028531, + "t": 1580671080000, + "n": 151 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + } + } + }, + "/v2/aggs/ticker/{cryptoTicker}/prev": { + "get": { + "summary": "Previous Close", + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified cryptocurrency pair.\n", + "tags": [ + "crypto:aggregates" + ], + "parameters": [ + { + "name": "cryptoTicker", + "in": "path", + "description": "The ticker symbol of the currency pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "X:BTCUSD" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + } + ], + "responses": { + "200": { + "description": "The previous day OHLC for a ticker.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "X:BTCUSD", + "status": "OK", + "request_id": "b2170df985474b6d21a6eeccfb6bee67", + "queryCount": 1, + "resultsCount": 1, + "adjusted": true, + "results": [ + { + "T": "X:BTCUSD", + "v": 95045.16897951, + "vw": 15954.2111, + "o": 15937.1, + "c": 16035.9, + "h": 16180, + "l": 15639.2, + "t": 1605416400000 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + } + } + }, + "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "get": { + "summary": "Aggregates (Bars)", + "description": "Get aggregate bars for a cryptocurrency pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "tags": [ + "crypto:aggregates" + ], + "parameters": [ + { + "name": "cryptoTicker", + "in": "path", + "description": "The ticker symbol of the currency pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "X:BTCUSD" + }, + { + "name": "multiplier", + "in": "path", + "description": "The size of the timespan multiplier.", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + }, + { + "name": "timespan", + "in": "path", + "description": "The size of the time window.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ] + }, + "example": "day" + }, + { + "name": "from", + "in": "path", + "description": "The start of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "to", + "in": "path", + "description": "The end of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + { + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" + ] + }, + "in": "query", + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc" + }, + { + "name": "limit", + "in": "query", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "required": false, + "schema": { + "type": "integer" + }, + "example": 120 + } + ], + "responses": { + "200": { + "description": "Cryptocurrency Aggregates.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + } + ] + }, + "example": { + "ticker": "X:BTCUSD", + "status": "OK", + "queryCount": 2, + "resultsCount": 2, + "adjusted": true, + "results": [ + { + "v": 303067.6562332156, + "vw": 9874.5529, + "o": 9557.9, + "c": 10094.75, + "h": 10429.26, + "l": 9490, + "t": 1590984000000, + "n": 1 + }, + { + "v": 323339.6922892879, + "vw": 9729.5701, + "o": 10096.87, + "c": 9492.62, + "h": 10222.72, + "l": 9135.68, + "t": 1591070400000, + "n": 1 + } + ], + "request_id": "0cf72b6da685bcd386548ffe2895904a" + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + } + } + }, + "/v2/snapshot/locale/global/markets/crypto/tickers": { + "get": { + "summary": "Snapshot - All Tickers", + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "tags": [ + "crypto:snapshot" + ], + "parameters": [ + { + "name": "tickers", + "in": "query", + "description": "A comma separated list of tickers to get snapshots for.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Get current state for all tickers", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + { + "properties": { + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + } + } + } + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.296, + "h": 0.59714, + "l": 0.23706, + "o": 0.28, + "v": 4097699.5691991993, + "vw": 0 + }, + "lastTrade": { + "c": [ + 1 + ], + "i": 413131, + "p": 0.293, + "s": 13.6191, + "t": 1605292686010, + "x": 17 + }, + "min": { + "c": 0.296, + "h": 0.296, + "l": 0.294, + "o": 0.296, + "v": 123.4866, + "vw": 0 + }, + "prevDay": { + "c": 0.281, + "h": 0.59714, + "l": 0.23706, + "o": 0.27, + "v": 6070178.786154971, + "vw": 0.4076 + }, + "ticker": "X:FSNUSD", + "todaysChange": 0.012, + "todaysChangePerc": 4.270463, + "updated": 1605330008999 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}": { + "get": { + "summary": "Snapshot - Ticker", + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded cryptocurrency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "tags": [ + "crypto:snapshot" + ], + "parameters": [ + { + "name": "ticker", + "in": "path", + "description": "Ticker of the snapshot", + "required": true, + "schema": { + "type": "string" + }, + "example": "X:BTCUSD" + } + ], + "responses": { + "200": { + "description": "Get current state for a ticker", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "ticker": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + { + "properties": { + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + } + } + } + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + ] + }, + "example": { + "request_id": "ad92e92ce183112c593717f00dfebd2c", + "status": "OK", + "ticker": { + "day": { + "c": 16260.85, + "h": 16428.4, + "l": 15830.4, + "o": 16418.07, + "v": 105008.84231068, + "vw": 0 + }, + "lastTrade": { + "c": [ + 2 + ], + "i": "464569520", + "p": 16242.31, + "s": 0.001933, + "t": 1605294230780, + "x": 4 + }, + "min": { + "c": 16235.1, + "h": 16264.29, + "l": 16129.3, + "o": 16257.51, + "v": 19.30791925, + "vw": 0 + }, + "prevDay": { + "c": 16399.24, + "h": 16418.07, + "l": 16399.24, + "o": 16418.07, + "v": 0.99167108, + "vw": 16402.6893 + }, + "ticker": "X:BTCUSD", + "todaysChange": -156.93, + "todaysChangePerc": -0.956935, + "updated": 1605330008999 + } + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book": { + "get": { + "summary": "Snapshot - Ticker Full Book (L2)", + "description": "Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "tags": [ + "crypto:snapshot" + ], + "parameters": [ + { + "name": "ticker", + "in": "path", + "description": "The cryptocurrency ticker.", + "required": true, + "schema": { + "type": "string" + }, + "example": "X:BTCUSD" + } + ], + "responses": { + "200": { + "description": "Get current level 2 book for a ticker", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "string", + "description": "The status of this request's response." + }, + { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "bids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of this book level." + }, + "x": { + "type": "object", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" + } + } + } + }, + "asks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of this book level." + }, + "x": { + "type": "object", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" + } + } + } + }, + "bidCount": { + "type": "number", + "format": "double", + "description": "The combined total number of bids in the book." + }, + "askCount": { + "type": "number", + "format": "double", + "description": "The combined total number of asks in the book." + }, + "spread": { + "type": "number", + "format": "double", + "description": "The difference between the best bid and the best ask price accross exchanges." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "data": { + "ticker": "X:BTCUSD", + "bids": [ + { + "p": 16303.17, + "x": { + "1": 2 + } + }, + { + "p": 16302.94, + "x": { + "1": 0.02859424, + "6": 0.023455 + } + } + ], + "asks": [ + { + "p": 11454, + "x": { + "2": 1 + } + }, + { + "p": 11455, + "x": { + "2": 1 + } + } + ], + "bidCount": 694.951789670001, + "askCount": 593.1412981600005, + "spread": -4849.17, + "updated": 1605295074162 + } + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + }, + "/v2/snapshot/locale/global/markets/crypto/{direction}": { + "get": { + "summary": "Snapshot - Gainers/Losers", + "description": "Get the current top 20 gainers or losers of the day in cryptocurrency markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "tags": [ + "crypto:snapshot" + ], + "parameters": [ + { + "name": "direction", + "in": "path", + "description": "The direction of the snapshot results to return.\n", + "required": true, + "schema": { + "type": "string", + "enum": [ + "gainers", + "losers" + ] + }, + "example": "gainers" + } + ], + "responses": { + "200": { + "description": "Get the current gainers / losers of the day", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "string", + "description": "The status of this request's response." + }, + { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + { + "properties": { + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + } + } + } + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + } + ] + }, + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.0374, + "h": 0.062377, + "l": 0.01162, + "o": 0.044834, + "v": 27313165.159427017, + "vw": 0 + }, + "lastTrade": { + "c": [ + 2 + ], + "i": "517478762", + "p": 0.0374, + "s": 499, + "t": 1604409649544, + "x": 2 + }, + "min": { + "c": 0.062377, + "h": 0.062377, + "l": 0.062377, + "o": 0.062377, + "v": 35420, + "vw": 0 + }, + "prevDay": { + "c": 0.01162, + "h": 0.044834, + "l": 0.01162, + "o": 0.044834, + "v": 53616273.36827199, + "vw": 0.0296 + }, + "ticker": "X:DRNUSD", + "todaysChange": 0.02578, + "todaysChangePerc": 221.858864, + "updated": 1605330008999 + } + ] + } + } + } + }, + "default": { + "description": "Unexpected error" + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + }, + { + "name": "delayed", + "description": "15 minute delayed data" + } + ] + } + } + }, + "components": { + "schemas": { + "TickerBase": { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + } + }, + "StatusBase": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + } + } + }, + "StatusCountBase": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "count": { + "type": "integer", + "description": "The total number of results for this request." + } + } + }, + "RequestIdBase": { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + "StandardBase": { + "allOf": [ + { + "type": "object", + "properties": { + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "count": { + "type": "integer", + "description": "The total number of results for this request." + } + } + } + ] + }, + "PaginationHooksBase": { + "type": "object", + "properties": { + "next_url": { + "type": "string", + "description": "If present, this value can be used to fetch the next page of data." + } + } + }, + "V1LastBase": { + "type": "object", + "properties": { + "symbol": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + "V2LastBase": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + "V2TicksBase": { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "results_count": { + "type": "integer", + "description": "The total number of results for this request." + }, + "db_latency": { + "type": "integer", + "description": "Latency in milliseconds for the query results from the database." + }, + "success": { + "type": "boolean", + "description": "Whether or not this query was executed successfully." + } + } + }, + "V2AggsBase": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "queryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "resultsCount": { + "type": "integer", + "description": "The total number of results for this request." + }, + "request_id": { + "type": "string", + "description": "A request id assigned by the server." + } + } + }, + "News": { + "type": "array", + "items": { + "type": "object", + "properties": { + "symbols": { + "type": "array", + "description": "A list of ticker symbols relating to the article.", + "items": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + }, + "title": { + "type": "string", + "description": "The title of the news article." + }, + "url": { + "type": "string", + "description": "A direct link to the news article from its source publication." + }, + "source": { + "type": "string", + "description": "The publication source of the article." + }, + "summary": { + "type": "string", + "description": "A summary of the news article." + }, + "image": { + "type": "string", + "description": "A URL of the image for the news article, if found." + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "The timestamp of the news article." + }, + "keywords": { + "type": "array", + "description": "A list of common keywords related to the news article.", + "items": { + "type": "string", + "description": "Common keywords of the news article." + } + } + } + } + }, + "Financial": { + "type": "object", + "required": [ + "symbol", + "reportDate", + "reportDateStr" + ], + "properties": { + "symbol": { + "type": "string", + "example": "AAPL", + "description": "Stock Symbol" + }, + "reportDate": { + "type": "string", + "format": "date-time", + "example": "2017-12-31T00:00:00.000Z", + "description": "Report Date" + }, + "reportDateStr": { + "type": "string", + "example": "2017-12-31", + "description": "Report date as non date format" + }, + "grossProfit": { + "type": "integer", + "example": 33912000000 + }, + "costOfRevenue": { + "type": "integer", + "example": 54381000000 + }, + "operatingRevenue": { + "type": "integer", + "example": 88293000000 + }, + "totalRevenue": { + "type": "integer", + "example": 88293000000 + }, + "operatingIncome": { + "type": "integer", + "example": 26274000000 + }, + "netIncome": { + "type": "integer", + "example": 20065000000 + }, + "researchAndDevelopment": { + "type": "integer", + "example": 3407000000 + }, + "operatingExpense": { + "type": "integer", + "example": 7638000000 + }, + "currentAssets": { + "type": "integer", + "example": 143810000000 + }, + "totalAssets": { + "type": "integer", + "example": 406794000000 + }, + "totalLiabilities": { + "type": "integer", + "example": 266595000000 + }, + "currentCash": { + "type": "integer", + "example": 27491000000 + }, + "currentDebt": { + "type": "integer", + "example": 18478000000 + }, + "totalCash": { + "type": "integer", + "example": 77153000000 + }, + "totalDebt": { + "type": "integer", + "example": 122400000000 + }, + "shareholderEquity": { + "type": "integer", + "example": 140199000000 + }, + "cashChange": { + "type": "integer", + "example": 7202000000 + }, + "cashFlow": { + "type": "integer", + "example": 28293000000 + }, + "operatingGainsLosses": { + "type": "number", + "example": null + } + } + }, + "Exchange": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "number", + "description": "The ID of the exchange." + }, + "type": { + "type": "string", + "description": "The type of exchange.\n- TRF = Trade Reporting Facility\n- exchange = Reporting exchange on the tape\n" + }, + "market": { + "type": "string", + "description": "The market data type that this exchange contains." + }, + "mic": { + "type": "string", + "description": "The Market Identification Code or MIC as defined in ISO 10383 (https://en.wikipedia.org/wiki/Market_Identifier_Code)." + }, + "name": { + "type": "string", + "description": "The name of the exchange." + }, + "tape": { + "type": "string", + "description": "The tape id of the exchange." + }, + "code": { + "type": "string", + "description": "A unique identifier for the exchange internal to Polygon.io. This is not an industry code or ISO standard." + } + } + } + }, + "ConditionTypeMap": { + "type": "object", + "properties": { + "condition": { + "type": "string", + "description": "Polygon.io's mapping for condition codes. For more information, see our Trade Conditions Glossary.\n" + } + } + }, + "MarketStatus": { + "type": "object", + "properties": { + "market": { + "type": "string", + "description": "The status of the market as a whole." + }, + "earlyHours": { + "type": "boolean", + "description": "Whether or not the market is in pre-market hours." + }, + "afterHours": { + "type": "boolean", + "description": "Whether or not the market is in post-market hours." + }, + "serverTime": { + "type": "string", + "format": "date-time", + "description": "The current time of the server." + }, + "exchanges": { + "type": "object", + "properties": { + "nyse": { + "type": "string", + "description": "The status of the NYSE market." + }, + "nasdaq": { + "type": "string", + "description": "The status of the Nasdaq market." + }, + "otc": { + "type": "string", + "description": "The status of the OTC market." + } + } + }, + "currencies": { + "type": "object", + "properties": { + "fx": { + "type": "string", + "description": "The status of the forex market." + }, + "crypto": { + "type": "string", + "description": "The status of the crypto market." + } + } + } + } + }, + "MarketHoliday": { + "type": "array", + "items": { + "type": "object", + "properties": { + "exchange": { + "type": "string", + "description": "Which market the record is for." + }, + "name": { + "type": "string", + "description": "The name of the holiday." + }, + "status": { + "type": "string", + "description": "The status of the market on the holiday." + }, + "date": { + "type": "string", + "format": "date", + "description": "The date of the holiday." + }, + "open": { + "type": "string", + "format": "date-time", + "description": "The market open time on the holiday (if it's not closed)." + }, + "close": { + "type": "string", + "format": "date-time", + "description": "The market close time on the holiday (if it's not closed)." + } + } + } + }, + "RatingSection": { + "type": "object", + "required": [ + "month1", + "month2", + "month3", + "current" + ], + "properties": { + "current": { + "type": "number", + "example": 0, + "description": "Analyst Rating at current month" + }, + "month1": { + "type": "number", + "example": 1, + "description": "Analyst Ratings at 1 month in the future" + }, + "month2": { + "type": "number", + "example": 3, + "description": "Analyst Ratings at 2 month in the future" + }, + "month3": { + "type": "number", + "example": 4, + "description": "Analyst Ratings at 3 month in the future" + }, + "month4": { + "type": "number", + "example": 3, + "description": "Analyst Ratings at 4 month in the future" + }, + "month5": { + "type": "number", + "example": 2, + "description": "Analyst Ratings at 5 month in the future" + } + } + }, + "TradeDetailsMapItem": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Actual type of the trade detail item" + }, + "name": { + "type": "string", + "description": "Name of the trade detail item" + } + } + }, + "Company": { + "type": "object", + "properties": { + "logo": { + "type": "string", + "description": "The URL of the entity's logo." + }, + "exchange": { + "type": "string", + "description": "The symbol's primary exchange." + }, + "exchangeSymbol": { + "type": "string", + "description": "The exchange code (id) of the symbol's primary exchange." + }, + "type": { + "type": "string", + "description": "The type or class of the security. (Full List of Ticker Types)" + }, + "name": { + "type": "string", + "description": "The name of the company/entity." + }, + "symbol": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "listdate": { + "type": "string", + "format": "date", + "description": "The date that the symbol was listed on the exchange." + }, + "cik": { + "type": "string", + "description": "The official CIK guid used for SEC database/filings." + }, + "bloomberg": { + "type": "string", + "description": "The Bloomberg guid for the symbol." + }, + "figi": { + "type": "string", + "description": "The OpenFigi project guid for the symbol. (https://openfigi.com/)" + }, + "lei": { + "type": "string", + "description": "The Legal Entity Identifier (LEI) guid for the symbol. (https://en.wikipedia.org/wiki/Legal_Entity_Identifier)" + }, + "sic": { + "type": "integer", + "description": "Standard Industrial Classification (SIC) id for the symbol. (https://en.wikipedia.org/wiki/Legal_Entity_Identifier)" + }, + "country": { + "type": "string", + "description": "The country in which the company is registered." + }, + "industry": { + "type": "string", + "description": "The industry in which the company operates." + }, + "sector": { + "type": "string", + "description": "The sector of the indsutry in which the symbol operates." + }, + "marketcap": { + "type": "integer", + "description": "The current market cap for the company." + }, + "employees": { + "type": "integer", + "description": "The approximate number of employees for the company." + }, + "phone": { + "type": "string", + "description": "The phone number for the company. This is usually a corporate contact number." + }, + "ceo": { + "type": "string", + "description": "The name of the company's current CEO." + }, + "url": { + "type": "string", + "description": "The URL of the company's website" + }, + "description": { + "type": "string", + "description": "A description of the company and what they do/offer." + }, + "hq_address": { + "type": "string", + "description": "The street address for the company's headquarters." + }, + "hq_state": { + "type": "string", + "description": "The state in which the company's headquarters is located." + }, + "hq_country": { + "type": "string", + "description": "The country in which the company's headquarters is located." + }, + "similar": { + "type": "array", + "description": "A list of ticker symbols for similar companies.", + "items": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + }, + "tags": { + "type": "array", + "items": { + "type": "string", + "description": "A list of words related to the company." + } + }, + "updated": { + "type": "string", + "format": "date", + "description": "The last time this company record was updated." + }, + "active": { + "type": "boolean", + "description": "Indicates if the security is actively listed. If false, this means the company is no longer listed and cannot be traded." + } + } + }, + "Adjusted": { + "type": "boolean", + "description": "Whether or not this response was adjusted for splits." + }, + "AskExchangeId": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "AskPrice": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "AskSize": { + "type": "integer", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + }, + "BidExchangeId": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "BidPrice": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "BidSize": { + "type": "integer", + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." + }, + "Close": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "Conditions": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "Count": { + "type": "integer", + "description": "The total number of results for this request." + }, + "Date": { + "oneOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "string", + "format": "date" + } + ] + }, + "ExchangeId": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "ForexExchangeId": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "High": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "Indicators": { + "type": "array", + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "type": "integer", + "description": "The indicator code.\n" + } + }, + "Low": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "Map": { + "type": "object", + "description": "A mapping of the keys returned in the results to their descriptive name and data types.", + "properties": { + "key": { + "type": "object", + "description": "A dynamic key from the results set", + "properties": { + "name": { + "type": "string", + "description": "The descriptive name of this results key" + }, + "type": { + "type": "string", + "description": "The data type of this results key", + "enum": [ + "string", + "int", + "int64", + "float64" + ] + } + } + } + } + }, + "MsLatency": { + "type": "integer", + "description": "The milliseconds of latency for the query results." + }, + "NumberOfItems": { + "type": "number", + "description": "The number of transactions in the aggregate window." + }, + "Open": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "Price": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "QueryCount": { + "type": "integer", + "description": "The number of aggregates (minute or day) used to generate the response." + }, + "RequestID": { + "type": "string", + "description": "A request id assigned by the server." + }, + "Size": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "SequenceNumber": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + }, + "Status": { + "type": "string", + "description": "The status of this request's response." + }, + "StockSymbol": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "SymbolPair": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + }, + "Timestamp": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "TimestampSIP": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "TimestampExchange": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "TimestampTRF": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "Tape": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + }, + "TodaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "TodaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "TradeExchange": { + "type": "integer", + "description": "The exchange that this trade happened on." + }, + "TradeId": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "Updated": { + "type": "integer", + "description": "The last updated timestamp." + }, + "Volume": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "VolumeWeight": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "TickerResults": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + }, + "StocksGroupedResults": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + }, + "ForexGroupedResults": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + }, + "ForexTickerResults": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + }, + "CryptoGroupedResults": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + }, + "SnapshotLastTrade": { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + "SnapshotOHLCV": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "SnapshotOHLCVVW": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "StocksSnapshotLastQuote": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size in lots." + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size in lots." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "StocksSnapshotMinute": { + "type": "object", + "properties": { + "av": { + "type": "integer", + "description": "The accumulated volume." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "StocksSnapshotTickers": { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size in lots." + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size in lots." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "av": { + "type": "integer", + "description": "The accumulated volume." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + }, + "StocksSnapshotTicker": { + "type": "object", + "properties": { + "ticker": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size in lots." + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size in lots." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "av": { + "type": "integer", + "description": "The accumulated volume." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + }, + "ForexSnapshotLastQuote": { + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID on which this quote happened." + } + } + }, + "ForexSnapshotPrevDay": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ForexSnapshotTicker": { + "type": "object", + "properties": { + "ticker": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID on which this quote happened." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + }, + "ForexSnapshotTickers": { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID on which this quote happened." + } + } + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + }, + "CryptoSnapshotMinute": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "CryptoSnapshotTicker": { + "type": "object", + "properties": { + "ticker": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + { + "properties": { + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + } + } + } + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + }, + "CryptoSnapshotTickers": { + "type": "object", + "properties": { + "tickers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "The trade conditions.", + "items": { + "type": "string" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "integer", + "description": "The size (volume) of the trade." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + } + } + }, + { + "properties": { + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + } + } + } + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + } + } + }, + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "todaysChange": { + "type": "number", + "format": "double", + "description": "The value of the change the from previous day." + }, + "todaysChangePerc": { + "type": "number", + "format": "double", + "description": "The percentage change since the previous day." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + } + }, + "CryptoSnapshotTickerFullBook": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "bids": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of this book level." + }, + "x": { + "type": "object", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" + } + } + } + }, + "asks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of this book level." + }, + "x": { + "type": "object", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" + } + } + } + }, + "bidCount": { + "type": "number", + "format": "double", + "description": "The combined total number of bids in the book." + }, + "askCount": { + "type": "number", + "format": "double", + "description": "The combined total number of asks in the book." + }, + "spread": { + "type": "number", + "format": "double", + "description": "The difference between the best bid and the best ask price accross exchanges." + }, + "updated": { + "type": "integer", + "description": "The last updated timestamp." + } + } + } + } + }, + "v3Tickers": { + "type": "object", + "properties": { + "results": { + "type": "array", + "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response. \n", + "items": { + "type": "object", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "name": { + "type": "string", + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" + }, + "market": { + "type": "string", + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx" + ] + }, + "locale": { + "type": "string", + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ] + }, + "primary_exchange": { + "type": "string", + "description": "The ISO code of the primary listing exchange for this asset." + }, + "type": { + "type": "string", + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." + }, + "active": { + "type": "boolean", + "description": "Whether or not the asset is actively traded. False means the asset has been delisted." + }, + "currency_name": { + "type": "string", + "description": "The name of the currency that this asset is traded with." + }, + "cik": { + "type": "string", + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." + }, + "composite_figi": { + "type": "string", + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "share_class_figi": { + "type": "string", + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "last_updated_utc": { + "type": "string", + "format": "date-time", + "description": "The information is accurate up to this time." + }, + "delisted_utc": { + "type": "string", + "format": "date-time", + "description": "The last date that the asset was traded." + } + }, + "required": [ + "ticker", + "name", + "market", + "locale" + ] + } + } + } + }, + "v3TickerDetails": { + "type": "object", + "properties": { + "results": { + "type": "object", + "description": "Ticker with details.\n", + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "name": { + "type": "string", + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" + }, + "market": { + "type": "string", + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx" + ] + }, + "locale": { + "type": "string", + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ] + }, + "primary_exchange": { + "type": "string", + "description": "The ISO code of the primary listing exchange for this asset." + }, + "type": { + "type": "string", + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." + }, + "active": { + "type": "boolean", + "description": "Whether or not the asset is actively traded. False means the asset has been delisted." + }, + "currency_name": { + "type": "string", + "description": "The name of the currency that this asset is traded with." + }, + "cik": { + "type": "string", + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." + }, + "composite_figi": { + "type": "string", + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "share_class_figi": { + "type": "string", + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" + }, + "delisted_utc": { + "type": "string", + "format": "date-time", + "description": "The last date that the asset was traded." + }, + "share_class_shares_outstanding": { + "type": "number", + "format": "double", + "description": "The recorded number of outstanding shares for this particular share class." + }, + "weighted_shares_outstanding": { + "type": "number", + "format": "double", + "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n" + }, + "market_cap": { + "type": "number", + "format": "double", + "description": "The most recent close price of the ticker multiplied by weighted outstanding shares." + }, + "phone_number": { + "type": "string", + "description": "The phone number for the company behind this ticker." + }, + "address": { + "type": "object", + "properties": { + "address1": { + "type": "string", + "description": "The first line of the company's headquarters address." + }, + "city": { + "type": "string", + "description": "The city of the company's headquarters address." + }, + "state": { + "type": "string", + "description": "The state of the company's headquarters address." + }, + "postal_code": { + "type": "string", + "description": "The postal code of the company's headquarters address." + } + } + }, + "sic_code": { + "type": "string", + "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n" + }, + "sic_description": { + "type": "string", + "description": "A description of this ticker's SIC code." + }, + "ticker_root": { + "type": "string", + "description": "The root of a specified ticker. For example, the root of BRK.A is BRK." + }, + "ticker_suffix": { + "type": "string", + "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A." + }, + "total_employees": { + "type": "number", + "description": "The approximate number of employees for the company." + }, + "list_date": { + "type": "string", + "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD." + }, + "homepage_url": { + "type": "string", + "description": "The URL of the company's website homepage." + }, + "description": { + "type": "string", + "description": "A description of the company and what they do/offer." + }, + "branding": { + "type": "object", + "properties": { + "logo_url": { + "type": "string", + "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" + }, + "icon_url": { + "type": "string", + "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" + } + } + } + }, + "required": [ + "ticker", + "name", + "market", + "locale", + "active", + "currency_name" + ] + } + } + }, + "TickerSymbol": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "Financials": { + "type": "object", + "description": "Financials", + "required": [ + "ticker", + "exDate", + "paymentDate", + "ratio", + "tofactor", + "forfactor" + ], + "properties": { + "ticker": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "period": { + "type": "string", + "example": "Q", + "description": "Reporting period.", + "enum": [ + "Q", + "T", + "QA", + "TA", + "Y", + "YA" + ] + }, + "calendarDate": { + "type": "string", + "format": "date-time", + "example": "2019-03-31" + }, + "reportPeriod": { + "type": "string", + "format": "date-time", + "example": "2019-03-31" + }, + "updated": { + "type": "string", + "format": "date-time", + "example": "1999-03-28" + }, + "accumulatedOtherComprehensiveIncome": { + "type": "integer" + }, + "assets": { + "type": "integer" + }, + "assetsAverage": { + "type": "integer" + }, + "assetsCurrent": { + "type": "integer" + }, + "assetTurnover": { + "type": "integer" + }, + "assetsNonCurrent": { + "type": "integer" + }, + "bookValuePerShare": { + "type": "number", + "format": "double" + }, + "capitalExpenditure": { + "type": "integer" + }, + "cashAndEquivalents": { + "type": "integer" + }, + "cashAndEquivalentsUSD": { + "type": "integer" + }, + "costOfRevenue": { + "type": "integer" + }, + "consolidatedIncome": { + "type": "integer" + }, + "currentRatio": { + "type": "number", + "format": "double" + }, + "debtToEquityRatio": { + "type": "number", + "format": "double" + }, + "debt": { + "type": "integer" + }, + "debtCurrent": { + "type": "integer" + }, + "debtNonCurrent": { + "type": "integer" + }, + "debtUSD": { + "type": "integer" + }, + "deferredRevenue": { + "type": "integer" + }, + "depreciationAmortizationAndAccretion": { + "type": "integer" + }, + "deposits": { + "type": "integer" + }, + "dividendYield": { + "type": "integer" + }, + "dividendsPerBasicCommonShare": { + "type": "integer" + }, + "earningBeforeInterestTaxes": { + "type": "integer" + }, + "earningsBeforeInterestTaxesDepreciationAmortization": { + "type": "integer" + }, + "EBITDAMargin": { + "type": "number", + "format": "double" + }, + "earningsBeforeInterestTaxesDepreciationAmortizationUSD": { + "type": "integer" + }, + "earningBeforeInterestTaxesUSD": { + "type": "integer" + }, + "earningsBeforeTax": { + "type": "integer" + }, + "earningsPerBasicShare": { + "type": "number", + "format": "double" + }, + "earningsPerDilutedShare": { + "type": "number", + "format": "double" + }, + "earningsPerBasicShareUSD": { + "type": "number", + "format": "double" + }, + "shareholdersEquity": { + "type": "integer" + }, + "averageEquity": { + "type": "integer" + }, + "shareholdersEquityUSD": { + "type": "integer" + }, + "enterpriseValue": { + "type": "integer" + }, + "enterpriseValueOverEBIT": { + "type": "integer" + }, + "enterpriseValueOverEBITDA": { + "type": "number", + "format": "double" + }, + "freeCashFlow": { + "type": "integer" + }, + "freeCashFlowPerShare": { + "type": "number", + "format": "double" + }, + "foreignCurrencyUSDExchangeRate": { + "type": "integer" + }, + "grossProfit": { + "type": "integer" + }, + "grossMargin": { + "type": "number", + "format": "double" + }, + "goodwillAndIntangibleAssets": { + "type": "integer" + }, + "interestExpense": { + "type": "integer" + }, + "investedCapital": { + "type": "integer" + }, + "investedCapitalAverage": { + "type": "integer" + }, + "inventory": { + "type": "integer" + }, + "investments": { + "type": "integer" + }, + "investmentsCurrent": { + "type": "integer" + }, + "investmentsNonCurrent": { + "type": "integer" + }, + "totalLiabilities": { + "type": "integer" + }, + "currentLiabilities": { + "type": "integer" + }, + "liabilitiesNonCurrent": { + "type": "integer" + }, + "marketCapitalization": { + "type": "integer" + }, + "netCashFlow": { + "type": "integer" + }, + "netCashFlowBusinessAcquisitionsDisposals": { + "type": "integer" + }, + "issuanceEquityShares": { + "type": "integer" + }, + "issuanceDebtSecurities": { + "type": "integer" + }, + "paymentDividendsOtherCashDistributions": { + "type": "integer" + }, + "netCashFlowFromFinancing": { + "type": "integer" + }, + "netCashFlowFromInvesting": { + "type": "integer" + }, + "netCashFlowInvestmentAcquisitionsDisposals": { + "type": "integer" + }, + "netCashFlowFromOperations": { + "type": "integer" + }, + "effectOfExchangeRateChangesOnCash": { + "type": "integer" + }, + "netIncome": { + "type": "integer" + }, + "netIncomeCommonStock": { + "type": "integer" + }, + "netIncomeCommonStockUSD": { + "type": "integer" + }, + "netLossIncomeFromDiscontinuedOperations": { + "type": "integer" + }, + "netIncomeToNonControllingInterests": { + "type": "integer" + }, + "profitMargin": { + "type": "number", + "format": "double" + }, + "operatingExpenses": { + "type": "integer" + }, + "operatingIncome": { + "type": "integer" + }, + "tradeAndNonTradePayables": { + "type": "integer" + }, + "payoutRatio": { + "type": "integer" + }, + "priceToBookValue": { + "type": "number", + "format": "double" + }, + "priceEarnings": { + "type": "number", + "format": "double" + }, + "priceToEarningsRatio": { + "type": "number", + "format": "double" + }, + "propertyPlantEquipmentNet": { + "type": "integer" + }, + "preferredDividendsIncomeStatementImpact": { + "type": "integer" + }, + "sharePriceAdjustedClose": { + "type": "number", + "format": "double" + }, + "priceSales": { + "type": "number", + "format": "double" + }, + "priceToSalesRatio": { + "type": "number", + "format": "double" + }, + "tradeAndNonTradeReceivables": { + "type": "integer" + }, + "accumulatedRetainedEarningsDeficit": { + "type": "integer" + }, + "revenues": { + "type": "integer" + }, + "revenuesUSD": { + "type": "integer" + }, + "researchAndDevelopmentExpense": { + "type": "integer" + }, + "returnOnAverageAssets": { + "type": "integer" + }, + "returnOnAverageEquity": { + "type": "integer" + }, + "returnOnInvestedCapital": { + "type": "integer" + }, + "returnOnSales": { + "type": "number", + "format": "double" + }, + "shareBasedCompensation": { + "type": "integer" + }, + "sellingGeneralAndAdministrativeExpense": { + "type": "integer" + }, + "shareFactor": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "weightedAverageShares": { + "type": "integer" + }, + "weightedAverageSharesDiluted": { + "type": "integer" + }, + "salesPerShare": { + "type": "number", + "format": "double" + }, + "tangibleAssetValue": { + "type": "integer" + }, + "taxAssets": { + "type": "integer" + }, + "incomeTaxExpense": { + "type": "integer" + }, + "taxLiabilities": { + "type": "integer" + }, + "tangibleAssetsBookValuePerShare": { + "type": "number", + "format": "double" + }, + "workingCapital": { + "type": "integer" + } + } + }, + "Markets": { + "type": "object", + "properties": { + "results": { + "type": "array", + "description": "A list of supported markets.", + "items": { + "type": "object", + "properties": { + "market": { + "type": "string", + "description": "The name of the market." + }, + "desc": { + "type": "string", + "description": "A description of the market." + } + } + } + } + } + }, + "Locales": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "locale": { + "type": "string", + "description": "An abbreviated country name." + }, + "name": { + "type": "string", + "description": "The name of the country." + } + } + } + } + } + }, + "V2News": { + "type": "object", + "required": [ + "id", + "publisher", + "title", + "author", + "published_utc", + "article_url", + "tickers" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the article.\n" + }, + "publisher": { + "type": "object", + "required": [ + "name", + "logo_url", + "homepage_url" + ], + "properties": { + "name": { + "type": "string", + "description": "The publisher's name.\n" + }, + "logo_url": { + "type": "string", + "format": "url", + "description": "The publisher's logo URL.\n" + }, + "homepage_url": { + "type": "string", + "format": "url", + "description": "The publisher's homepage URL.\n" + }, + "favicon_url": { + "type": "string", + "format": "url", + "description": "The publisher's homepage favicon URL.\n" + } + } + }, + "title": { + "type": "string", + "description": "The title of the news article.\n" + }, + "author": { + "type": "string", + "description": "The article's author.\n" + }, + "published_utc": { + "type": "string", + "format": "date-time", + "description": "The date the article was published on.\n" + }, + "article_url": { + "type": "string", + "format": "url", + "description": "A link to the news article.\n" + }, + "tickers": { + "type": "array", + "description": "The ticker symbols associated with the article.\n", + "items": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + } + }, + "amp_url": { + "type": "string", + "format": "url", + "description": "The mobile friendly Accelerated Mobile Page (AMP) URL.\n" + }, + "image_url": { + "type": "string", + "format": "url", + "description": "The article's image URL.\n" + }, + "description": { + "type": "string", + "description": "A description of the article.\n" + }, + "keywords": { + "type": "array", + "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).\n", + "items": { + "type": "string" + } + } + } + }, + "StocksOpenClose": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "The status of this request's response." + }, + "from": { + "type": "string", + "format": "date", + "description": "The requested date." + }, + "symbol": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "open": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "high": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "low": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "close": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "volume": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "preMarket": { + "type": "integer", + "description": "The open price of the ticker symbol in pre-market trading." + }, + "afterHours": { + "type": "number", + "format": "double", + "description": "The close price of the ticker symbol in after hours trading." + } + } + }, + "StocksV2Base": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + "StocksV2Trade": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "e": { + "type": "integer", + "description": "The trade correction indicator.\n" + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "r": { + "type": "integer", + "description": "The ID for the Trade Reporting Facility where the trade took place.\n" + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + }, + "StocksV2Trades": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "e": { + "type": "integer", + "description": "The trade correction indicator.\n" + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "r": { + "type": "integer", + "description": "The ID for the Trade Reporting Facility where the trade took place.\n" + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + } + } + } + }, + "StocksV2NBBO": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "array", + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "type": "integer", + "description": "The indicator code.\n" + } + }, + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." + }, + "x": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + }, + "X": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + }, + "StocksV2NBBOs": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "allOf": [ + { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "t": { + "type": "integer", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + }, + "y": { + "type": "integer", + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + }, + "f": { + "type": "integer", + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + }, + "q": { + "type": "integer", + "format": "int64", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + { + "type": "object", + "properties": { + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "i": { + "type": "array", + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "type": "integer", + "description": "The indicator code.\n" + } + }, + "p": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "s": { + "type": "integer", + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." + }, + "x": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "P": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "S": { + "type": "integer", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + }, + "X": { + "allOf": [ + { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "z": { + "type": "integer", + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + } + } + } + ] + } + } + } + }, + "ForexConversion": { + "type": "object", + "properties": { + "last": { + "type": "object", + "properties": { + "ask": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "bid": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "exchange": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "timestamp": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "from": { + "type": "string", + "description": "The \"from\" currency symbol." + }, + "to": { + "type": "string", + "description": "The \"to\" currency symbol." + }, + "initialAmount": { + "type": "number", + "format": "double", + "description": "The amount to convert." + }, + "converted": { + "type": "number", + "format": "double", + "description": "The result of the conversion." + } + } + }, + "ForexHistoricTrades": { + "type": "object", + "properties": { + "day": { + "type": "string", + "format": "date", + "description": "The date that was evaluated from the request." + }, + "map": { + "type": "object", + "description": "A map for shortened result keys." + }, + "msLatency": { + "type": "integer", + "description": "The milliseconds of latency for the query results." + }, + "pair": { + "type": "string", + "description": "The currency pair that was evaluated from the request." + }, + "ticks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + } + } + } + }, + "ForexPairLastQuote": { + "type": "object", + "properties": { + "last": { + "type": "object", + "properties": { + "ask": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "bid": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "exchange": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "timestamp": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + } + } + }, + "ForexPreviousClose": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "T": { + "type": "string", + "description": "The exchange symbol that this item is traded under." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + } + } + } + } + } + }, + "CryptoExchange": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "type": { + "type": "string", + "description": "Type of exchange feed" + }, + "market": { + "type": "string", + "description": "Market data type this exchange contains ( crypto only currently )" + }, + "name": { + "type": "string", + "description": "Name of the exchange" + }, + "url": { + "type": "string", + "description": "URL of this exchange" + } + } + } + }, + "CryptoTradeExchange": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "CryptoHistoricTrades": { + "type": "object", + "properties": { + "day": { + "type": "string", + "format": "date", + "description": "The date that was evaluated from the request." + }, + "map": { + "type": "object", + "description": "A map for shortened result keys." + }, + "msLatency": { + "type": "integer", + "description": "The milliseconds of latency for the query results." + }, + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + }, + "ticks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + } + } + } + } + } + }, + "CryptoLastTrade": { + "type": "object", + "properties": { + "last": { + "type": "object", + "properties": { + "conditions": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "exchange": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "price": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "size": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "timestamp": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + } + } + }, + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + } + } + }, + "CryptoOpenClose": { + "type": "object", + "properties": { + "symbol": { + "type": "string", + "description": "The symbol pair that was evaluated from the request." + }, + "isUTC": { + "type": "boolean", + "description": "Whether or not the timestamps are in UTC timezone." + }, + "day": { + "type": "string", + "format": "date", + "description": "The date requested." + }, + "open": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "close": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "openTrades": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + } + } + } + }, + "closingTrades": { + "type": "array", + "items": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + } + } + } + } + } + }, + "CryptoTick": { + "type": "object", + "properties": { + "p": { + "type": "number", + "format": "double", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + }, + "s": { + "type": "number", + "format": "double", + "description": "The size of a trade (also known as volume).\n" + }, + "x": { + "type": "integer", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + }, + "c": { + "type": "array", + "description": "A list of condition codes.\n", + "items": { + "type": "integer", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + } + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "i": { + "type": "string", + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + } + } + } + }, + "responses": { + "NotFound": { + "description": "The specified resource was not found" + }, + "Conflict": { + "description": "Parameter is invalid or incorrect." + }, + "Unauthorized": { + "description": "Unauthorized - Check our API Key and account status" + }, + "DefaultError": { + "description": "Unexpected error" + } + }, + "parameters": { + "TickersQueryParam": { + "name": "tickers", + "in": "query", + "description": "A comma separated list of tickers to get snapshots for.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "GeneralTickerPathParam": { + "name": "ticker", + "in": "path", + "description": "The ticker symbol of the asset.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + "StocksTickerPathParam": { + "name": "stocksTicker", + "in": "path", + "description": "The ticker symbol of the stock/equity.", + "required": true, + "schema": { + "type": "string" + }, + "example": "AAPL" + }, + "OptionsTickerPathParam": { + "name": "optionsTicker", + "in": "path", + "description": "The ticker symbol of the options contract.", + "required": true, + "schema": { + "type": "string" + }, + "example": "O:TSLA210903C00700000" + }, + "ForexTickerPathParam": { + "name": "forexTicker", + "in": "path", + "description": "The ticker symbol of the currency pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "C:EURUSD" + }, + "CryptoTickerPathParam": { + "name": "cryptoTicker", + "in": "path", + "description": "The ticker symbol of the currency pair.", + "required": true, + "schema": { + "type": "string" + }, + "example": "X:BTCUSD" + }, + "AggregateMultiplier": { + "name": "multiplier", + "in": "path", + "description": "The size of the timespan multiplier.", + "required": true, + "schema": { + "type": "integer" + }, + "example": 1 + }, + "AggregateTimespan": { + "name": "timespan", + "in": "path", + "description": "The size of the time window.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ] + }, + "example": "day" + }, + "AggregateTimeFrom": { + "name": "from", + "in": "path", + "description": "The start of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + "AggregateTimeTo": { + "name": "to", + "in": "path", + "description": "The end of the aggregate time window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2021-07-22" + }, + "AggregateAdjusted": { + "name": "adjusted", + "in": "query", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + "AggregateSort": { + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" + ] + }, + "in": "query", + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc" + }, + "AggregateDate": { + "name": "date", + "in": "path", + "description": "The beginning date for the aggregate window.", + "required": true, + "schema": { + "type": "string" + }, + "example": "2020-10-14" + }, + "ReverseOrder": { + "name": "reverse", + "in": "query", + "description": "Reverse the order of the results.\n", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + "SnapshotDirection": { + "name": "direction", + "in": "path", + "description": "The direction of the snapshot results to return.\n", + "required": true, + "schema": { + "type": "string", + "enum": [ + "gainers", + "losers" + ] + }, + "example": "gainers" + }, + "LimitMax50000": { + "name": "limit", + "in": "query", + "description": "Limit the size of the response, max 50000 and default 5000.", + "required": false, + "schema": { + "type": "integer" + }, + "example": 10 + }, + "AggregateLimitMax50000": { + "name": "limit", + "in": "query", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "required": false, + "schema": { + "type": "integer" + }, + "example": 120 + }, + "LimitMax10000": { + "name": "limit", + "in": "query", + "description": "Limit the size of the response, max 10000.", + "required": false, + "schema": { + "type": "integer" + }, + "example": 100 + }, + "LimitNoMax": { + "name": "limit", + "in": "query", + "description": "Limit the number of results.\n", + "required": false, + "schema": { + "type": "integer" + }, + "example": 5 + } + }, + "securitySchemes": { + "apiKey": { + "type": "apiKey", + "name": "apiKey", + "in": "query" + } + } + }, + "security": [ + { + "apiKey": [] + } + ] +} diff --git a/.polygon/websocket.json b/.polygon/websocket.json new file mode 100644 index 00000000..ff1c87e9 --- /dev/null +++ b/.polygon/websocket.json @@ -0,0 +1,3284 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Polygon Websocket Spec", + "description": "The future of fintech.", + "version": "2.0.0" + }, + "servers": [ + { + "url": "wss://socket.polygon.io", + "description": "Real-time" + }, + { + "url": "wss://delayed.polygon.io", + "description": "Delayed" + } + ], + "x-polygon-order": { + "stocks": { + "market": [ + "/stocks/AM", + "/stocks/A", + "/stocks/T", + "/stocks/Q", + "/stocks/NOI", + "/stocks/LULD" + ] + }, + "options": { + "market": [ + "/options/AM", + "/options/A", + "/options/T", + "/options/Q" + ] + }, + "fx": { + "market": [ + "/forex/CA", + "/forex/C" + ] + }, + "crypto": { + "market": [ + "/crypto/XA", + "/crypto/XT", + "/crypto/XQ", + "/crypto/XL2" + ] + } + }, + "paths": { + "/stocks/T": { + "get": { + "summary": "Trades", + "description": "Stream real-time trades for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a trade event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "T" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "i": { + "type": "string", + "description": "The trade ID." + }, + "z": { + "type": "integer", + "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq).\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price." + }, + "s": { + "type": "integer", + "description": "The trade size." + }, + "c": { + "type": "array", + "description": "The trade conditions. See Conditions and Indicators\" for Polygon.io's trade conditions glossary.\n", + "items": { + "type": "integer", + "description": "The ID of the condition." + } + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + "example": { + "ev": "T", + "sym": "MSFT", + "x": 4, + "i": "12345", + "z": 3, + "p": 114.125, + "s": 100, + "c": [ + 0, + 12 + ], + "t": 1536036818784, + "q": 3681328 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/stocks/Q": { + "get": { + "summary": "Quotes", + "description": "Stream real-time quotes for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a quote event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "Q" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "bx": { + "type": "integer", + "description": "The bid exchange ID." + }, + "bp": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "bs": { + "type": "integer", + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." + }, + "ax": { + "type": "integer", + "description": "The ask exchange ID." + }, + "ap": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "as": { + "type": "integer", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + }, + "c": { + "type": "integer", + "description": "The condition." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "z": { + "type": "integer", + "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq)." + } + } + }, + "example": { + "ev": "Q", + "sym": "MSFT", + "bx": 4, + "bp": 114.125, + "bs": 100, + "ax": 7, + "ap": 114.128, + "as": 160, + "c": 0, + "t": 1536036818784, + "z": 3 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/stocks/A": { + "get": { + "summary": "Aggregates (Per Second)", + "description": "Stream real-time second aggregates for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a second aggregate event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "A" + ], + "description": "The event type." + } + } + } + ] + }, + "example": { + "ev": "A", + "sym": "SPCE", + "v": 200, + "av": 8642007, + "op": 25.66, + "vw": 25.3981, + "o": 25.39, + "c": 25.39, + "h": 25.39, + "l": 25.39, + "a": 25.3714, + "z": 50, + "s": 1610144868000, + "e": 1610144869000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/stocks/AM": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time minute aggregates for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a minute aggregate event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "AM" + ], + "description": "The event type." + } + } + } + ] + }, + "example": { + "ev": "AM", + "sym": "GTE", + "v": 4110, + "av": 9470157, + "op": 0.4372, + "vw": 0.4488, + "o": 0.4488, + "c": 0.4486, + "h": 0.4489, + "l": 0.4486, + "a": 0.4352, + "z": 685, + "s": 1610144640000, + "e": 1610144700000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/stocks/LULD": { + "get": { + "summary": "Limit-Up Limit-Down (LULD)", + "description": "Stream real-time LULD events for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a LULD event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "LULD" + ], + "description": "The event type." + }, + "T": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price." + }, + "i": { + "type": "array", + "description": "The Indicators.", + "items": { + "type": "integer" + } + }, + "z": { + "type": "integer", + "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq).\n" + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + "example": { + "ev": "LULD", + "T": "MSFT", + "h": 218.96, + "l": 198.11, + "i": [ + 21 + ], + "z": 3, + "t": 1601316752683746, + "q": 290317 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "limit-up-limit-down", + "description": "Limit-Up Limit-Down data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/stocks/NOI": { + "get": { + "summary": "Imbalances", + "description": "Stream real-time imbalance events for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for an imbalance event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "NOI" + ], + "description": "The event type." + }, + "T": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "at": { + "type": "integer", + "description": "The time that the auction is planned to take place in the format (hour x 100) + minutes in Eastern Standard Time, \nfor example 930 would be 9:30 am EST, and 1600 would be 4:00 pm EST.\n" + }, + "a": { + "type": "string", + "description": "The auction type.\n`O` - Early Opening Auction (non-NYSE only)\n`M` - Core Opening Auction\n`H` - Reopening Auction (Halt Resume)\n`C` - Closing Auction\n`P` - Extreme Closing Imbalance (NYSE only)\n`R` - Regulatory Closing Imbalance (NYSE only)\n" + }, + "i": { + "type": "integer", + "description": "The symbol sequence." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "o": { + "type": "integer", + "description": "The imbalance quantity." + }, + "p": { + "type": "integer", + "description": "The paired quantity." + }, + "b": { + "type": "number", + "format": "double", + "description": "The book clearing price." + } + } + }, + "example": { + "ev": "NOI", + "T": "NTEST.Q", + "t": 1601318039223013600, + "at": 930, + "a": "M", + "i": 44, + "x": 10, + "o": 480, + "p": 440, + "b": 25.03 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "imbalances", + "description": "Imbalances data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/options/T": { + "get": { + "summary": "Trades", + "description": "Stream real-time trades for a given option contract.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an option contract or use * to subscribe to all option contracts.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a trade event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "T" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "p": { + "type": "number", + "format": "double", + "description": "The price." + }, + "s": { + "type": "integer", + "description": "The trade size." + }, + "c": { + "type": "array", + "description": "The trade conditions", + "items": { + "type": "integer", + "description": "The ID of the condition." + } + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which trade events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11)." + } + } + }, + "example": { + "ev": "T", + "sym": "O:AMC210827C00037000", + "x": 65, + "p": 1.54, + "s": 1, + "c": [ + 233 + ], + "t": 1629820676333, + "q": 651921857 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/options/Q": { + "get": { + "summary": "Quotes", + "description": "Stream real-time quotes for a given option contract.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an option contract. You're only allowed to subscribe to 1,000 option contracts per connection.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "O:SPY241220P00720000" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a trade event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "Q" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "bx": { + "type": "integer", + "description": "The bid exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "ax": { + "type": "integer", + "description": "The ask exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "bp": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "ap": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "bs": { + "type": "integer", + "description": "The bid size." + }, + "as": { + "type": "integer", + "description": "The ask size." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which trade events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11)." + } + } + }, + "example": { + "ev": "Q", + "sym": "O:SPY241220P00720000", + "bx": 302, + "ax": 302, + "bp": 9.71, + "ap": 9.81, + "bs": 17, + "as": 24, + "t": 1644506128351, + "q": 844090872 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/options/A": { + "get": { + "summary": "Aggregates (Per Second)", + "description": "Stream real-time second aggregates for a given option contract.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an option contract or use * to subscribe to all option contracts.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a second aggregate event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "A" + ], + "description": "The event type." + } + } + } + ] + }, + "example": { + "ev": "AM", + "sym": "O:ONEM220121C00025000", + "v": 2, + "av": 8, + "op": 2.2, + "vw": 2.05, + "o": 2.05, + "c": 2.05, + "h": 2.05, + "l": 2.05, + "a": 2.1312, + "z": 2, + "s": 1632419640000, + "e": 1632419700000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/options/AM": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time minute aggregates for a given option contract.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an option contract or use * to subscribe to all option contracts.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a minute aggregate event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "AM" + ], + "description": "The event type." + } + } + } + ] + }, + "example": { + "ev": "AM", + "sym": "O:ONEM220121C00025000", + "v": 2, + "av": 8, + "op": 2.2, + "vw": 2.05, + "o": 2.05, + "c": 2.05, + "h": 2.05, + "l": 2.05, + "a": 2.1312, + "z": 2, + "s": 1632419640000, + "e": 1632419700000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/forex/C": { + "get": { + "summary": "Quotes", + "description": "Stream real-time forex quotes for a given forex pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a forex quote event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "type": "string", + "description": "The event type." + }, + "p": { + "type": "string", + "description": "The current pair." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "C" + ], + "description": "The event type." + } + } + } + ] + }, + "example": { + "ev": "C", + "p": "USD/CNH", + "x": "44", + "a": 6.83366, + "b": 6.83363, + "t": 1536036818784 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/forex/CA": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time per-minute forex aggregates for a given forex pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a forex per-minute aggregate event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "CA" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The currency pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + } + } + }, + "example": { + "ev": "CA", + "pair": "USD/EUR", + "o": 0.8687, + "c": 0.86889, + "h": 0.86889, + "l": 0.8686, + "v": 20, + "s": 1539145740000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/crypto/XT": { + "get": { + "summary": "Trades", + "description": "Stream real-time crypto trades for a given crypto pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a crypto trade event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XT" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "p": { + "type": "number", + "format": "double", + "description": "The price." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "s": { + "type": "number", + "format": "double", + "description": "The size." + }, + "c": { + "type": "array", + "description": "The conditions.\n0 (or empty array): empty\n1: sellside\n2: buyside\n", + "items": { + "type": "integer", + "description": "The ID of the condition." + } + }, + "i": { + "type": "integer", + "description": "The ID of the trade (optional)." + }, + "x": { + "type": "integer", + "description": "The crypto exchange ID. See Exchanges for a list of exchanges and their IDs.\n" + }, + "r": { + "type": "integer", + "description": "The timestamp that the tick was received by Polygon." + } + } + }, + "example": { + "ev": "XT", + "pair": "BTC-USD", + "p": 33021.9, + "t": 1610462007425, + "s": 0.01616617, + "c": [ + 2 + ], + "i": 14272084, + "x": 3, + "r": 1610462007576 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "trades", + "description": "Trade data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/crypto/XQ": { + "get": { + "summary": "Quotes", + "description": "Stream real-time crypto quotes for a given crypto pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a crypto quote event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XQ" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "bp": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "bs": { + "type": "number", + "format": "double", + "description": "The bid size." + }, + "ap": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "as": { + "type": "number", + "format": "double", + "description": "The ask size." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "x": { + "type": "integer", + "description": "The crypto exchange ID. See Exchanges for a list of exchanges and their IDs.\n" + }, + "r": { + "type": "integer", + "description": "The timestamp that the tick was received by Polygon." + } + } + }, + "example": { + "ev": "XQ", + "pair": "BTC-USD", + "bp": 33052.79, + "bs": 0.48, + "ap": 33073.19, + "as": 0.601, + "t": 1610462411115, + "x": 1, + "r": 1610462411128 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/crypto/XL2": { + "get": { + "summary": "Level 2 Book", + "description": "Stream real-time level 2 book data for a given crypto pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a crypto level 2 book event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XL2" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "b": { + "type": "array", + "description": "An array of bid prices with a maximum depth of 100.", + "items": { + "type": "array", + "description": "An array where the first item is bid price and the second item is size.", + "items": { + "type": "number", + "format": "double" + } + } + }, + "a": { + "type": "array", + "description": "An array of ask prices with a maximum depth of 100.", + "items": { + "type": "array", + "description": "An array where the first item is ask price and the second item is size.", + "items": { + "type": "number", + "format": "double" + } + } + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "x": { + "type": "integer", + "description": "The crypto exchange ID. See Exchanges for a list of exchanges and their IDs.\n" + }, + "r": { + "type": "integer", + "description": "The timestamp that the tick was received by Polygon." + } + } + }, + "example": { + "ev": "XL2", + "pair": "BTC-USD", + "t": 1610462411115, + "r": 1610462411128, + "x": 1, + "b": [ + [ + 33712.71, + 0.18635 + ], + [ + 33712.7, + 0.134 + ] + ], + "a": [ + [ + 33718.23, + 3.5527483 + ], + [ + 33718.24, + 0.1 + ] + ] + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "nbbo", + "description": "NBBO data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/crypto/XA": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time per-minute crypto aggregates for a given crypto pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a crypto per-minute aggregate event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XA" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + } + } + }, + "example": { + "ev": "XA", + "pair": "BCD-USD", + "v": 951.6112, + "vw": 0.7756, + "z": 73, + "o": 0.772, + "c": 0.784, + "h": 0.784, + "l": 0.771, + "s": 1610463240000, + "e": 1610463300000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + } + }, + "components": { + "schemas": { + "Event": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "status" + ], + "description": "A constant denoting that this message describes a status event." + }, + "message": { + "type": "string", + "description": "The descriptive message explaining this status event." + }, + "status": { + "type": "string" + } + } + }, + "ConnectEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "enum": [ + "status" + ], + "description": "A constant denoting that this message describes a status event." + }, + "message": { + "type": "string", + "description": "The descriptive message explaining this status event." + }, + "status": { + "type": "string" + } + } + }, + { + "title": "connect", + "properties": { + "status": { + "enum": [ + "success" + ], + "description": "The status indicating that the connection event was successful." + } + }, + "example": "{\"ev\":\"status\",\"status\":\"success\",\"message\":\"Connected Successfully\"}" + } + ] + }, + "DisconnectEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "enum": [ + "status" + ], + "description": "A constant denoting that this message describes a status event." + }, + "message": { + "type": "string", + "description": "The descriptive message explaining this status event." + }, + "status": { + "type": "string" + } + } + }, + { + "title": "disconnect", + "properties": { + "status": { + "enum": [ + "max_connections", + "force_disconnect", + "slow_consumer" + ], + "description": "The event that caused the WebSocket to disconnect." + } + }, + "example": "{\"ev\":\"status\",\"status\":\"max_connections\",\"message\":\"Maximum number of connections exceeded.\"}" + } + ] + }, + "AuthEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "enum": [ + "status" + ], + "description": "A constant denoting that this message describes a status event." + }, + "message": { + "type": "string", + "description": "The descriptive message explaining this status event." + }, + "status": { + "type": "string" + } + } + }, + { + "title": "auth", + "properties": { + "status": { + "enum": [ + "auth_success", + "auth_timeout", + "auth_failed" + ], + "description": "The result of the authentication action." + } + }, + "example": "{\"ev\":\"status\",\"status\":\"auth_success\",\"message\":\"authenticated\"}" + } + ] + }, + "SubscribeEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "enum": [ + "status" + ], + "description": "A constant denoting that this message describes a status event." + }, + "message": { + "type": "string", + "description": "The descriptive message explaining this status event." + }, + "status": { + "type": "string" + } + } + }, + { + "title": "subscribe", + "properties": { + "status": { + "enum": [ + "success", + "auth_required", + "error" + ], + "description": "The result of a subscribe action." + } + }, + "example": "{\"ev\":\"status\",\"status\":\"success\",\"message\":\"subscribed to: T.MSFT\"}" + } + ] + }, + "UnsubscribeEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "enum": [ + "status" + ], + "description": "A constant denoting that this message describes a status event." + }, + "message": { + "type": "string", + "description": "The descriptive message explaining this status event." + }, + "status": { + "type": "string" + } + } + }, + { + "title": "unsubscribe", + "properties": { + "status": { + "enum": [ + "success" + ], + "description": "The result of an unsubscribe action." + } + }, + "example": "{\"ev\":\"status\",\"status\":\"success\",\"message\":\"unsubscribed to: T.MSFT\"}" + } + ] + }, + "Timestamp": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "AggsOpen": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "AggsClose": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "AggsHigh": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "AggsLow": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "AggsVolume": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "AggsStartTime": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "AggsEndTime": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + }, + "StockTradeEvent": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "T" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "i": { + "type": "string", + "description": "The trade ID." + }, + "z": { + "type": "integer", + "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq).\n" + }, + "p": { + "type": "number", + "format": "double", + "description": "The price." + }, + "s": { + "type": "integer", + "description": "The trade size." + }, + "c": { + "type": "array", + "description": "The trade conditions. See Conditions and Indicators\" for Polygon.io's trade conditions glossary.\n", + "items": { + "type": "integer", + "description": "The ID of the condition." + } + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + "StockQuoteEvent": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "Q" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "bx": { + "type": "integer", + "description": "The bid exchange ID." + }, + "bp": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "bs": { + "type": "integer", + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." + }, + "ax": { + "type": "integer", + "description": "The ask exchange ID." + }, + "ap": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "as": { + "type": "integer", + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + }, + "c": { + "type": "integer", + "description": "The condition." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "z": { + "type": "integer", + "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq)." + } + } + }, + "StockBaseAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + "StockSecondAggregateEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "A" + ], + "description": "The event type." + } + } + } + ] + }, + "StockMinuteAggregateEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "AM" + ], + "description": "The event type." + } + } + } + ] + }, + "StockLULDEvent": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "LULD" + ], + "description": "The event type." + }, + "T": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price." + }, + "i": { + "type": "array", + "description": "The Indicators.", + "items": { + "type": "integer" + } + }, + "z": { + "type": "integer", + "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq).\n" + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + } + } + }, + "StockImbalanceEvent": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "NOI" + ], + "description": "The event type." + }, + "T": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "at": { + "type": "integer", + "description": "The time that the auction is planned to take place in the format (hour x 100) + minutes in Eastern Standard Time, \nfor example 930 would be 9:30 am EST, and 1600 would be 4:00 pm EST.\n" + }, + "a": { + "type": "string", + "description": "The auction type.\n`O` - Early Opening Auction (non-NYSE only)\n`M` - Core Opening Auction\n`H` - Reopening Auction (Halt Resume)\n`C` - Closing Auction\n`P` - Extreme Closing Imbalance (NYSE only)\n`R` - Regulatory Closing Imbalance (NYSE only)\n" + }, + "i": { + "type": "integer", + "description": "The symbol sequence." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "o": { + "type": "integer", + "description": "The imbalance quantity." + }, + "p": { + "type": "integer", + "description": "The paired quantity." + }, + "b": { + "type": "number", + "format": "double", + "description": "The book clearing price." + } + } + }, + "StockSymbol": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "StockTape": { + "type": "integer", + "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq).\n" + }, + "StockExchangeID": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "OptionTradeEvent": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "T" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "p": { + "type": "number", + "format": "double", + "description": "The price." + }, + "s": { + "type": "integer", + "description": "The trade size." + }, + "c": { + "type": "array", + "description": "The trade conditions", + "items": { + "type": "integer", + "description": "The ID of the condition." + } + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which trade events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11)." + } + } + }, + "OptionQuoteEvent": { + "type": "object", + "properties": { + "ev": { + "enum": [ + "Q" + ], + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "bx": { + "type": "integer", + "description": "The bid exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "ax": { + "type": "integer", + "description": "The ask exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "bp": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "ap": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "bs": { + "type": "integer", + "description": "The bid size." + }, + "as": { + "type": "integer", + "description": "The ask size." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which trade events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11)." + } + } + }, + "OptionBaseAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + "OptionSecondAggregateEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "A" + ], + "description": "The event type." + } + } + } + ] + }, + "OptionMinuteAggregateEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The tick's volume weighted average price." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening tick price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing tick price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest tick price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest tick price for this aggregate window." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "AM" + ], + "description": "The event type." + } + } + } + ] + }, + "OptionSymbol": { + "type": "string", + "description": "The ticker symbol for the given option contract." + }, + "ForexBaseQuoteEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "description": "The event type." + }, + "p": { + "type": "string", + "description": "The current pair." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + } + } + }, + "ForexQuoteEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "type": "string", + "description": "The event type." + }, + "p": { + "type": "string", + "description": "The current pair." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "C" + ], + "description": "The event type." + } + } + } + ] + }, + "ForexAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "CA" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The currency pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + } + } + }, + "CryptoQuoteEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XQ" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "bp": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "bs": { + "type": "number", + "format": "double", + "description": "The bid size." + }, + "ap": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "as": { + "type": "number", + "format": "double", + "description": "The ask size." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "x": { + "type": "integer", + "description": "The crypto exchange ID. See Exchanges for a list of exchanges and their IDs.\n" + }, + "r": { + "type": "integer", + "description": "The timestamp that the tick was received by Polygon." + } + } + }, + "CryptoTradeEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XT" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "p": { + "type": "number", + "format": "double", + "description": "The price." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "s": { + "type": "number", + "format": "double", + "description": "The size." + }, + "c": { + "type": "array", + "description": "The conditions.\n0 (or empty array): empty\n1: sellside\n2: buyside\n", + "items": { + "type": "integer", + "description": "The ID of the condition." + } + }, + "i": { + "type": "integer", + "description": "The ID of the trade (optional)." + }, + "x": { + "type": "integer", + "description": "The crypto exchange ID. See Exchanges for a list of exchanges and their IDs.\n" + }, + "r": { + "type": "integer", + "description": "The timestamp that the tick was received by Polygon." + } + } + }, + "CryptoAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XA" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + } + } + }, + "CryptoL2BookEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XL2" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "b": { + "type": "array", + "description": "An array of bid prices with a maximum depth of 100.", + "items": { + "type": "array", + "description": "An array where the first item is bid price and the second item is size.", + "items": { + "type": "number", + "format": "double" + } + } + }, + "a": { + "type": "array", + "description": "An array of ask prices with a maximum depth of 100.", + "items": { + "type": "array", + "description": "An array where the first item is ask price and the second item is size.", + "items": { + "type": "number", + "format": "double" + } + } + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + }, + "x": { + "type": "integer", + "description": "The crypto exchange ID. See Exchanges for a list of exchanges and their IDs.\n" + }, + "r": { + "type": "integer", + "description": "The timestamp that the tick was received by Polygon." + } + } + }, + "CryptoPair": { + "type": "string", + "description": "The crypto pair." + }, + "CryptoExchangeID": { + "type": "integer", + "description": "The crypto exchange ID. See Exchanges for a list of exchanges and their IDs.\n" + }, + "CryptoReceivedTimestamp": { + "type": "integer", + "description": "The timestamp that the tick was received by Polygon." + } + }, + "parameters": { + "StocksTickerParam": { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + }, + "OptionsTickerParam": { + "name": "ticker", + "in": "query", + "description": "Specify an option contract or use * to subscribe to all option contracts.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "*" + }, + "OptionsTickerWithoutWildcardParam": { + "name": "ticker", + "in": "query", + "description": "Specify an option contract. You're only allowed to subscribe to 1,000 option contracts per connection.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "O:SPY241220P00720000" + }, + "ForexTickerParam": { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + }, + "CryptoTickerParam": { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + } + } +} \ No newline at end of file From 53a968c29147833fac29889c2ca382f19c8bd9c1 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 18 May 2022 13:19:36 -0400 Subject: [PATCH 090/448] lowercase vx (#191) * lowercase vx * docs --- docs/source/vX.rst | 4 ++-- polygon/rest/__init__.py | 2 +- test_rest/test_financials.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/vX.rst b/docs/source/vX.rst index 17bd9f5f..69a25311 100644 --- a/docs/source/vX.rst +++ b/docs/source/vX.rst @@ -4,7 +4,7 @@ vX ========== .. note:: - To call vX methods, use the vX class member on RESTClient. + To call vX methods, use the vx class member on RESTClient. For example, :code:`financials = RESTClient().vx.list_stock_financials()` @@ -16,4 +16,4 @@ List stock financials .. automethod:: polygon.rest.VXClient.list_stock_financials -.. _Stocks financials vX: https://polygon.io/docs/stocks/get_vx_reference_financials \ No newline at end of file +.. _Stocks financials vX: https://polygon.io/docs/stocks/get_vx_reference_financials diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 5a2e4a3c..13a29d6d 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -52,7 +52,7 @@ def __init__( base=base, verbose=verbose, ) - self.vX = VXClient( + self.vx = VXClient( api_key=api_key, connect_timeout=connect_timeout, read_timeout=read_timeout, diff --git a/test_rest/test_financials.py b/test_rest/test_financials.py index 7a00a9db..f5196212 100644 --- a/test_rest/test_financials.py +++ b/test_rest/test_financials.py @@ -22,7 +22,7 @@ class FinancialsTest(BaseTest): def test_list_stock_financials(self): - financials = [f for f in self.c.vX.list_stock_financials()] + financials = [f for f in self.c.vx.list_stock_financials()] expected = [ StockFinancial( cik="0001413447", From e90bc5817bf42629ef610a7790d732a7c90cbf25 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 18 May 2022 13:51:05 -0400 Subject: [PATCH 091/448] add module __version__ (#190) --- polygon/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/polygon/__init__.py b/polygon/__init__.py index 39e6f09c..bd1c56d4 100644 --- a/polygon/__init__.py +++ b/polygon/__init__.py @@ -1,3 +1,5 @@ from .rest import RESTClient -from .rest.base import NoResultsError +from .rest.base import NoResultsError, version from .websocket import WebSocketClient, AuthError + +__version__ = version From d85b5a4804e3c04013f4f476a8ee9bda71b3f35f Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 19 May 2022 11:54:45 -0400 Subject: [PATCH 092/448] Versioning guide (#192) * copy versioning guide from Go * format and add para --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 9df0bcc7..f785f8dc 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,21 @@ but we're open to bug reports and feature requests. Or if you have more general feedback, feel free to reach out on our [Slack channel](https://polygon.io/contact). +## Release planning +This client will attempt to follow the release cadence of our API. +When endpoints are deprecated and newer versions are added, the client will +maintain two methods in a backwards compatible way +(e.g. `list_trades` and `list_trades_v4(...)`). +When deprecated endpoints are removed from the API, we'll rename the versioned +method (e.g. `list_trades_v4(...)` -> `list_trades(...)`), remove the old method, +and release a new major version of the client. + +The goal is to give users ample time to upgrade to newer versions of our API +_before_ we bump the major version of the client, and in general, we'll try to +bundle breaking changes like this to avoid frequent major version bumps. + +Exceptions to this are: + - Methods under `client.vx`. These are expiremental. + - Methods that start with `_*`. We use these internally. + - Type annotations. We may modify these based on our JSON responses. + - We may add model fields. From 4298d2db204fb3fa6deddbfb9a2b90f9d8e05d5b Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 19 May 2022 12:06:44 -0400 Subject: [PATCH 093/448] Fix typos (#193) * h1 -> h2 * typo * md plz --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f785f8dc..233bebdd 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Requires Python >= 3.8. See the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) section in our docs or view the [examples](./examples) directory. -# Contributing +## Contributing For now, we're generally not accepting pull requests from outside contributors but we're open to bug reports and feature requests. Or if you have more general @@ -36,7 +36,8 @@ _before_ we bump the major version of the client, and in general, we'll try to bundle breaking changes like this to avoid frequent major version bumps. Exceptions to this are: - - Methods under `client.vx`. These are expiremental. - - Methods that start with `_*`. We use these internally. - - Type annotations. We may modify these based on our JSON responses. - - We may add model fields. + +- Methods under `client.vx`. These are expiremental. +- Methods that start with `_*`. We use these internally. +- Type annotations. We may modify these based on our JSON responses. +- We may add model fields. From 23965fe41cd15ff9fd37942c454f50341e62be02 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Thu, 19 May 2022 13:48:08 -0400 Subject: [PATCH 094/448] add codeql workflow (#194) --- .github/workflows/codeql.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..313c2716 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,33 @@ +name: codeql +on: + push: + branches: + - master + pull_request: + branches: + - master + schedule: + - cron: '33 12 * * 3' +jobs: + analyze: + name: analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + strategy: + fail-fast: false + matrix: + language: [ 'python' ] + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 From aa4f2097bc700ec0c320e81030ca1aefcd94807c Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Thu, 19 May 2022 16:49:20 -0400 Subject: [PATCH 095/448] remove newline (#195) --- .polygon/rest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 9737c376..2127159f 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -13036,4 +13036,4 @@ "apiKey": [] } ] -} +} \ No newline at end of file From df68874445d5ca70825b79c2a2db73ae612c6508 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Fri, 20 May 2022 10:23:36 -0400 Subject: [PATCH 096/448] string replacement issue fix (#197) --- polygon/rest/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 6442215d..fc300f19 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -138,7 +138,7 @@ def _get_params( or argname.endswith("_gt") or argname.endswith("_gte") ): - argname = argname.replace("_", ".") + argname = ".".join(argname.rsplit("_", 1)) params[argname] = val return params From ac2cd12393b5b4083e8629b2cf43c03fc789b472 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Fri, 20 May 2022 14:54:57 -0400 Subject: [PATCH 097/448] add newlines back (#198) --- .polygon/rest.json | 2 +- .polygon/websocket.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 2127159f..9737c376 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -13036,4 +13036,4 @@ "apiKey": [] } ] -} \ No newline at end of file +} diff --git a/.polygon/websocket.json b/.polygon/websocket.json index ff1c87e9..bca2726b 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -3281,4 +3281,4 @@ } } } -} \ No newline at end of file +} From 4dff741af2376abb34678c3865d58f2f0b530ccf Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 23 May 2022 11:26:52 -0400 Subject: [PATCH 098/448] make params optional (#199) --- polygon/rest/quotes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index c39b6665..0169321f 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -105,7 +105,7 @@ def get_real_time_currency_conversion( to: str, amount: float, precision: Union[int, Precision] = 2, - params: Dict[str, Any] = None, + params: Optional[Dict[str, Any]] = None, raw: bool = False, ) -> Union[RealTimeCurrencyConversion, HTTPResponse]: """ From 78397290fcb52c3f107bbcdd97a0628536440521 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 23 May 2022 11:48:00 -0400 Subject: [PATCH 099/448] Add darcy as codeowner (#200) --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d6b33d22..98f80ad0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1,2 @@ * @clickingbuttons +* @Darcy-Linde From 6e38b65e94d8644af2c0f9f40e77811344a35d0d Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Mon, 23 May 2022 13:29:42 -0400 Subject: [PATCH 100/448] update pip command (#203) --- README.md | 2 +- docs/source/Getting-Started.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 233bebdd..d9e2a0bc 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Python client for the [Polygon.io API](https://polygon.io). ## Install -`pip install polygon-api-client~=1.0.0b` +`pip install polygon-api-client` Requires Python >= 3.8. diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index 5acf2401..15b9321e 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -8,7 +8,7 @@ Requirements: .. code-block:: shell - pip install polygon-api-client~=1.0.0b + pip install polygon-api-client HTTP client usage ----------------- From bd977fc506c8bdc87c6971a371e3963199f08ef9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 14:05:37 -0400 Subject: [PATCH 101/448] Bump types-setuptools from 57.4.14 to 57.4.15 (#201) Bumps [types-setuptools](https://github.com/python/typeshed) from 57.4.14 to 57.4.15. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Vera Harless <53271741+morningvera@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index dbeafcc9..30eeaead 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "57.4.14" +version = "57.4.15" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "a2d1b2db53fe389ef468d1f961725af60fd4832b4430000cc7969ef231cc8c38" +content-hash = "bb32eddce8d0d3127c3f363deeb9e3efda98ff6f5ac4ea269358e88e5b97b48d" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.2-py3-none-any.whl", hash = "sha256:d8d61752071a10747f441c169967e31d43c1875d851973f4f9851c1cb8c5ed9d"}, ] types-setuptools = [ - {file = "types-setuptools-57.4.14.tar.gz", hash = "sha256:df02fe1dd244f58cf4e67cfc3d0a97930a2d61a72dd89f21d81c71017cd83f9a"}, - {file = "types_setuptools-57.4.14-py3-none-any.whl", hash = "sha256:828f7e7e51e157876f47c80518b23ba0c3c36aa8081efd39d5d39f393938aec9"}, + {file = "types-setuptools-57.4.15.tar.gz", hash = "sha256:650528ce803586029d7f153f32aed2dbaa6bb2888b233334af80d7ba63ed3c87"}, + {file = "types_setuptools-57.4.15-py3-none-any.whl", hash = "sha256:f8f19876f714a440c4badef1b91b0648604ed443e703d29d44cd36ac93b01a77"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.14.tar.gz", hash = "sha256:2a2578e4b36341ccd240b00fccda9826988ff0589a44ba4a664bbd69ef348d27"}, diff --git a/pyproject.toml b/pyproject.toml index add9cd68..4f1e2410 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" types-certifi = "^2021.10.8" -types-setuptools = "^57.4.14" +types-setuptools = "^57.4.15" pook = "^1.0.2" [build-system] From f1c31b5dc712f824cfc50f6758db28b030c431a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 19:50:44 +0000 Subject: [PATCH 102/448] Bump certifi from 2021.10.8 to 2022.5.18.1 (#202) Bumps [certifi](https://github.com/certifi/python-certifi) from 2021.10.8 to 2022.5.18.1. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2021.10.08...2022.05.18.1) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Vera Harless <53271741+morningvera@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 30eeaead..bf26e8da 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,11 +55,11 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2021.10.8" +version = "2022.5.18.1" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "charset-normalizer" @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "bb32eddce8d0d3127c3f363deeb9e3efda98ff6f5ac4ea269358e88e5b97b48d" +content-hash = "0cec28d757d5e6165bb2a3171f69af5e03410115f05bc0b46b13af7efcfe15f9" [metadata.files] alabaster = [ @@ -605,8 +605,8 @@ black = [ {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, ] certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, + {file = "certifi-2022.5.18.1-py3-none-any.whl", hash = "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"}, + {file = "certifi-2022.5.18.1.tar.gz", hash = "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7"}, ] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, diff --git a/pyproject.toml b/pyproject.toml index 4f1e2410..83b7f21b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ packages = [ python = "^3.8" urllib3 = "^1.26.9" websockets = "^10.3" -certifi = "^2021.10.8" +certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.3.0" From ebeefbae3d925e9903592c954e876e70c0af684c Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Tue, 24 May 2022 15:36:21 -0400 Subject: [PATCH 103/448] Specific exceptions (#204) * add more exceptions * no breaking changes * update docs * alphabetize * fix comment * lint --- docs/source/Exceptions.rst | 14 +++++++++++--- polygon/__init__.py | 5 +++-- polygon/exceptions.py | 22 ++++++++++++++++++++++ polygon/rest/base.py | 9 +++------ polygon/websocket/__init__.py | 7 ++----- 5 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 polygon/exceptions.py diff --git a/docs/source/Exceptions.rst b/docs/source/Exceptions.rst index c33a122b..a57f633b 100644 --- a/docs/source/Exceptions.rst +++ b/docs/source/Exceptions.rst @@ -6,13 +6,21 @@ Exceptions ============================================================== AuthError ============================================================== -.. autoclass:: polygon.websocket.__init__.AuthError +.. autoclass:: polygon.exceptions.AuthError + :members: + :undoc-members: + +============================================================== +BadResponse +============================================================== +.. autoclass:: polygon.exceptions.BadResponse :members: :undoc-members: ============================================================== NoResultsError ============================================================== -.. autoclass:: polygon.rest.base.NoResultsError +.. autoclass:: polygon.exceptions.NoResultsError :members: - :undoc-members: \ No newline at end of file + :undoc-members: + diff --git a/polygon/__init__.py b/polygon/__init__.py index bd1c56d4..da6c5136 100644 --- a/polygon/__init__.py +++ b/polygon/__init__.py @@ -1,5 +1,6 @@ from .rest import RESTClient -from .rest.base import NoResultsError, version -from .websocket import WebSocketClient, AuthError +from .rest.base import version +from .websocket import WebSocketClient +from .exceptions import * __version__ = version diff --git a/polygon/exceptions.py b/polygon/exceptions.py new file mode 100644 index 00000000..7246108c --- /dev/null +++ b/polygon/exceptions.py @@ -0,0 +1,22 @@ +class AuthError(Exception): + """ + Empty or invalid API key + """ + + pass + + +class BadResponse(Exception): + """ + Non-200 response from API + """ + + pass + + +class NoResultsError(Exception): + """ + Missing results key + """ + + pass diff --git a/polygon/rest/base.py b/polygon/rest/base.py index fc300f19..fe194469 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -8,6 +8,7 @@ import pkg_resources # part of setuptools from ..logging import get_logger import logging +from ..exceptions import AuthError, BadResponse, NoResultsError logger = get_logger("RESTClient") version = "unknown" @@ -17,10 +18,6 @@ pass -class NoResultsError(Exception): - pass - - class BaseClient: def __init__( self, @@ -33,7 +30,7 @@ def __init__( verbose: bool, ): if api_key is None: - raise Exception( + raise AuthError( f"Must specify env var POLYGON_API_KEY or pass api_key in constructor" ) self.API_KEY = api_key @@ -78,7 +75,7 @@ def _get( ) if resp.status != 200: - raise Exception(resp.data.decode("utf-8")) + raise BadResponse(resp.data.decode("utf-8")) if raw: return resp diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 017a9773..b2eab462 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -11,15 +11,12 @@ from websockets.exceptions import ConnectionClosedOK, ConnectionClosedError from ..logging import get_logger import logging +from ..exceptions import AuthError env_key = "POLYGON_API_KEY" logger = get_logger("WebSocketClient") -class AuthError(Exception): - pass - - class WebSocketClient: def __init__( self, @@ -45,7 +42,7 @@ def __init__( :return: A client. """ if api_key is None: - raise Exception( + raise AuthError( f"Must specify env var {env_key} or pass api_key in constructor" ) self.api_key = api_key From db3deedcb0c2f3076d5e6fe6139bbb520121447f Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 25 May 2022 14:09:16 -0400 Subject: [PATCH 104/448] update version string (#205) --- polygon/rest/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index fe194469..8afbd330 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -42,7 +42,7 @@ def __init__( num_pools=num_pools, headers={ "Authorization": "Bearer " + self.API_KEY, - "User-Agent": "Python client " + version, + "User-Agent": f"Polygon.io PythonClient/{version}", }, ca_certs=certifi.where(), cert_reqs="CERT_REQUIRED", From 58200205af3cd4ba60fcf23466dc79660ac8a0d2 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Wed, 25 May 2022 14:18:10 -0400 Subject: [PATCH 105/448] Fix broken from_dict methods (#206) * from_dict should use camelCase in these instances * update tests to reflect from_dict change Co-authored-by: Darcy Linde <{47221647+Darcy-Linde@users.noreply.github.com}> --- polygon/rest/models/markets.py | 6 +- polygon/rest/models/snapshot.py | 18 +++--- test_rest/test_markets.py | 6 +- test_rest/test_snapshots.py | 102 ++++++++++++++++++++++++++++---- 4 files changed, 105 insertions(+), 27 deletions(-) diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 0ef769be..541fec88 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -53,14 +53,14 @@ class MarketStatus: @staticmethod def from_dict(d): return MarketStatus( - after_hours=d.get("after_hours", None), + after_hours=d.get("afterHours", None), currencies=None if "currencies" not in d else MarketCurrencies.from_dict(d["currencies"]), - early_hours=d.get("early_hours", None), + early_hours=d.get("earlyHours", None), exchanges=None if "exchanges" not in d else MarketExchanges.from_dict(d["exchanges"]), market=d.get("market", None), - server_time=d.get("server_time", None), + server_time=d.get("serverTime", None), ) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 072b8421..6e4bdbd4 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -47,16 +47,16 @@ def from_dict(d): return TickerSnapshot( day=None if "day" not in d else Agg.from_dict(d["day"]), last_quote=None - if "last_quote" not in d - else LastQuote.from_dict(d["last_quote"]), + if "lastQuote" not in d + else LastQuote.from_dict(d["lastQuote"]), last_trade=None - if "last_trade" not in d - else LastTrade.from_dict(d["last_trade"]), + if "lastTrade" not in d + else LastTrade.from_dict(d["lastTrade"]), min=None if "min" not in d else MinuteSnapshot.from_dict(d["min"]), - prev_day=None if "prev_day" not in d else Agg.from_dict(d["prev_day"]), + prev_day=None if "prevDay" not in d else Agg.from_dict(d["prevDay"]), ticker=d.get("ticker", None), - todays_change=d.get("todays_change", None), - todays_change_percent=d.get("todays_change_percent", None), + todays_change=d.get("todaysChange", None), + todays_change_percent=d.get("todaysChangePerc", None), updated=d.get("updated", None), ) @@ -207,8 +207,8 @@ def from_dict(d): asks=None if "asks" not in d else [OrderBookQuote.from_dict(o) for o in d["asks"]], - bid_count=d.get("bid_count", None), - ask_count=d.get("ask_count", None), + bid_count=d.get("bidCount", None), + ask_count=d.get("askCount", None), spread=d.get("spread", None), updated=d.get("updated", None), ) diff --git a/test_rest/test_markets.py b/test_rest/test_markets.py index 64614101..e9de8514 100644 --- a/test_rest/test_markets.py +++ b/test_rest/test_markets.py @@ -129,13 +129,13 @@ def test_get_market_holidays(self): def test_get_market_status(self): status = self.c.get_market_status() expected = MarketStatus( - after_hours=None, + after_hours=True, currencies=MarketCurrencies(crypto="open", fx="open"), - early_hours=None, + early_hours=False, exchanges=MarketExchanges( nasdaq="extended-hours", nyse="extended-hours", otc="extended-hours" ), market="extended-hours", - server_time=None, + server_time="2022-04-28T16:48:08-04:00", ) self.assertEqual(status, expected) diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index 806e9a8a..498fb966 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -4,6 +4,8 @@ SnapshotTickerFullBook, Agg, MinuteSnapshot, + LastQuote, + LastTrade, OrderBookQuote, UnderlyingAsset, LastQuoteOptionContractSnapshot, @@ -29,8 +31,37 @@ def test_get_snapshot_all(self): timestamp=None, transactions=None, ), - last_quote=None, - last_trade=None, + last_quote=LastQuote( + ticker=None, + trf_timestamp=None, + sequence_number=None, + sip_timestamp=1605192959994246100, + participant_timestamp=None, + ask_price=20.6, + ask_size=22, + ask_exchange=None, + conditions=None, + indicators=None, + bid_price=20.5, + bid_size=13, + bid_exchange=None, + tape=None, + ), + last_trade=LastTrade( + ticker=None, + trf_timestamp=None, + sequence_number=None, + sip_timestamp=1605192894630916600, + participant_timestamp=None, + conditions=[14, 41], + correction=None, + id="71675577320245", + price=20.506, + trf_id=None, + size=2416, + exchange=4, + tape=None, + ), min=MinuteSnapshot( accumulated_volume=37216, open=20.506, @@ -40,10 +71,19 @@ def test_get_snapshot_all(self): volume=5000, vwap=20.5105, ), - prev_day=None, + prev_day=Agg( + open=20.79, + high=21, + low=20.5, + close=20.63, + volume=292738, + vwap=20.6939, + timestamp=None, + transactions=None, + ), ticker="BCAT", - todays_change=None, - todays_change_percent=None, + todays_change=-0.124, + todays_change_percent=-0.601, updated=1605192894630916600, ) ] @@ -62,8 +102,37 @@ def test_get_snapshot_ticker(self): timestamp=None, transactions=None, ), - last_quote=None, - last_trade=None, + last_quote=LastQuote( + ticker=None, + trf_timestamp=None, + sequence_number=None, + sip_timestamp=1651251948407646487, + participant_timestamp=None, + ask_price=159.99, + ask_size=5, + ask_exchange=None, + conditions=None, + indicators=None, + bid_price=159.98, + bid_size=3, + bid_exchange=None, + tape=None, + ), + last_trade=LastTrade( + ticker=None, + trf_timestamp=None, + sequence_number=None, + sip_timestamp=1651251948294080343, + participant_timestamp=None, + conditions=None, + correction=None, + id="121351", + price=159.99, + trf_id=None, + size=200, + exchange=12, + tape=None, + ), min=MinuteSnapshot( accumulated_volume=68834255, open=160.71, @@ -73,10 +142,19 @@ def test_get_snapshot_ticker(self): volume=197226, vwap=160.5259, ), - prev_day=None, + prev_day=Agg( + open=159.25, + high=164.515, + low=158.93, + close=163.64, + volume=130149192, + vwap=161.8622, + timestamp=None, + transactions=None, + ), ticker="AAPL", - todays_change=None, - todays_change_percent=None, + todays_change=-3.65, + todays_change_percent=-2.231, updated=1651251948294080343, ) self.assertEqual(snapshots, expected) @@ -146,8 +224,8 @@ def test_get_snapshot_crypto_book(self): OrderBookQuote(price=11454, exchange_shares={"2": 1}), OrderBookQuote(price=11455, exchange_shares={"2": 1}), ], - bid_count=None, - ask_count=None, + bid_count=694.951789670001, + ask_count=593.1412981600005, spread=-4849.17, updated=1605295074162, ) From 70c4ddd435769e14e10e3c625b1afb949f513e99 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 25 May 2022 16:50:59 -0400 Subject: [PATCH 106/448] add market type for grouped endpoint (#208) * add market type for grouped endpoint * move to end * add note --- polygon/rest/aggs.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 26ef7153..ce80d78b 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -50,12 +50,15 @@ def get_aggs( raw=raw, ) + # TODO: next breaking change release move "market_type" to be 2nd mandatory + # param def get_grouped_daily_aggs( self, date: str, adjusted: Optional[bool] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + market_type: str = "stocks", ) -> Union[GroupedDailyAgg, HTTPResponse]: """ Get the daily open, high, low, and close (OHLC) for the entire market. @@ -66,7 +69,7 @@ def get_grouped_daily_aggs( :param raw: Return raw object instead of results object :return: List of grouped daily aggregates """ - url = f"/v2/aggs/grouped/locale/us/market/stocks/{date}" + url = f"/v2/aggs/grouped/locale/us/market/{market_type}/{date}" return self._get( path=url, From 3b1e194ade99d9b0648e3e7e3c78335366ba2566 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Wed, 25 May 2022 16:58:17 -0400 Subject: [PATCH 107/448] resub on reconnect (#207) * resub on reconnect * turn off verbose --- polygon/websocket/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index b2eab462..5b9b283f 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -63,7 +63,7 @@ def __init__( self.websocket: Optional[WebSocketClientProtocol] = None if subscriptions is None: subscriptions = [] - self.scheduled_subs = set(subscriptions) + self.scheduled_subs: Set[str] = set(subscriptions) self.schedule_resub = True # https://websockets.readthedocs.io/en/stable/reference/client.html#opening-a-connection @@ -138,6 +138,9 @@ async def connect( except ConnectionClosedError: logger.debug("connection closed (ERR)") reconnects += 1 + self.scheduled_subs = set(self.subs) + self.subs = set() + self.schedule_resub = True if self.max_reconnects is not None and reconnects > self.max_reconnects: return continue From 4eac5b01e9ba6f90b69987778c4b4fbb9814b541 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 31 May 2022 09:57:40 -0400 Subject: [PATCH 108/448] Bump sphinx from 4.5.0 to 5.0.0 (#210) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 4.5.0 to 5.0.0. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/5.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v4.5.0...v5.0.0) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 14 +++++++------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index bf26e8da..5497b7e8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -349,7 +349,7 @@ python-versions = "*" [[package]] name = "sphinx" -version = "4.5.0" +version = "5.0.0" description = "Python documentation generator" category = "dev" optional = false @@ -359,7 +359,7 @@ python-versions = ">=3.6" alabaster = ">=0.7,<0.8" babel = ">=1.3" colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.18" +docutils = ">=0.14,<0.19" imagesize = "*" importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} Jinja2 = ">=2.3" @@ -376,8 +376,8 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.950)", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "0cec28d757d5e6165bb2a3171f69af5e03410115f05bc0b46b13af7efcfe15f9" +content-hash = "0248275c93808efbf957d96f1ef0f2b1946740776136efb24dfc6c311f39771a" [metadata.files] alabaster = [ @@ -792,8 +792,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] sphinx = [ - {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, - {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, + {file = "Sphinx-5.0.0-py3-none-any.whl", hash = "sha256:af248b21e3282f847ff20feebe7a1985fb34773cbe3fc75bf206897f1a2199c4"}, + {file = "Sphinx-5.0.0.tar.gz", hash = "sha256:464d9c1bd5613bcebe76b46658763f3f3dbb184da7406e632a84596d3cd8ee90"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.18.1-py3-none-any.whl", hash = "sha256:f8f5bb7c13a9a71537dc2be2eb3b9e28a9711e2454df63587005eacf6fbac453"}, diff --git a/pyproject.toml b/pyproject.toml index 83b7f21b..b155f851 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.3.0" mypy = "^0.950" types-urllib3 = "^1.26.13" -Sphinx = "^4.5.0" +Sphinx = "^5.0.0" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" From 5fc4e43d9eab2cbe00294af2dee869fd6ee11ca4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 10:40:28 -0400 Subject: [PATCH 109/448] Bump types-urllib3 from 1.26.14 to 1.26.15 (#212) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.14 to 1.26.15. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5497b7e8..67b3bde0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.14" +version = "1.26.15" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "0248275c93808efbf957d96f1ef0f2b1946740776136efb24dfc6c311f39771a" +content-hash = "6bd2a4a5eb0003b8e8ab36f1310f60ece6f51f642ec9a7c70498d2234d78fafc" [metadata.files] alabaster = [ @@ -840,8 +840,8 @@ types-setuptools = [ {file = "types_setuptools-57.4.15-py3-none-any.whl", hash = "sha256:f8f19876f714a440c4badef1b91b0648604ed443e703d29d44cd36ac93b01a77"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.14.tar.gz", hash = "sha256:2a2578e4b36341ccd240b00fccda9826988ff0589a44ba4a664bbd69ef348d27"}, - {file = "types_urllib3-1.26.14-py3-none-any.whl", hash = "sha256:5d2388aa76395b1e3999ff789ea5b3283677dad8e9bcf3d9117ba19271fd35d9"}, + {file = "types-urllib3-1.26.15.tar.gz", hash = "sha256:c89283541ef92e344b7f59f83ea9b5a295b16366ceee3f25ecfc5593c79f794e"}, + {file = "types_urllib3-1.26.15-py3-none-any.whl", hash = "sha256:6011befa13f901fc934f59bb1fd6973be6f3acf4ebfce427593a27e7f492918f"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, diff --git a/pyproject.toml b/pyproject.toml index b155f851..9fc4432e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.3.0" mypy = "^0.950" -types-urllib3 = "^1.26.13" +types-urllib3 = "^1.26.15" Sphinx = "^5.0.0" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org From 881402892e2eefe3019e7b035089b32d2d4fd7bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 14:31:13 -0400 Subject: [PATCH 110/448] Bump types-setuptools from 57.4.15 to 57.4.17 (#213) Bumps [types-setuptools](https://github.com/python/typeshed) from 57.4.15 to 57.4.17. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 67b3bde0..b5441ae9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "57.4.15" +version = "57.4.17" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "6bd2a4a5eb0003b8e8ab36f1310f60ece6f51f642ec9a7c70498d2234d78fafc" +content-hash = "2a5029786838e842c4e6f8f82fa540d7a2bba6d820c6fa0d8d9b62a1a24d870a" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.2-py3-none-any.whl", hash = "sha256:d8d61752071a10747f441c169967e31d43c1875d851973f4f9851c1cb8c5ed9d"}, ] types-setuptools = [ - {file = "types-setuptools-57.4.15.tar.gz", hash = "sha256:650528ce803586029d7f153f32aed2dbaa6bb2888b233334af80d7ba63ed3c87"}, - {file = "types_setuptools-57.4.15-py3-none-any.whl", hash = "sha256:f8f19876f714a440c4badef1b91b0648604ed443e703d29d44cd36ac93b01a77"}, + {file = "types-setuptools-57.4.17.tar.gz", hash = "sha256:9d556fcaf6808a1cead4aaa41e5c07a61f0152a875811e1239738eba4e0b7b16"}, + {file = "types_setuptools-57.4.17-py3-none-any.whl", hash = "sha256:9c7cdaf0d55113e24ac17103bde2d434472abf1dbf444238e989fe4e798ffa26"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.15.tar.gz", hash = "sha256:c89283541ef92e344b7f59f83ea9b5a295b16366ceee3f25ecfc5593c79f794e"}, diff --git a/pyproject.toml b/pyproject.toml index 9fc4432e..2d0ba9aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" types-certifi = "^2021.10.8" -types-setuptools = "^57.4.15" +types-setuptools = "^57.4.17" pook = "^1.0.2" [build-system] From d514cc3e53c848c31e280cfd8efa99ffa87c95af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 14:39:22 -0400 Subject: [PATCH 111/448] Bump mypy from 0.950 to 0.960 (#211) Bumps [mypy](https://github.com/python/mypy) from 0.950 to 0.960. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.950...v0.960) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 50 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/poetry.lock b/poetry.lock index b5441ae9..d1b2ae7d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -199,7 +199,7 @@ python-versions = ">=3.7" [[package]] name = "mypy" -version = "0.950" +version = "0.960" description = "Optional static typing for Python" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "2a5029786838e842c4e6f8f82fa540d7a2bba6d820c6fa0d8d9b62a1a24d870a" +content-hash = "1eaa38243584617f32125a635baf63ebc9b7c3429b4bd463943de5a6110c5500" [metadata.files] alabaster = [ @@ -695,29 +695,29 @@ markupsafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mypy = [ - {file = "mypy-0.950-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf9c261958a769a3bd38c3e133801ebcd284ffb734ea12d01457cb09eacf7d7b"}, - {file = "mypy-0.950-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5b5bd0ffb11b4aba2bb6d31b8643902c48f990cc92fda4e21afac658044f0c0"}, - {file = "mypy-0.950-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e7647df0f8fc947388e6251d728189cfadb3b1e558407f93254e35abc026e22"}, - {file = "mypy-0.950-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eaff8156016487c1af5ffa5304c3e3fd183edcb412f3e9c72db349faf3f6e0eb"}, - {file = "mypy-0.950-cp310-cp310-win_amd64.whl", hash = "sha256:563514c7dc504698fb66bb1cf897657a173a496406f1866afae73ab5b3cdb334"}, - {file = "mypy-0.950-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dd4d670eee9610bf61c25c940e9ade2d0ed05eb44227275cce88701fee014b1f"}, - {file = "mypy-0.950-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca75ecf2783395ca3016a5e455cb322ba26b6d33b4b413fcdedfc632e67941dc"}, - {file = "mypy-0.950-cp36-cp36m-win_amd64.whl", hash = "sha256:6003de687c13196e8a1243a5e4bcce617d79b88f83ee6625437e335d89dfebe2"}, - {file = "mypy-0.950-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c653e4846f287051599ed8f4b3c044b80e540e88feec76b11044ddc5612ffed"}, - {file = "mypy-0.950-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e19736af56947addedce4674c0971e5dceef1b5ec7d667fe86bcd2b07f8f9075"}, - {file = "mypy-0.950-cp37-cp37m-win_amd64.whl", hash = "sha256:ef7beb2a3582eb7a9f37beaf38a28acfd801988cde688760aea9e6cc4832b10b"}, - {file = "mypy-0.950-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0112752a6ff07230f9ec2f71b0d3d4e088a910fdce454fdb6553e83ed0eced7d"}, - {file = "mypy-0.950-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ee0a36edd332ed2c5208565ae6e3a7afc0eabb53f5327e281f2ef03a6bc7687a"}, - {file = "mypy-0.950-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77423570c04aca807508a492037abbd72b12a1fb25a385847d191cd50b2c9605"}, - {file = "mypy-0.950-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ce6a09042b6da16d773d2110e44f169683d8cc8687e79ec6d1181a72cb028d2"}, - {file = "mypy-0.950-cp38-cp38-win_amd64.whl", hash = "sha256:5b231afd6a6e951381b9ef09a1223b1feabe13625388db48a8690f8daa9b71ff"}, - {file = "mypy-0.950-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0384d9f3af49837baa92f559d3fa673e6d2652a16550a9ee07fc08c736f5e6f8"}, - {file = "mypy-0.950-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1fdeb0a0f64f2a874a4c1f5271f06e40e1e9779bf55f9567f149466fc7a55038"}, - {file = "mypy-0.950-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:61504b9a5ae166ba5ecfed9e93357fd51aa693d3d434b582a925338a2ff57fd2"}, - {file = "mypy-0.950-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a952b8bc0ae278fc6316e6384f67bb9a396eb30aced6ad034d3a76120ebcc519"}, - {file = "mypy-0.950-cp39-cp39-win_amd64.whl", hash = "sha256:eaea21d150fb26d7b4856766e7addcf929119dd19fc832b22e71d942835201ef"}, - {file = "mypy-0.950-py3-none-any.whl", hash = "sha256:a4d9898f46446bfb6405383b57b96737dcfd0a7f25b748e78ef3e8c576bba3cb"}, - {file = "mypy-0.950.tar.gz", hash = "sha256:1b333cfbca1762ff15808a0ef4f71b5d3eed8528b23ea1c3fb50543c867d68de"}, + {file = "mypy-0.960-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3a3e525cd76c2c4f90f1449fd034ba21fcca68050ff7c8397bb7dd25dd8b8248"}, + {file = "mypy-0.960-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7a76dc4f91e92db119b1be293892df8379b08fd31795bb44e0ff84256d34c251"}, + {file = "mypy-0.960-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffdad80a92c100d1b0fe3d3cf1a4724136029a29afe8566404c0146747114382"}, + {file = "mypy-0.960-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7d390248ec07fa344b9f365e6ed9d205bd0205e485c555bed37c4235c868e9d5"}, + {file = "mypy-0.960-cp310-cp310-win_amd64.whl", hash = "sha256:925aa84369a07846b7f3b8556ccade1f371aa554f2bd4fb31cb97a24b73b036e"}, + {file = "mypy-0.960-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:239d6b2242d6c7f5822163ee082ef7a28ee02e7ac86c35593ef923796826a385"}, + {file = "mypy-0.960-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f1ba54d440d4feee49d8768ea952137316d454b15301c44403db3f2cb51af024"}, + {file = "mypy-0.960-cp36-cp36m-win_amd64.whl", hash = "sha256:cb7752b24528c118a7403ee955b6a578bfcf5879d5ee91790667c8ea511d2085"}, + {file = "mypy-0.960-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:826a2917c275e2ee05b7c7b736c1e6549a35b7ea5a198ca457f8c2ebea2cbecf"}, + {file = "mypy-0.960-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3eabcbd2525f295da322dff8175258f3fc4c3eb53f6d1929644ef4d99b92e72d"}, + {file = "mypy-0.960-cp37-cp37m-win_amd64.whl", hash = "sha256:f47322796c412271f5aea48381a528a613f33e0a115452d03ae35d673e6064f8"}, + {file = "mypy-0.960-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2c7f8bb9619290836a4e167e2ef1f2cf14d70e0bc36c04441e41487456561409"}, + {file = "mypy-0.960-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbfb873cf2b8d8c3c513367febde932e061a5f73f762896826ba06391d932b2a"}, + {file = "mypy-0.960-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc537885891382e08129d9862553b3d00d4be3eb15b8cae9e2466452f52b0117"}, + {file = "mypy-0.960-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:481f98c6b24383188c928f33dd2f0776690807e12e9989dd0419edd5c74aa53b"}, + {file = "mypy-0.960-cp38-cp38-win_amd64.whl", hash = "sha256:29dc94d9215c3eb80ac3c2ad29d0c22628accfb060348fd23d73abe3ace6c10d"}, + {file = "mypy-0.960-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:33d53a232bb79057f33332dbbb6393e68acbcb776d2f571ba4b1d50a2c8ba873"}, + {file = "mypy-0.960-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d645e9e7f7a5da3ec3bbcc314ebb9bb22c7ce39e70367830eb3c08d0140b9ce"}, + {file = "mypy-0.960-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:85cf2b14d32b61db24ade8ac9ae7691bdfc572a403e3cb8537da936e74713275"}, + {file = "mypy-0.960-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a85a20b43fa69efc0b955eba1db435e2ffecb1ca695fe359768e0503b91ea89f"}, + {file = "mypy-0.960-cp39-cp39-win_amd64.whl", hash = "sha256:0ebfb3f414204b98c06791af37a3a96772203da60636e2897408517fcfeee7a8"}, + {file = "mypy-0.960-py3-none-any.whl", hash = "sha256:bfd4f6536bd384c27c392a8b8f790fd0ed5c0cf2f63fc2fed7bce56751d53026"}, + {file = "mypy-0.960.tar.gz", hash = "sha256:d4fccf04c1acf750babd74252e0f2db6bd2ac3aa8fe960797d9f3ef41cf2bfd4"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, diff --git a/pyproject.toml b/pyproject.toml index 2d0ba9aa..80cd76cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.3.0" -mypy = "^0.950" +mypy = "^0.960" types-urllib3 = "^1.26.15" Sphinx = "^5.0.0" sphinx-rtd-theme = "^1.0.0" From 98aceb47b87945423dbabfa9e491b358e44af4a3 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Mon, 6 Jun 2022 13:12:33 -0400 Subject: [PATCH 112/448] update api specs (#216) --- .polygon/rest.json | 455 ++++++++++++++++++++++++++++++++-------- .polygon/websocket.json | 96 +++++++-- Makefile | 11 +- 3 files changed, 455 insertions(+), 107 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 9737c376..cddfeb2b 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -18,105 +18,382 @@ "x-polygon-order": { "stocks": { "market": [ - "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}", - "/v2/aggs/grouped/locale/us/market/stocks/{date}", - "/v1/open-close/{stocksTicker}/{date}", - "/v2/aggs/ticker/{stocksTicker}/prev", - "/v3/trades/{stockTicker}", - "/v2/ticks/stocks/trades/{ticker}/{date}", - "/v2/last/trade/{stocksTicker}", - "/v3/quotes/{stockTicker}", - "/v2/ticks/stocks/nbbo/{ticker}/{date}", - "/v2/last/nbbo/{stocksTicker}", - "/v2/snapshot/locale/us/markets/stocks/tickers", - "/v2/snapshot/locale/us/markets/stocks/{direction}", - "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}" + { + "paths": [ + "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/aggs/grouped/locale/us/market/stocks/{date}" + ] + }, + { + "paths": [ + "/v1/open-close/{stocksTicker}/{date}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{stocksTicker}/prev" + ] + }, + { + "paths": [ + "/v3/trades/{stockTicker}" + ] + }, + { + "paths": [ + "/v2/ticks/stocks/trades/{ticker}/{date}" + ] + }, + { + "paths": [ + "/v2/last/trade/{stocksTicker}" + ] + }, + { + "paths": [ + "/v3/quotes/{stockTicker}" + ] + }, + { + "paths": [ + "/v2/ticks/stocks/nbbo/{ticker}/{date}" + ] + }, + { + "paths": [ + "/v2/last/nbbo/{stocksTicker}" + ] + }, + { + "paths": [ + "/v2/snapshot/locale/us/markets/stocks/tickers", + "/v2/snapshot/locale/us/markets/stocks/{direction}", + "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}" + ], + "group": "Snapshots" + } ], "reference": [ - "/v3/reference/tickers", - "/v1/meta/symbols/{stocksTicker}/company", - "/v3/reference/tickers/{ticker}", - "/v2/reference/news", - "/v3/reference/tickers/types", - "/v1/marketstatus/upcoming", - "/v1/marketstatus/now", - "/v1/reference/sec/filings", - "/v1/reference/sec/filings/{filing_id}", - "/v1/reference/sec/filings/{filing_id}/files", - "/v1/reference/sec/filings/{filing_id}/files/{file_id}", - "/v3/reference/splits", - "/v3/reference/dividends", - "/vX/reference/financials", - "/v3/reference/conditions", - "/v3/reference/exchanges" + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v1/meta/symbols/{stocksTicker}/company" + ] + }, + { + "paths": [ + "/v3/reference/tickers/{ticker}" + ] + }, + { + "paths": [ + "/v2/reference/news" + ] + }, + { + "paths": [ + "/v3/reference/tickers/types" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + }, + { + "paths": [ + "/v1/reference/sec/filings", + "/v1/reference/sec/filings/{filing_id}", + "/v1/reference/sec/filings/{filing_id}/files", + "/v1/reference/sec/filings/{filing_id}/files/{file_id}" + ], + "group": "SEC Filings" + }, + { + "paths": [ + "/v3/reference/splits" + ] + }, + { + "paths": [ + "/v3/reference/dividends" + ] + }, + { + "paths": [ + "/vX/reference/financials" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } ] }, "options": { "market": [ - "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}", - "/v1/open-close/{optionsTicker}/{date}", - "/v2/aggs/ticker/{optionsTicker}/prev", - "/v3/trades/{optionsTicker}", - "/v2/last/trade/{optionsTicker}", - "/v3/quotes/{optionsTicker}", - "/v3/snapshot/options/{underlyingAsset}/{optionContract}", - "/v3/snapshot/options/{underlyingAsset}" + { + "paths": [ + "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v1/open-close/{optionsTicker}/{date}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{optionsTicker}/prev" + ] + }, + { + "paths": [ + "/v3/trades/{optionsTicker}" + ] + }, + { + "paths": [ + "/v2/last/trade/{optionsTicker}" + ] + }, + { + "paths": [ + "/v3/quotes/{optionsTicker}" + ] + }, + { + "paths": [ + "/v3/snapshot/options/{underlyingAsset}/{optionContract}", + "/v3/snapshot/options/{underlyingAsset}" + ], + "group": "Snapshots" + } ], "reference": [ - "/v3/reference/options/contracts/{options_ticker}", - "/v3/reference/options/contracts", - "/v3/reference/tickers", - "/v1/meta/symbols/{stocksTicker}/company", - "/v3/reference/tickers/{ticker}", - "/v2/reference/news", - "/v3/reference/tickers/types", - "/v1/marketstatus/upcoming", - "/v1/marketstatus/now", - "/v3/reference/conditions", - "/v3/reference/exchanges" + { + "paths": [ + "/v3/reference/options/contracts/{options_ticker}" + ] + }, + { + "paths": [ + "/v3/reference/options/contracts" + ] + }, + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v1/meta/symbols/{stocksTicker}/company" + ] + }, + { + "paths": [ + "/v3/reference/tickers/{ticker}" + ] + }, + { + "paths": [ + "/v2/reference/news" + ] + }, + { + "paths": [ + "/v3/reference/tickers/types" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } ] }, "fx": { "market": [ - "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}", - "/v2/aggs/grouped/locale/global/market/fx/{date}", - "/v2/aggs/ticker/{forexTicker}/prev", - "/v3/quotes/{fxTicker}", - "/v1/historic/forex/{from}/{to}/{date}", - "/v1/last_quote/currencies/{from}/{to}", - "/v1/conversion/{from}/{to}", - "/v2/snapshot/locale/global/markets/forex/tickers", - "/v2/snapshot/locale/global/markets/forex/{direction}", - "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" + { + "paths": [ + "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/aggs/grouped/locale/global/market/fx/{date}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{forexTicker}/prev" + ] + }, + { + "paths": [ + "/v3/quotes/{fxTicker}" + ] + }, + { + "paths": [ + "/v1/historic/forex/{from}/{to}/{date}" + ] + }, + { + "paths": [ + "/v1/last_quote/currencies/{from}/{to}" + ] + }, + { + "paths": [ + "/v1/conversion/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/snapshot/locale/global/markets/forex/tickers", + "/v2/snapshot/locale/global/markets/forex/{direction}", + "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" + ], + "group": "Snapshots" + } ], "reference": [ - "/v3/reference/tickers", - "/v1/marketstatus/upcoming", - "/v1/marketstatus/now", - "/v3/reference/conditions", - "/v3/reference/exchanges" + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } ] }, "crypto": { "market": [ - "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}", - "/v2/aggs/grouped/locale/global/market/crypto/{date}", - "/v1/open-close/crypto/{from}/{to}/{date}", - "/v2/aggs/ticker/{cryptoTicker}/prev", - "/v3/trades/{cryptoTicker}", - "/v1/historic/crypto/{from}/{to}/{date}", - "/v1/last/crypto/{from}/{to}", - "/v2/snapshot/locale/global/markets/crypto/tickers", - "/v2/snapshot/locale/global/markets/crypto/{direction}", - "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}", - "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" + { + "paths": [ + "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/aggs/grouped/locale/global/market/crypto/{date}" + ] + }, + { + "paths": [ + "/v1/open-close/crypto/{from}/{to}/{date}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{cryptoTicker}/prev" + ] + }, + { + "paths": [ + "/v3/trades/{cryptoTicker}" + ] + }, + { + "paths": [ + "/v1/historic/crypto/{from}/{to}/{date}" + ] + }, + { + "paths": [ + "/v1/last/crypto/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/snapshot/locale/global/markets/crypto/tickers", + "/v2/snapshot/locale/global/markets/crypto/{direction}", + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}", + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" + ], + "group": "Snapshots" + } ], "reference": [ - "/v3/reference/tickers", - "/v1/marketstatus/upcoming", - "/v1/marketstatus/now", - "/v3/reference/conditions", - "/v3/reference/exchanges" + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } ] } }, @@ -2786,7 +3063,7 @@ { "name": "from", "in": "path", - "description": "The start of the aggregate time window.", + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -2796,7 +3073,7 @@ { "name": "to", "in": "path", - "description": "The end of the aggregate time window.", + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -4303,7 +4580,7 @@ { "name": "from", "in": "path", - "description": "The start of the aggregate time window.", + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -4313,7 +4590,7 @@ { "name": "to", "in": "path", - "description": "The end of the aggregate time window.", + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -5494,7 +5771,7 @@ { "name": "from", "in": "path", - "description": "The start of the aggregate time window.", + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -5504,7 +5781,7 @@ { "name": "to", "in": "path", - "description": "The end of the aggregate time window.", + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -7388,7 +7665,7 @@ { "name": "from", "in": "path", - "description": "The start of the aggregate time window.", + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -7398,7 +7675,7 @@ { "name": "to", "in": "path", - "description": "The end of the aggregate time window.", + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -12909,7 +13186,7 @@ "AggregateTimeFrom": { "name": "from", "in": "path", - "description": "The start of the aggregate time window.", + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" @@ -12919,7 +13196,7 @@ "AggregateTimeTo": { "name": "to", "in": "path", - "description": "The end of the aggregate time window.", + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "required": true, "schema": { "type": "string" diff --git a/.polygon/websocket.json b/.polygon/websocket.json index bca2726b..de919d7c 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -18,34 +18,98 @@ "x-polygon-order": { "stocks": { "market": [ - "/stocks/AM", - "/stocks/A", - "/stocks/T", - "/stocks/Q", - "/stocks/NOI", - "/stocks/LULD" + { + "paths": [ + "/stocks/AM" + ] + }, + { + "paths": [ + "/stocks/A" + ] + }, + { + "paths": [ + "/stocks/T" + ] + }, + { + "paths": [ + "/stocks/Q" + ] + }, + { + "paths": [ + "/stocks/NOI" + ] + }, + { + "paths": [ + "/stocks/LULD" + ] + } ] }, "options": { "market": [ - "/options/AM", - "/options/A", - "/options/T", - "/options/Q" + { + "paths": [ + "/options/AM" + ] + }, + { + "paths": [ + "/options/A" + ] + }, + { + "paths": [ + "/options/T" + ] + }, + { + "paths": [ + "/options/Q" + ] + } ] }, "fx": { "market": [ - "/forex/CA", - "/forex/C" + { + "paths": [ + "/forex/CA" + ] + }, + { + "paths": [ + "/forex/C" + ] + } ] }, "crypto": { "market": [ - "/crypto/XA", - "/crypto/XT", - "/crypto/XQ", - "/crypto/XL2" + { + "paths": [ + "/crypto/XA" + ] + }, + { + "paths": [ + "/crypto/XT" + ] + }, + { + "paths": [ + "/crypto/XQ" + ] + }, + { + "paths": [ + "/crypto/XL2" + ] + } ] } }, diff --git a/Makefile b/Makefile index b18f790a..485f002b 100644 --- a/Makefile +++ b/Makefile @@ -31,12 +31,19 @@ static: ## Check code style and static types lint: style static -## Run unit tests +## Update the REST API spec +rest-spec: + curl https://api.polygon.io/specs/rest.json > .polygon/rest.json + +## Update the WebSocket API spec +ws-spec: + curl https://api.polygon.io/specs/websocket.json > .polygon/websocket.json + test_rest: poetry run python -m unittest discover -s test_rest test_websocket: poetry run python -m unittest discover -s test_websocket +## Run the unit tests test: test_rest test_websocket - From c6d56388b92e7655ac7c3d0ce497b24d13bb512b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jun 2022 13:22:08 -0400 Subject: [PATCH 113/448] Bump sphinx from 5.0.0 to 5.0.1 (#219) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.0.0 to 5.0.1. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/5.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.0.0...v5.0.1) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Vera Harless <53271741+morningvera@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index d1b2ae7d..7a9f0ff3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -349,7 +349,7 @@ python-versions = "*" [[package]] name = "sphinx" -version = "5.0.0" +version = "5.0.1" description = "Python documentation generator" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "1eaa38243584617f32125a635baf63ebc9b7c3429b4bd463943de5a6110c5500" +content-hash = "e89f958deda65a3b42df502413c298e7abec94355306d2079d20b6f5777a3cae" [metadata.files] alabaster = [ @@ -792,8 +792,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] sphinx = [ - {file = "Sphinx-5.0.0-py3-none-any.whl", hash = "sha256:af248b21e3282f847ff20feebe7a1985fb34773cbe3fc75bf206897f1a2199c4"}, - {file = "Sphinx-5.0.0.tar.gz", hash = "sha256:464d9c1bd5613bcebe76b46658763f3f3dbb184da7406e632a84596d3cd8ee90"}, + {file = "Sphinx-5.0.1-py3-none-any.whl", hash = "sha256:36aa2a3c2f6d5230be94585bc5d74badd5f9ed8f3388b8eedc1726fe45b1ad30"}, + {file = "Sphinx-5.0.1.tar.gz", hash = "sha256:f4da1187785a5bc7312cc271b0e867a93946c319d106363e102936a3d9857306"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.18.1-py3-none-any.whl", hash = "sha256:f8f5bb7c13a9a71537dc2be2eb3b9e28a9711e2454df63587005eacf6fbac453"}, diff --git a/pyproject.toml b/pyproject.toml index 80cd76cb..2c82d652 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.3.0" mypy = "^0.960" types-urllib3 = "^1.26.15" -Sphinx = "^5.0.0" +Sphinx = "^5.0.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.1" From 25da72b67591df1453edbdcb597cd77d7882d0b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jun 2022 17:25:52 +0000 Subject: [PATCH 114/448] Bump mypy from 0.960 to 0.961 (#218) Bumps [mypy](https://github.com/python/mypy) from 0.960 to 0.961. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.960...v0.961) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Vera Harless <53271741+morningvera@users.noreply.github.com> --- poetry.lock | 50 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7a9f0ff3..846f9c63 100644 --- a/poetry.lock +++ b/poetry.lock @@ -199,7 +199,7 @@ python-versions = ">=3.7" [[package]] name = "mypy" -version = "0.960" +version = "0.961" description = "Optional static typing for Python" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "e89f958deda65a3b42df502413c298e7abec94355306d2079d20b6f5777a3cae" +content-hash = "9a2076e33a19f2f8fb2c5f70e3de16aedba7bd81f2437fd935f1fb640710e2e7" [metadata.files] alabaster = [ @@ -695,29 +695,29 @@ markupsafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mypy = [ - {file = "mypy-0.960-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3a3e525cd76c2c4f90f1449fd034ba21fcca68050ff7c8397bb7dd25dd8b8248"}, - {file = "mypy-0.960-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7a76dc4f91e92db119b1be293892df8379b08fd31795bb44e0ff84256d34c251"}, - {file = "mypy-0.960-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffdad80a92c100d1b0fe3d3cf1a4724136029a29afe8566404c0146747114382"}, - {file = "mypy-0.960-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7d390248ec07fa344b9f365e6ed9d205bd0205e485c555bed37c4235c868e9d5"}, - {file = "mypy-0.960-cp310-cp310-win_amd64.whl", hash = "sha256:925aa84369a07846b7f3b8556ccade1f371aa554f2bd4fb31cb97a24b73b036e"}, - {file = "mypy-0.960-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:239d6b2242d6c7f5822163ee082ef7a28ee02e7ac86c35593ef923796826a385"}, - {file = "mypy-0.960-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f1ba54d440d4feee49d8768ea952137316d454b15301c44403db3f2cb51af024"}, - {file = "mypy-0.960-cp36-cp36m-win_amd64.whl", hash = "sha256:cb7752b24528c118a7403ee955b6a578bfcf5879d5ee91790667c8ea511d2085"}, - {file = "mypy-0.960-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:826a2917c275e2ee05b7c7b736c1e6549a35b7ea5a198ca457f8c2ebea2cbecf"}, - {file = "mypy-0.960-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3eabcbd2525f295da322dff8175258f3fc4c3eb53f6d1929644ef4d99b92e72d"}, - {file = "mypy-0.960-cp37-cp37m-win_amd64.whl", hash = "sha256:f47322796c412271f5aea48381a528a613f33e0a115452d03ae35d673e6064f8"}, - {file = "mypy-0.960-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2c7f8bb9619290836a4e167e2ef1f2cf14d70e0bc36c04441e41487456561409"}, - {file = "mypy-0.960-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbfb873cf2b8d8c3c513367febde932e061a5f73f762896826ba06391d932b2a"}, - {file = "mypy-0.960-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc537885891382e08129d9862553b3d00d4be3eb15b8cae9e2466452f52b0117"}, - {file = "mypy-0.960-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:481f98c6b24383188c928f33dd2f0776690807e12e9989dd0419edd5c74aa53b"}, - {file = "mypy-0.960-cp38-cp38-win_amd64.whl", hash = "sha256:29dc94d9215c3eb80ac3c2ad29d0c22628accfb060348fd23d73abe3ace6c10d"}, - {file = "mypy-0.960-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:33d53a232bb79057f33332dbbb6393e68acbcb776d2f571ba4b1d50a2c8ba873"}, - {file = "mypy-0.960-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d645e9e7f7a5da3ec3bbcc314ebb9bb22c7ce39e70367830eb3c08d0140b9ce"}, - {file = "mypy-0.960-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:85cf2b14d32b61db24ade8ac9ae7691bdfc572a403e3cb8537da936e74713275"}, - {file = "mypy-0.960-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a85a20b43fa69efc0b955eba1db435e2ffecb1ca695fe359768e0503b91ea89f"}, - {file = "mypy-0.960-cp39-cp39-win_amd64.whl", hash = "sha256:0ebfb3f414204b98c06791af37a3a96772203da60636e2897408517fcfeee7a8"}, - {file = "mypy-0.960-py3-none-any.whl", hash = "sha256:bfd4f6536bd384c27c392a8b8f790fd0ed5c0cf2f63fc2fed7bce56751d53026"}, - {file = "mypy-0.960.tar.gz", hash = "sha256:d4fccf04c1acf750babd74252e0f2db6bd2ac3aa8fe960797d9f3ef41cf2bfd4"}, + {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, + {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, + {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, + {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, + {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, + {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, + {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, + {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, + {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, + {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, + {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, + {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, + {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, + {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, + {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, + {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, + {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, + {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, + {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, + {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, + {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, + {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, + {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, diff --git a/pyproject.toml b/pyproject.toml index 2c82d652..03d927ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.3.0" -mypy = "^0.960" +mypy = "^0.961" types-urllib3 = "^1.26.15" Sphinx = "^5.0.1" sphinx-rtd-theme = "^1.0.0" From 27c30216d1ef5ef4c4cc6bc1a668ed5195d8b5b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jun 2022 17:28:00 +0000 Subject: [PATCH 115/448] Bump sphinx-autodoc-typehints from 1.18.1 to 1.18.2 (#217) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.18.1 to 1.18.2. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.18.1...1.18.2) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Vera Harless <53271741+morningvera@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 846f9c63..f4202230 100644 --- a/poetry.lock +++ b/poetry.lock @@ -381,7 +381,7 @@ test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.18.1" +version = "1.18.2" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false @@ -391,7 +391,7 @@ python-versions = ">=3.7" Sphinx = ">=4.5" [package.extras] -testing = ["covdefaults (>=2.2)", "coverage (>=6.3)", "diff-cover (>=6.4)", "nptyping (>=2)", "pytest (>=7.1)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=4.1)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.3)", "diff-cover (>=6.4)", "nptyping (>=2.1.1)", "pytest (>=7.1)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=4.1)"] type_comments = ["typed-ast (>=1.5.2)"] [[package]] @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "9a2076e33a19f2f8fb2c5f70e3de16aedba7bd81f2437fd935f1fb640710e2e7" +content-hash = "65894f39cf83892a385389eb23f2add9301db72643be31cdd42a12b28e30d974" [metadata.files] alabaster = [ @@ -796,8 +796,8 @@ sphinx = [ {file = "Sphinx-5.0.1.tar.gz", hash = "sha256:f4da1187785a5bc7312cc271b0e867a93946c319d106363e102936a3d9857306"}, ] sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.18.1-py3-none-any.whl", hash = "sha256:f8f5bb7c13a9a71537dc2be2eb3b9e28a9711e2454df63587005eacf6fbac453"}, - {file = "sphinx_autodoc_typehints-1.18.1.tar.gz", hash = "sha256:07631c5f0c6641e5ba27143494aefc657e029bed3982138d659250e617f6f929"}, + {file = "sphinx_autodoc_typehints-1.18.2-py3-none-any.whl", hash = "sha256:89b7a16c2642dd5580c6f97503252e0c5d82b8aced0cd2c896f6209ad748bb18"}, + {file = "sphinx_autodoc_typehints-1.18.2.tar.gz", hash = "sha256:6ba02ecced60ba640f891301c863097468560d23df80afbd69b2ddcde261be2d"}, ] sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, diff --git a/pyproject.toml b/pyproject.toml index 03d927ff..14ea1b42 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.15" Sphinx = "^5.0.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.18.1" +sphinx-autodoc-typehints = "^1.18.2" types-certifi = "^2021.10.8" types-setuptools = "^57.4.17" pook = "^1.0.2" From 10bb8783dd6a9bcaae751f7521251ef3fa71cd50 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Mon, 13 Jun 2022 13:24:26 -0400 Subject: [PATCH 116/448] update rest spec (#221) --- .polygon/rest.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index cddfeb2b..ae04cf31 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -3256,7 +3256,7 @@ }, "/v2/snapshot/locale/us/markets/stocks/tickers": { "get": { - "summary": "Snapshot - All Tickers", + "summary": "All Tickers", "description": "Get the most up-to-date market data for all traded stock symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "tags": [ "stocks:snapshot" @@ -3585,7 +3585,7 @@ }, "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}": { "get": { - "summary": "Snapshot - Ticker", + "summary": "Ticker", "description": "Get the most up-to-date market data for a single traded stock ticker.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "tags": [ "stocks:snapshot" @@ -3913,7 +3913,7 @@ }, "/v2/snapshot/locale/us/markets/stocks/{direction}": { "get": { - "summary": "Snapshot - Gainers/Losers", + "summary": "Gainers/Losers", "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "tags": [ "stocks:snapshot" @@ -5954,7 +5954,7 @@ }, "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}": { "get": { - "summary": "Snapshot - Ticker", + "summary": "Ticker", "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded currency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "tags": [ "fx:snapshot" @@ -6216,7 +6216,7 @@ }, "/v2/snapshot/locale/global/markets/forex/tickers": { "get": { - "summary": "Snapshot - All Tickers", + "summary": "All Tickers", "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded forex symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "tags": [ "fx:snapshot" @@ -6473,7 +6473,7 @@ }, "/v2/snapshot/locale/global/markets/forex/{direction}": { "get": { - "summary": "Snapshot - Gainers/Losers", + "summary": "Gainers/Losers", "description": "Get the current top 20 gainers or losers of the day in forex markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "tags": [ "fx:snapshot" @@ -7858,7 +7858,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/tickers": { "get": { - "summary": "Snapshot - All Tickers", + "summary": "All Tickers", "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "tags": [ "crypto:snapshot" @@ -8155,7 +8155,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}": { "get": { - "summary": "Snapshot - Ticker", + "summary": "Ticker", "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded cryptocurrency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "tags": [ "crypto:snapshot" @@ -8456,7 +8456,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book": { "get": { - "summary": "Snapshot - Ticker Full Book (L2)", + "summary": "Ticker Full Book (L2)", "description": "Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "tags": [ "crypto:snapshot" @@ -8621,7 +8621,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/{direction}": { "get": { - "summary": "Snapshot - Gainers/Losers", + "summary": "Gainers/Losers", "description": "Get the current top 20 gainers or losers of the day in cryptocurrency markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "tags": [ "crypto:snapshot" From c58d52b9c762039bf63ada1cd74e8333802a8195 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 12:59:38 -0400 Subject: [PATCH 117/448] Bump types-certifi from 2021.10.8.2 to 2021.10.8.3 (#226) Bumps [types-certifi](https://github.com/python/typeshed) from 2021.10.8.2 to 2021.10.8.3. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-certifi dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index f4202230..1c5c2b50 100644 --- a/poetry.lock +++ b/poetry.lock @@ -490,7 +490,7 @@ python-versions = ">=3.7" [[package]] name = "types-certifi" -version = "2021.10.8.2" +version = "2021.10.8.3" description = "Typing stubs for certifi" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "65894f39cf83892a385389eb23f2add9301db72643be31cdd42a12b28e30d974" +content-hash = "66f877c13cbfa4af628c68b697c893358e2cce8b07740971d873397cf43eb1d0" [metadata.files] alabaster = [ @@ -832,8 +832,8 @@ tomli = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] types-certifi = [ - {file = "types-certifi-2021.10.8.2.tar.gz", hash = "sha256:a36dc1cb4aeeea8c97430297db10b4c0481ba612ed443e48e3e8aa091f359440"}, - {file = "types_certifi-2021.10.8.2-py3-none-any.whl", hash = "sha256:d8d61752071a10747f441c169967e31d43c1875d851973f4f9851c1cb8c5ed9d"}, + {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, + {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ {file = "types-setuptools-57.4.17.tar.gz", hash = "sha256:9d556fcaf6808a1cead4aaa41e5c07a61f0152a875811e1239738eba4e0b7b16"}, From a2209b16f42eb0b0af98e17b15476015e4bd1405 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 15:06:32 -0400 Subject: [PATCH 118/448] Bump sphinx from 5.0.1 to 5.0.2 (#227) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.0.1 to 5.0.2. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/5.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.0.1...v5.0.2) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1c5c2b50..da2bdce6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -349,7 +349,7 @@ python-versions = "*" [[package]] name = "sphinx" -version = "5.0.1" +version = "5.0.2" description = "Python documentation generator" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "66f877c13cbfa4af628c68b697c893358e2cce8b07740971d873397cf43eb1d0" +content-hash = "458f522c59f25b640dc27ab1f951c9d30664c84936a4ff1e0bd342aa54fe9390" [metadata.files] alabaster = [ @@ -792,8 +792,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] sphinx = [ - {file = "Sphinx-5.0.1-py3-none-any.whl", hash = "sha256:36aa2a3c2f6d5230be94585bc5d74badd5f9ed8f3388b8eedc1726fe45b1ad30"}, - {file = "Sphinx-5.0.1.tar.gz", hash = "sha256:f4da1187785a5bc7312cc271b0e867a93946c319d106363e102936a3d9857306"}, + {file = "Sphinx-5.0.2-py3-none-any.whl", hash = "sha256:d3e57663eed1d7c5c50895d191fdeda0b54ded6f44d5621b50709466c338d1e8"}, + {file = "Sphinx-5.0.2.tar.gz", hash = "sha256:b18e978ea7565720f26019c702cd85c84376e948370f1cd43d60265010e1c7b0"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.18.2-py3-none-any.whl", hash = "sha256:89b7a16c2642dd5580c6f97503252e0c5d82b8aced0cd2c896f6209ad748bb18"}, diff --git a/pyproject.toml b/pyproject.toml index 14ea1b42..81e33f9c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.3.0" mypy = "^0.961" types-urllib3 = "^1.26.15" -Sphinx = "^5.0.1" +Sphinx = "^5.0.2" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.2" From da7b4fa5ad17cb6ecabfd4474b4354b18200d429 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 15:17:20 -0400 Subject: [PATCH 119/448] Bump sphinx-autodoc-typehints from 1.18.2 to 1.18.3 (#228) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.18.2 to 1.18.3. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.18.2...1.18.3) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index da2bdce6..d7a6a48c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -381,7 +381,7 @@ test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.18.2" +version = "1.18.3" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false @@ -391,7 +391,7 @@ python-versions = ">=3.7" Sphinx = ">=4.5" [package.extras] -testing = ["covdefaults (>=2.2)", "coverage (>=6.3)", "diff-cover (>=6.4)", "nptyping (>=2.1.1)", "pytest (>=7.1)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=4.1)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.3)", "diff-cover (>=6.4)", "nptyping (>=2.1.2)", "pytest (>=7.1)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=4.1)"] type_comments = ["typed-ast (>=1.5.2)"] [[package]] @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "458f522c59f25b640dc27ab1f951c9d30664c84936a4ff1e0bd342aa54fe9390" +content-hash = "7be22f47ea9a37aba1d7a6b5ebd8d0c14649a03b22adf1a637408dd92d2a3894" [metadata.files] alabaster = [ @@ -796,8 +796,8 @@ sphinx = [ {file = "Sphinx-5.0.2.tar.gz", hash = "sha256:b18e978ea7565720f26019c702cd85c84376e948370f1cd43d60265010e1c7b0"}, ] sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.18.2-py3-none-any.whl", hash = "sha256:89b7a16c2642dd5580c6f97503252e0c5d82b8aced0cd2c896f6209ad748bb18"}, - {file = "sphinx_autodoc_typehints-1.18.2.tar.gz", hash = "sha256:6ba02ecced60ba640f891301c863097468560d23df80afbd69b2ddcde261be2d"}, + {file = "sphinx_autodoc_typehints-1.18.3-py3-none-any.whl", hash = "sha256:20294de2a818bda04953c5cb302ec5af46138c81980ad9efa6d8fc1fc4242518"}, + {file = "sphinx_autodoc_typehints-1.18.3.tar.gz", hash = "sha256:c04d8f8d70e988960e25b206af39a90df84e7e2c085bb24e123bc3684021b313"}, ] sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, diff --git a/pyproject.toml b/pyproject.toml index 81e33f9c..ec774faa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.15" Sphinx = "^5.0.2" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.18.2" +sphinx-autodoc-typehints = "^1.18.3" types-certifi = "^2021.10.8" types-setuptools = "^57.4.17" pook = "^1.0.2" From beddb8cbf9e77effa52c40878ab5aefa5f8bef85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jun 2022 15:47:55 -0400 Subject: [PATCH 120/448] Bump certifi from 2022.5.18.1 to 2022.6.15 (#229) Bumps [certifi](https://github.com/certifi/python-certifi) from 2022.5.18.1 to 2022.6.15. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2022.05.18.1...2022.06.15) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d7a6a48c..09480754 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,7 +55,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.5.18.1" +version = "2022.6.15" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -605,8 +605,8 @@ black = [ {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, ] certifi = [ - {file = "certifi-2022.5.18.1-py3-none-any.whl", hash = "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"}, - {file = "certifi-2022.5.18.1.tar.gz", hash = "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7"}, + {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, + {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, ] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, From 5ac311ff7cc2db89015d2ace50fa1a53eaa0c865 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 23 Jun 2022 13:30:13 -0400 Subject: [PATCH 121/448] Fix OptionsContract model (#232) --- polygon/rest/models/contracts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/models/contracts.py b/polygon/rest/models/contracts.py index d618f5b1..411bf554 100644 --- a/polygon/rest/models/contracts.py +++ b/polygon/rest/models/contracts.py @@ -33,7 +33,7 @@ def from_dict(d): return OptionsContract( additional_underlyings=None if "additional_underlyings" not in d - else Underlying.from_dict(d["additional_underlyings"]), + else [Underlying.from_dict(u) for u in d["additional_underlyings"]], cfi=d.get("cfi", None), correction=d.get("correction", None), exercise_style=d.get("exercise_style", None), From 17487bc0864fdaca4df68c534587a5c1c7e6d53a Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 23 Jun 2022 13:39:04 -0400 Subject: [PATCH 122/448] Add OTC (#233) --- .polygon/rest.json | 283 +++++++++++++++++++++++++++++++- polygon/rest/aggs.py | 1 + polygon/rest/models/aggs.py | 6 + polygon/rest/models/snapshot.py | 2 + polygon/rest/snapshot.py | 1 + 5 files changed, 285 insertions(+), 8 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index ae04cf31..9ed0490c 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -512,7 +512,17 @@ "WARRANT", "INDEX", "ETF", - "ETN" + "ETN", + "OS", + "GDR", + "OTHER", + "NYRS", + "AGEN", + "EQLK", + "BOND", + "ADRW", + "BASKET", + "LT" ] } }, @@ -526,7 +536,8 @@ "enum": [ "stocks", "crypto", - "fx" + "fx", + "otc" ] } }, @@ -661,7 +672,7 @@ "properties": { "results": { "type": "array", - "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response. \n", + "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", "items": { "type": "object", "properties": { @@ -679,7 +690,8 @@ "enum": [ "stocks", "crypto", - "fx" + "fx", + "otc" ] }, "locale": { @@ -872,7 +884,8 @@ "enum": [ "stocks", "crypto", - "fx" + "fx", + "otc" ] }, "locale": { @@ -2637,6 +2650,10 @@ "format": "double", "description": "The trading volume of the symbol in the given time period." }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + }, "preMarket": { "type": "integer", "description": "The open price of the ticker symbol in pre-market trading." @@ -2704,6 +2721,15 @@ "type": "boolean" }, "example": true + }, + { + "name": "include_otc", + "in": "query", + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { @@ -2787,6 +2813,10 @@ "n": { "type": "number", "description": "The number of transactions in the aggregate window." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } } @@ -3199,6 +3229,10 @@ "n": { "type": "number", "description": "The number of transactions in the aggregate window." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } } @@ -3272,6 +3306,15 @@ "type": "string" } } + }, + { + "name": "include_otc", + "in": "query", + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { @@ -3335,6 +3378,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -3437,6 +3484,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -3473,6 +3524,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -3666,6 +3721,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -3768,6 +3827,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -3804,6 +3867,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -3991,6 +4058,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -4093,6 +4164,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -4129,6 +4204,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -4490,6 +4569,10 @@ "format": "double", "description": "The trading volume of the symbol in the given time period." }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + }, "preMarket": { "type": "integer", "description": "The open price of the ticker symbol in pre-market trading." @@ -9664,6 +9747,10 @@ "type": "number", "description": "The number of transactions in the aggregate window." }, + "OTC": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + }, "Open": { "type": "number", "format": "double", @@ -9856,6 +9943,65 @@ "n": { "type": "number", "description": "The number of transactions in the aggregate window." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + } + } + } + } + } + }, + "StocksTickerResultsOTC": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "t": { + "type": "integer", + "description": "The Unix Msec timestamp for the start of the aggregate window." + }, + "n": { + "type": "number", + "description": "The number of transactions in the aggregate window." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } } @@ -10121,6 +10267,45 @@ } } }, + "SnapshotOHLCVVWOtc": { + "type": "object", + "properties": { + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + } + } + }, "StocksSnapshotLastQuote": { "type": "object", "properties": { @@ -10187,6 +10372,49 @@ } } }, + "StocksSnapshotMinuteOTC": { + "type": "object", + "properties": { + "av": { + "type": "integer", + "description": "The accumulated volume." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "v": { + "type": "number", + "format": "double", + "description": "The trading volume of the symbol in the given time period." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + } + } + }, "StocksSnapshotTickers": { "type": "object", "properties": { @@ -10228,6 +10456,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -10330,6 +10562,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -10366,6 +10602,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -10431,6 +10671,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -10533,6 +10777,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -10569,6 +10817,10 @@ "type": "number", "format": "double", "description": "The volume weighted average price." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -11433,7 +11685,7 @@ "properties": { "results": { "type": "array", - "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response. \n", + "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", "items": { "type": "object", "properties": { @@ -11451,7 +11703,8 @@ "enum": [ "stocks", "crypto", - "fx" + "fx", + "otc" ] }, "locale": { @@ -11532,7 +11785,8 @@ "enum": [ "stocks", "crypto", - "fx" + "fx", + "otc" ] }, "locale": { @@ -12236,6 +12490,10 @@ "format": "double", "description": "The trading volume of the symbol in the given time period." }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + }, "preMarket": { "type": "integer", "description": "The open price of the ticker symbol in pre-market trading." @@ -13259,6 +13517,15 @@ }, "example": "gainers" }, + "IncludeOTC": { + "name": "include_otc", + "in": "query", + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "required": false, + "schema": { + "type": "boolean" + } + }, "LimitMax50000": { "name": "limit", "in": "query", diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index ce80d78b..8c96842c 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -59,6 +59,7 @@ def get_grouped_daily_aggs( params: Optional[Dict[str, Any]] = None, raw: bool = False, market_type: str = "stocks", + include_otc: bool = False, ) -> Union[GroupedDailyAgg, HTTPResponse]: """ Get the daily open, high, low, and close (OHLC) for the entire market. diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index 72aa0db2..cb624121 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -13,6 +13,7 @@ class Agg: vwap: Optional[float] = None timestamp: Optional[int] = None transactions: Optional[int] = None + otc: Optional[bool] = None @staticmethod def from_dict(d): @@ -25,6 +26,7 @@ def from_dict(d): d.get("vw", None), d.get("t", None), d.get("n", None), + d.get("otc", None), ) @@ -40,6 +42,7 @@ class GroupedDailyAgg: vwap: Optional[float] = None timestamp: Optional[int] = None transactions: Optional[int] = None + otc: Optional[bool] = None @staticmethod def from_dict(d): @@ -53,6 +56,7 @@ def from_dict(d): d.get("vw", None), d.get("t", None), d.get("n", None), + d.get("otc", None), ) @@ -69,6 +73,7 @@ class DailyOpenCloseAgg: status: Optional[str] = None symbol: Optional[str] = None volume: Optional[float] = None + otc: Optional[bool] = None @staticmethod def from_dict(d): @@ -83,6 +88,7 @@ def from_dict(d): d.get("status", None), d.get("symbol", None), d.get("volume", None), + d.get("otc", None), ) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 6e4bdbd4..676becb9 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -15,6 +15,7 @@ class MinuteSnapshot: close: Optional[float] = None volume: Optional[float] = None vwap: Optional[float] = None + otc: Optional[bool] = None @staticmethod def from_dict(d): @@ -26,6 +27,7 @@ def from_dict(d): d.get("c", None), d.get("v", None), d.get("vw", None), + d.get("otc", None), ) diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index e43836f8..80b2f15b 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -17,6 +17,7 @@ def get_snapshot_all( tickers: Optional[Union[str, List[str]]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + include_otc: bool = False, ) -> Union[List[TickerSnapshot], HTTPResponse]: """ Get the most up-to-date market data for all traded stock symbols. From aefe8760a1561df24c0c35708983f8c4189ddece Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 23 Jun 2022 13:47:20 -0400 Subject: [PATCH 123/448] Add OTC websocket models (#234) --- polygon/rest/models/common.py | 1 + polygon/websocket/models/models.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/polygon/rest/models/common.py b/polygon/rest/models/common.py index b9da97db..b4613e1b 100644 --- a/polygon/rest/models/common.py +++ b/polygon/rest/models/common.py @@ -20,6 +20,7 @@ class Market(Enum): STOCKS = "stocks" CRYPTO = "crypto" FX = "fx" + OTC = "otc" class AssetClass(Enum): diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 75232007..937aa7a1 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -20,6 +20,7 @@ class EquityAgg: average_size: Optional[float] = None start_timestamp: Optional[int] = None end_timestamp: Optional[int] = None + otc: Optional[bool] = None @staticmethod def from_dict(d): @@ -38,6 +39,7 @@ def from_dict(d): d.get("z", None), d.get("s", None), d.get("e", None), + d.get("o", None), ) From 407a46448bff1fa5143e18c72e8360d372a2396a Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Fri, 24 Jun 2022 13:47:27 -0400 Subject: [PATCH 124/448] add contract type to models (#236) --- polygon/rest/models/contracts.py | 2 ++ test_rest/test_contracts.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/polygon/rest/models/contracts.py b/polygon/rest/models/contracts.py index 411bf554..dc69f614 100644 --- a/polygon/rest/models/contracts.py +++ b/polygon/rest/models/contracts.py @@ -19,6 +19,7 @@ class OptionsContract: "OptionsContract contains data for a specified ticker symbol." additional_underlyings: Optional[List[Underlying]] = None cfi: Optional[str] = None + contract_type: Optional[str] = None correction: Optional[str] = None exercise_style: Optional[str] = None expiration_date: Optional[str] = None @@ -35,6 +36,7 @@ def from_dict(d): if "additional_underlyings" not in d else [Underlying.from_dict(u) for u in d["additional_underlyings"]], cfi=d.get("cfi", None), + contract_type=d.get("contract_type", None), correction=d.get("correction", None), exercise_style=d.get("exercise_style", None), expiration_date=d.get("expiration_date", None), diff --git a/test_rest/test_contracts.py b/test_rest/test_contracts.py index 39ad7215..98c836a6 100644 --- a/test_rest/test_contracts.py +++ b/test_rest/test_contracts.py @@ -8,6 +8,7 @@ def test_get_options_contract(self): expected = OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2024-01-19", @@ -26,6 +27,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -39,6 +41,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -52,6 +55,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -65,6 +69,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -78,6 +83,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -91,6 +97,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -104,6 +111,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -117,6 +125,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -130,6 +139,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -143,6 +153,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -156,6 +167,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -169,6 +181,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -182,6 +195,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -195,6 +209,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -208,6 +223,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -221,6 +237,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -234,6 +251,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -247,6 +265,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -260,6 +279,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", @@ -273,6 +293,7 @@ def test_list_options_contracts(self): OptionsContract( additional_underlyings=None, cfi="OCASPS", + contract_type="call", correction=None, exercise_style="american", expiration_date="2022-05-20", From 46f1782b70ef7f075a77ef569a94af72085b181d Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Fri, 24 Jun 2022 13:59:24 -0400 Subject: [PATCH 125/448] fix codeowners (#237) --- .github/CODEOWNERS | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 98f80ad0..b89ada2f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1 @@ -* @clickingbuttons -* @Darcy-Linde +* @clickingbuttons @Darcy-Linde From e0121300fc47fde1bf773216dd8b092110a042d7 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Mon, 27 Jun 2022 10:23:18 -0400 Subject: [PATCH 126/448] update ws spec (#239) --- .polygon/websocket.json | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index de919d7c..9fd91c98 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -423,6 +423,10 @@ "e": { "type": "integer", "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -566,6 +570,10 @@ "e": { "type": "integer", "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -2348,6 +2356,10 @@ "e": { "type": "integer", "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -2417,6 +2429,10 @@ "e": { "type": "integer", "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, @@ -2498,6 +2514,10 @@ "e": { "type": "integer", "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + }, + "otc": { + "type": "boolean", + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." } } }, From a160d8974ed771cc3f8f11cccb12a74f4d1775ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 12:55:15 -0400 Subject: [PATCH 127/448] Bump types-setuptools from 57.4.17 to 57.4.18 (#240) Bumps [types-setuptools](https://github.com/python/typeshed) from 57.4.17 to 57.4.18. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 09480754..e81ddab7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "57.4.17" +version = "57.4.18" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "7be22f47ea9a37aba1d7a6b5ebd8d0c14649a03b22adf1a637408dd92d2a3894" +content-hash = "49c8e6cf60e77b425f1387402c71f94876f022fda8f25cbbbcb182d565b09352" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-57.4.17.tar.gz", hash = "sha256:9d556fcaf6808a1cead4aaa41e5c07a61f0152a875811e1239738eba4e0b7b16"}, - {file = "types_setuptools-57.4.17-py3-none-any.whl", hash = "sha256:9c7cdaf0d55113e24ac17103bde2d434472abf1dbf444238e989fe4e798ffa26"}, + {file = "types-setuptools-57.4.18.tar.gz", hash = "sha256:8ee03d823fe7fda0bd35faeae33d35cb5c25b497263e6a58b34c4cfd05f40bcf"}, + {file = "types_setuptools-57.4.18-py3-none-any.whl", hash = "sha256:9660b8774b12cd61b448e2fd87a667c02e7ec13ce9f15171f1d49a4654c4df6a"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.15.tar.gz", hash = "sha256:c89283541ef92e344b7f59f83ea9b5a295b16366ceee3f25ecfc5593c79f794e"}, diff --git a/pyproject.toml b/pyproject.toml index ec774faa..d0890f97 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.3" types-certifi = "^2021.10.8" -types-setuptools = "^57.4.17" +types-setuptools = "^57.4.18" pook = "^1.0.2" [build-system] From fc83f762162b40083d662e8dc5273a337edc081a Mon Sep 17 00:00:00 2001 From: Daniel Vetter <93154633+danielatpolygonio@users.noreply.github.com> Date: Tue, 28 Jun 2022 13:11:50 -0400 Subject: [PATCH 128/448] Add currency_symbol, base_currency_name, and base_currency_symbol attributes to TickerDetails class. (#241) * add currency_symbol, base_currency_name, and base_currency_symbol attributes to TickerDetails class. useful for forex and crypto tickers * also in the from_dict method --- polygon/rest/models/tickers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 0b5e11f0..831429ad 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -1,4 +1,5 @@ from typing import Optional, List + from ...modelclass import modelclass @@ -78,6 +79,9 @@ class TickerDetails: cik: Optional[str] = None composite_figi: Optional[str] = None currency_name: Optional[str] = None + currency_symbol: Optional[str] = None + base_currency_name: Optional[str] = None + base_currency_symbol: Optional[str] = None delisted_utc: Optional[str] = None description: Optional[str] = None ticker_root: Optional[str] = None @@ -109,6 +113,9 @@ def from_dict(d): cik=d.get("cik", None), composite_figi=d.get("composite_figi", None), currency_name=d.get("currency_name", None), + currency_symbol=d.get("currency_symbol", None), + base_currency_name=d.get("base_currency_name", None), + base_currency_symbol=d.get("base_currency_symbol", None), delisted_utc=d.get("delisted_utc", None), description=d.get("description", None), ticker_root=d.get("ticker_root", None), From ce5e5b254fd3a1d83a49866783b8148aa692398e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 12:46:46 -0400 Subject: [PATCH 129/448] Bump black from 22.3.0 to 22.6.0 (#243) --- poetry.lock | 52 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/poetry.lock b/poetry.lock index e81ddab7..659cd4fb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,7 +33,7 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "22.3.0" +version = "22.6.0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -44,7 +44,7 @@ click = ">=8.0.0" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "49c8e6cf60e77b425f1387402c71f94876f022fda8f25cbbbcb182d565b09352" +content-hash = "5b2a3931fc016801e9a72f65e203675dfa4900ae610fc83cd358729a22d4abe7" [metadata.files] alabaster = [ @@ -580,29 +580,29 @@ babel = [ {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, ] black = [ - {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, - {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"}, - {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"}, - {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"}, - {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"}, - {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"}, - {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"}, - {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"}, - {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"}, - {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"}, - {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"}, - {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"}, - {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"}, - {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"}, - {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"}, - {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"}, - {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"}, - {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"}, - {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"}, - {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"}, - {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"}, - {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"}, - {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, + {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, + {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, + {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, + {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, + {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, + {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, + {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, + {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, + {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, + {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, + {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, + {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, + {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, + {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, + {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, + {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, + {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, ] certifi = [ {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, diff --git a/pyproject.toml b/pyproject.toml index d0890f97..f8b718bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = "^10.3" certifi = "^2022.5.18" [tool.poetry.dev-dependencies] -black = "^22.3.0" +black = "^22.6.0" mypy = "^0.961" types-urllib3 = "^1.26.15" Sphinx = "^5.0.2" From a2fe1fd7a0ed9ea4ca0de166ff2eb0d0d938341e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 12:33:37 -0400 Subject: [PATCH 130/448] Bump types-urllib3 from 1.26.15 to 1.26.16 (#245) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.15 to 1.26.16. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 395 +++++++------------------------------------------ pyproject.toml | 2 +- 2 files changed, 52 insertions(+), 345 deletions(-) diff --git a/poetry.lock b/poetry.lock index 659cd4fb..d71316a8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.15" +version = "1.26.16" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -564,348 +564,55 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "5b2a3931fc016801e9a72f65e203675dfa4900ae610fc83cd358729a22d4abe7" +content-hash = "f37bbef3265cb2e315e8edff95645f5d9de514d953ffda77accafd9ae026a3f4" [metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -babel = [ - {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, - {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, -] -black = [ - {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, - {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, - {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, - {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, - {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, - {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, - {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, - {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, - {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, - {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, - {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, - {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, - {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, - {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, - {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, - {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, - {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, - {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, - {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, -] -certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -furl = [ - {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, - {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -imagesize = [ - {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, - {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, - {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, -] -importlib-resources = [ - {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, - {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, -] -jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -jsonschema = [ - {file = "jsonschema-4.5.1-py3-none-any.whl", hash = "sha256:71b5e39324422543546572954ce71c67728922c104902cb7ce252e522235b33f"}, - {file = "jsonschema-4.5.1.tar.gz", hash = "sha256:7c6d882619340c3347a1bf7315e147e6d3dae439033ae6383d6acb908c101dfc"}, -] -markupsafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -mypy = [ - {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, - {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, - {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, - {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, - {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, - {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, - {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, - {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, - {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, - {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, - {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, - {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, - {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, - {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, - {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, - {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, - {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, - {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, - {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -orderedmultidict = [ - {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, - {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, -] -pook = [ - {file = "pook-1.0.2-py2-none-any.whl", hash = "sha256:cd3cbfe280d544e672f41a5b9482883841ba247f865858b57fd59f729e37616a"}, - {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, - {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, -] -pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pyrsistent = [ - {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, - {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, - {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, - {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, -] -pytz = [ - {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, - {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, -] -requests = [ - {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, - {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -sphinx = [ - {file = "Sphinx-5.0.2-py3-none-any.whl", hash = "sha256:d3e57663eed1d7c5c50895d191fdeda0b54ded6f44d5621b50709466c338d1e8"}, - {file = "Sphinx-5.0.2.tar.gz", hash = "sha256:b18e978ea7565720f26019c702cd85c84376e948370f1cd43d60265010e1c7b0"}, -] -sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.18.3-py3-none-any.whl", hash = "sha256:20294de2a818bda04953c5cb302ec5af46138c81980ad9efa6d8fc1fc4242518"}, - {file = "sphinx_autodoc_typehints-1.18.3.tar.gz", hash = "sha256:c04d8f8d70e988960e25b206af39a90df84e7e2c085bb24e123bc3684021b313"}, -] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, - {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -types-certifi = [ - {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, - {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, -] -types-setuptools = [ - {file = "types-setuptools-57.4.18.tar.gz", hash = "sha256:8ee03d823fe7fda0bd35faeae33d35cb5c25b497263e6a58b34c4cfd05f40bcf"}, - {file = "types_setuptools-57.4.18-py3-none-any.whl", hash = "sha256:9660b8774b12cd61b448e2fd87a667c02e7ec13ce9f15171f1d49a4654c4df6a"}, -] -types-urllib3 = [ - {file = "types-urllib3-1.26.15.tar.gz", hash = "sha256:c89283541ef92e344b7f59f83ea9b5a295b16366ceee3f25ecfc5593c79f794e"}, - {file = "types_urllib3-1.26.15-py3-none-any.whl", hash = "sha256:6011befa13f901fc934f59bb1fd6973be6f3acf4ebfce427593a27e7f492918f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -urllib3 = [ - {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, - {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, -] -websockets = [ - {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, - {file = "websockets-10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500"}, - {file = "websockets-10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47"}, - {file = "websockets-10.3-cp310-cp310-win32.whl", hash = "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae"}, - {file = "websockets-10.3-cp310-cp310-win_amd64.whl", hash = "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079"}, - {file = "websockets-10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6"}, - {file = "websockets-10.3-cp37-cp37m-win32.whl", hash = "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1"}, - {file = "websockets-10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4"}, - {file = "websockets-10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36"}, - {file = "websockets-10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69"}, - {file = "websockets-10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76"}, - {file = "websockets-10.3-cp38-cp38-win32.whl", hash = "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559"}, - {file = "websockets-10.3-cp38-cp38-win_amd64.whl", hash = "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d"}, - {file = "websockets-10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094"}, - {file = "websockets-10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667"}, - {file = "websockets-10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8"}, - {file = "websockets-10.3-cp39-cp39-win32.whl", hash = "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582"}, - {file = "websockets-10.3-cp39-cp39-win_amd64.whl", hash = "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02"}, - {file = "websockets-10.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755"}, - {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, - {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, -] -xmltodict = [ - {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, - {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, -] -zipp = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, -] +alabaster = [] +attrs = [] +babel = [] +black = [] +certifi = [] +charset-normalizer = [] +click = [] +colorama = [] +docutils = [] +furl = [] +idna = [] +imagesize = [] +importlib-metadata = [] +importlib-resources = [] +jinja2 = [] +jsonschema = [] +markupsafe = [] +mypy = [] +mypy-extensions = [] +orderedmultidict = [] +packaging = [] +pathspec = [] +platformdirs = [] +pook = [] +pygments = [] +pyparsing = [] +pyrsistent = [] +pytz = [] +requests = [] +six = [] +snowballstemmer = [] +sphinx = [] +sphinx-autodoc-typehints = [] +sphinx-rtd-theme = [] +sphinxcontrib-applehelp = [] +sphinxcontrib-devhelp = [] +sphinxcontrib-htmlhelp = [] +sphinxcontrib-jsmath = [] +sphinxcontrib-qthelp = [] +sphinxcontrib-serializinghtml = [] +tomli = [] +types-certifi = [] +types-setuptools = [] +types-urllib3 = [] +typing-extensions = [] +urllib3 = [] +websockets = [] +xmltodict = [] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index f8b718bc..67742c30 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.6.0" mypy = "^0.961" -types-urllib3 = "^1.26.15" +types-urllib3 = "^1.26.16" Sphinx = "^5.0.2" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org From 62376a48ee9b78c2a98e2481acf7f91b03055167 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 12:40:04 -0400 Subject: [PATCH 131/448] Bump types-setuptools from 57.4.18 to 62.6.1 (#246) Bumps [types-setuptools](https://github.com/python/typeshed) from 57.4.18 to 62.6.1. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index d71316a8..23d9e74f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "57.4.18" +version = "62.6.1" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "f37bbef3265cb2e315e8edff95645f5d9de514d953ffda77accafd9ae026a3f4" +content-hash = "942ebbc0e32fbb0155d481391c5a5ec3116fbb7bb0cb1260c90303b57c523227" [metadata.files] alabaster = [] diff --git a/pyproject.toml b/pyproject.toml index 67742c30..e74df1a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.3" types-certifi = "^2021.10.8" -types-setuptools = "^57.4.18" +types-setuptools = "^62.6.1" pook = "^1.0.2" [build-system] From 0b47c361c58641afddd72bc9de8b5b5061bfb986 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 12:49:29 -0400 Subject: [PATCH 132/448] Bump urllib3 from 1.26.9 to 1.26.10 (#247) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.9 to 1.26.10. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/1.26.10/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.9...1.26.10) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 23d9e74f..acf8bd03 100644 --- a/poetry.lock +++ b/poetry.lock @@ -522,11 +522,11 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.9" +version = "1.26.10" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] From b537c520b72d747c6e06d79602c29542e2503924 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:13:41 -0400 Subject: [PATCH 133/448] Update specs (#248) * specs update * specs update * add optional Co-authored-by: Darcy Linde <{47221647+Darcy-Linde@users.noreply.github.com}> --- .polygon/rest.json | 9 +++++++++ polygon/rest/snapshot.py | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 9ed0490c..171aacbb 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -3999,6 +3999,15 @@ ] }, "example": "gainers" + }, + { + "name": "include_otc", + "in": "query", + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "required": false, + "schema": { + "type": "boolean" + } } ], "responses": { diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 80b2f15b..d06f5945 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -17,7 +17,7 @@ def get_snapshot_all( tickers: Optional[Union[str, List[str]]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, - include_otc: bool = False, + include_otc: Optional[bool] = False, ) -> Union[List[TickerSnapshot], HTTPResponse]: """ Get the most up-to-date market data for all traded stock symbols. @@ -26,6 +26,7 @@ def get_snapshot_all( :param market_type: Which market to get a snapshot of. :param tickers: A comma separated list of tickers to get snapshots for. + :param include_otc: Include OTC securities in the response. Default is false (don't include OTC securities). :return: List of Snapshots """ url = f"/v2/snapshot/locale/us/markets/{market_type}/tickers" @@ -44,6 +45,7 @@ def get_snapshot_direction( market_type: Optional[Union[str, SnapshotMarketType]], direction: Union[str, Direction], params: Optional[Dict[str, Any]] = None, + include_otc: Optional[bool] = False, raw: bool = False, ) -> Union[List[TickerSnapshot], HTTPResponse]: """ @@ -55,6 +57,7 @@ def get_snapshot_direction( :param market_type: Which market to get a snapshot of. :param direction: The direction ("gainers" or "losers") + :param include_otc: Include OTC securities in the response. Default is false (don't include OTC securities). :return: List of Snapshots """ url = f"/v2/snapshot/locale/us/markets/{market_type}/{direction}" From 788ef023987c1444a2939c29060e26cc3c7b7f63 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Mon, 18 Jul 2022 11:36:36 -0400 Subject: [PATCH 134/448] update rest specs (#251) Co-authored-by: Darcy Linde <{47221647+Darcy-Linde@users.noreply.github.com}> --- .polygon/rest.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 171aacbb..e9e94a0a 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -2811,7 +2811,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." }, "otc": { @@ -2996,7 +2996,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -3227,7 +3227,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." }, "otc": { @@ -4806,7 +4806,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -4977,7 +4977,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -5580,7 +5580,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -5765,7 +5765,7 @@ "description": "The volume weighted average price." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -5997,7 +5997,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -7475,7 +7475,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -7660,7 +7660,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -7891,7 +7891,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -9753,7 +9753,7 @@ "description": "The milliseconds of latency for the query results." }, "NumberOfItems": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." }, "OTC": { @@ -9895,7 +9895,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -9950,7 +9950,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." }, "otc": { @@ -10005,7 +10005,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." }, "otc": { @@ -10064,7 +10064,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -10115,7 +10115,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -10170,7 +10170,7 @@ "description": "The Unix Msec timestamp for the start of the aggregate window." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } @@ -13065,7 +13065,7 @@ "description": "The volume weighted average price." }, "n": { - "type": "number", + "type": "integer", "description": "The number of transactions in the aggregate window." } } From 9481d97da83830ca7c0b3955a602e923052ebb89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Jul 2022 12:34:20 -0400 Subject: [PATCH 135/448] Bump types-setuptools from 62.6.1 to 63.2.0 (#252) --- poetry.lock | 395 ++++++++++++++++++++++++++++++++++++++++++------- pyproject.toml | 2 +- 2 files changed, 345 insertions(+), 52 deletions(-) diff --git a/poetry.lock b/poetry.lock index acf8bd03..97813fae 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "62.6.1" +version = "63.2.0" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,55 +564,348 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "942ebbc0e32fbb0155d481391c5a5ec3116fbb7bb0cb1260c90303b57c523227" +content-hash = "39bb14430a60c46f75f9b0bf547d379db9dcaf8a0064eeb5942b52f771d334a7" [metadata.files] -alabaster = [] -attrs = [] -babel = [] -black = [] -certifi = [] -charset-normalizer = [] -click = [] -colorama = [] -docutils = [] -furl = [] -idna = [] -imagesize = [] -importlib-metadata = [] -importlib-resources = [] -jinja2 = [] -jsonschema = [] -markupsafe = [] -mypy = [] -mypy-extensions = [] -orderedmultidict = [] -packaging = [] -pathspec = [] -platformdirs = [] -pook = [] -pygments = [] -pyparsing = [] -pyrsistent = [] -pytz = [] -requests = [] -six = [] -snowballstemmer = [] -sphinx = [] -sphinx-autodoc-typehints = [] -sphinx-rtd-theme = [] -sphinxcontrib-applehelp = [] -sphinxcontrib-devhelp = [] -sphinxcontrib-htmlhelp = [] -sphinxcontrib-jsmath = [] -sphinxcontrib-qthelp = [] -sphinxcontrib-serializinghtml = [] -tomli = [] -types-certifi = [] -types-setuptools = [] -types-urllib3 = [] -typing-extensions = [] -urllib3 = [] -websockets = [] -xmltodict = [] -zipp = [] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +babel = [ + {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, + {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, +] +black = [ + {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, + {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, + {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, + {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, + {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, + {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, + {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, + {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, + {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, + {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, + {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, + {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, + {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, + {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, + {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, + {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, + {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, + {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, + {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, + {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, + {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, +] +certifi = [ + {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, + {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +furl = [ + {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, + {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +imagesize = [ + {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, + {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, + {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, +] +importlib-resources = [ + {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, + {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, +] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] +jsonschema = [ + {file = "jsonschema-4.5.1-py3-none-any.whl", hash = "sha256:71b5e39324422543546572954ce71c67728922c104902cb7ce252e522235b33f"}, + {file = "jsonschema-4.5.1.tar.gz", hash = "sha256:7c6d882619340c3347a1bf7315e147e6d3dae439033ae6383d6acb908c101dfc"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] +mypy = [ + {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, + {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, + {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, + {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, + {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, + {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, + {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, + {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, + {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, + {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, + {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, + {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, + {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, + {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, + {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, + {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, + {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, + {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, + {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, + {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, + {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, + {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, + {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +orderedmultidict = [ + {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, + {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +platformdirs = [ + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] +pook = [ + {file = "pook-1.0.2-py2-none-any.whl", hash = "sha256:cd3cbfe280d544e672f41a5b9482883841ba247f865858b57fd59f729e37616a"}, + {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, + {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, +] +pygments = [ + {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, + {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pyrsistent = [ + {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, + {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, + {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, + {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, +] +pytz = [ + {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, + {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, +] +requests = [ + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [ + {file = "Sphinx-5.0.2-py3-none-any.whl", hash = "sha256:d3e57663eed1d7c5c50895d191fdeda0b54ded6f44d5621b50709466c338d1e8"}, + {file = "Sphinx-5.0.2.tar.gz", hash = "sha256:b18e978ea7565720f26019c702cd85c84376e948370f1cd43d60265010e1c7b0"}, +] +sphinx-autodoc-typehints = [ + {file = "sphinx_autodoc_typehints-1.18.3-py3-none-any.whl", hash = "sha256:20294de2a818bda04953c5cb302ec5af46138c81980ad9efa6d8fc1fc4242518"}, + {file = "sphinx_autodoc_typehints-1.18.3.tar.gz", hash = "sha256:c04d8f8d70e988960e25b206af39a90df84e7e2c085bb24e123bc3684021b313"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, + {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +types-certifi = [ + {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, + {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, +] +types-setuptools = [ + {file = "types-setuptools-63.2.0.tar.gz", hash = "sha256:fc9a6c4776a398d0f57b259ca893748342174c52a35d593d08b56f52aa99c1a4"}, + {file = "types_setuptools-63.2.0-py3-none-any.whl", hash = "sha256:f9d0d0443dd344cad78da04320a3fb7837d4dd3f3ef4b25d3e0958edea6da812"}, +] +types-urllib3 = [ + {file = "types-urllib3-1.26.16.tar.gz", hash = "sha256:8bb3832c684c30cbed40b96e28bc04703becb2b97d82ac65ba4b968783453b0e"}, + {file = "types_urllib3-1.26.16-py3-none-any.whl", hash = "sha256:20588c285e5ca336d908d2705994830a83cfb6bda40fc356bbafaf430a262013"}, +] +typing-extensions = [ + {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, + {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, +] +urllib3 = [ + {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, + {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, +] +websockets = [ + {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, + {file = "websockets-10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500"}, + {file = "websockets-10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8"}, + {file = "websockets-10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f"}, + {file = "websockets-10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47"}, + {file = "websockets-10.3-cp310-cp310-win32.whl", hash = "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae"}, + {file = "websockets-10.3-cp310-cp310-win_amd64.whl", hash = "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079"}, + {file = "websockets-10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79"}, + {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e"}, + {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6"}, + {file = "websockets-10.3-cp37-cp37m-win32.whl", hash = "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1"}, + {file = "websockets-10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36"}, + {file = "websockets-10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69"}, + {file = "websockets-10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c"}, + {file = "websockets-10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442"}, + {file = "websockets-10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76"}, + {file = "websockets-10.3-cp38-cp38-win32.whl", hash = "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559"}, + {file = "websockets-10.3-cp38-cp38-win_amd64.whl", hash = "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094"}, + {file = "websockets-10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667"}, + {file = "websockets-10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680"}, + {file = "websockets-10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3"}, + {file = "websockets-10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8"}, + {file = "websockets-10.3-cp39-cp39-win32.whl", hash = "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582"}, + {file = "websockets-10.3-cp39-cp39-win_amd64.whl", hash = "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02"}, + {file = "websockets-10.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4"}, + {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755"}, + {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, + {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, +] +xmltodict = [ + {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, + {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, +] +zipp = [ + {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, + {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, +] diff --git a/pyproject.toml b/pyproject.toml index e74df1a7..05a7aae6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.3" types-certifi = "^2021.10.8" -types-setuptools = "^62.6.1" +types-setuptools = "^63.2.0" pook = "^1.0.2" [build-system] From e1768c1a1bb9d3e76bef2214729a542efab05fbe Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Fri, 22 Jul 2022 11:03:43 -0400 Subject: [PATCH 136/448] Log expection message (#253) --- polygon/websocket/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 5b9b283f..b8ed4775 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -132,11 +132,11 @@ async def connect( if len(cmsg) > 0: await processor(cmsg) # type: ignore - except ConnectionClosedOK: - logger.debug("connection closed (OK)") + except ConnectionClosedOK as e: + logger.debug("connection closed (OK): %s", e) return - except ConnectionClosedError: - logger.debug("connection closed (ERR)") + except ConnectionClosedError as e: + logger.debug("connection closed (ERR): %s", e) reconnects += 1 self.scheduled_subs = set(self.subs) self.subs = set() From 3088b8c687ed2114444c97ea3df49904ffcfdd51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Jul 2022 12:51:05 -0400 Subject: [PATCH 137/448] Bump sphinx from 5.0.2 to 5.1.0 (#257) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.0.2 to 5.1.0. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/5.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.0.2...v5.1.0) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 26 +++++++++++++------------- pyproject.toml | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/poetry.lock b/poetry.lock index 97813fae..4f851984 100644 --- a/poetry.lock +++ b/poetry.lock @@ -349,7 +349,7 @@ python-versions = "*" [[package]] name = "sphinx" -version = "5.0.2" +version = "5.1.0" description = "Python documentation generator" category = "dev" optional = false @@ -359,7 +359,7 @@ python-versions = ">=3.6" alabaster = ">=0.7,<0.8" babel = ">=1.3" colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.19" +docutils = ">=0.14,<0.20" imagesize = "*" importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} Jinja2 = ">=2.3" @@ -376,7 +376,7 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.950)", "docutils-stubs", "types-typed-ast", "types-requests"] +lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "isort", "mypy (>=0.971)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] @@ -407,7 +407,7 @@ docutils = "<0.18" sphinx = ">=1.6" [package.extras] -dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] [[package]] name = "sphinxcontrib-applehelp" @@ -418,8 +418,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-devhelp" @@ -430,8 +430,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" @@ -442,8 +442,8 @@ optional = false python-versions = ">=3.6" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] +test = ["html5lib", "pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-jsmath" @@ -454,7 +454,7 @@ optional = false python-versions = ">=3.5" [package.extras] -test = ["pytest", "flake8", "mypy"] +test = ["mypy", "flake8", "pytest"] [[package]] name = "sphinxcontrib-qthelp" @@ -465,8 +465,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-serializinghtml" @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "39bb14430a60c46f75f9b0bf547d379db9dcaf8a0064eeb5942b52f771d334a7" +content-hash = "683b446f685967eeddaab9d208aff3fd80f55822c490856423cbb0813f9f23df" [metadata.files] alabaster = [ @@ -792,8 +792,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] sphinx = [ - {file = "Sphinx-5.0.2-py3-none-any.whl", hash = "sha256:d3e57663eed1d7c5c50895d191fdeda0b54ded6f44d5621b50709466c338d1e8"}, - {file = "Sphinx-5.0.2.tar.gz", hash = "sha256:b18e978ea7565720f26019c702cd85c84376e948370f1cd43d60265010e1c7b0"}, + {file = "Sphinx-5.1.0-py3-none-any.whl", hash = "sha256:50661b4dbe6a4a1ac15692a7b6db48671da6bae1d4d507e814f1b8525b6bba86"}, + {file = "Sphinx-5.1.0.tar.gz", hash = "sha256:7893d10d9d852c16673f9b1b7e9eda1606b420b7810270294d6e4b44c0accacc"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.18.3-py3-none-any.whl", hash = "sha256:20294de2a818bda04953c5cb302ec5af46138c81980ad9efa6d8fc1fc4242518"}, diff --git a/pyproject.toml b/pyproject.toml index 05a7aae6..9ed3589a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.6.0" mypy = "^0.961" types-urllib3 = "^1.26.16" -Sphinx = "^5.0.2" +Sphinx = "^5.1.0" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.3" From 91ad258963e76a8ea6423cfa0ce24aab95901cac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Jul 2022 13:15:12 -0400 Subject: [PATCH 138/448] Bump mypy from 0.961 to 0.971 (#258) Bumps [mypy](https://github.com/python/mypy) from 0.961 to 0.971. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.961...v0.971) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 50 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4f851984..6d3b68b4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -199,7 +199,7 @@ python-versions = ">=3.7" [[package]] name = "mypy" -version = "0.961" +version = "0.971" description = "Optional static typing for Python" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "683b446f685967eeddaab9d208aff3fd80f55822c490856423cbb0813f9f23df" +content-hash = "1f184b6399815a9a43868424bb77188ba49f019f0efd5ddf997e35d56f74f808" [metadata.files] alabaster = [ @@ -695,29 +695,29 @@ markupsafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mypy = [ - {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"}, - {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"}, - {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"}, - {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"}, - {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"}, - {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"}, - {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"}, - {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"}, - {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"}, - {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"}, - {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"}, - {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"}, - {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"}, - {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"}, - {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"}, - {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"}, - {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"}, - {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"}, - {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"}, - {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"}, - {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"}, + {file = "mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c"}, + {file = "mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5"}, + {file = "mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3"}, + {file = "mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655"}, + {file = "mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103"}, + {file = "mypy-0.971-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca"}, + {file = "mypy-0.971-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417"}, + {file = "mypy-0.971-cp36-cp36m-win_amd64.whl", hash = "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09"}, + {file = "mypy-0.971-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8"}, + {file = "mypy-0.971-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0"}, + {file = "mypy-0.971-cp37-cp37m-win_amd64.whl", hash = "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2"}, + {file = "mypy-0.971-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27"}, + {file = "mypy-0.971-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856"}, + {file = "mypy-0.971-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71"}, + {file = "mypy-0.971-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27"}, + {file = "mypy-0.971-cp38-cp38-win_amd64.whl", hash = "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58"}, + {file = "mypy-0.971-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6"}, + {file = "mypy-0.971-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe"}, + {file = "mypy-0.971-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9"}, + {file = "mypy-0.971-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf"}, + {file = "mypy-0.971-cp39-cp39-win_amd64.whl", hash = "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0"}, + {file = "mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9"}, + {file = "mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, diff --git a/pyproject.toml b/pyproject.toml index 9ed3589a..4719217d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.6.0" -mypy = "^0.961" +mypy = "^0.971" types-urllib3 = "^1.26.16" Sphinx = "^5.1.0" sphinx-rtd-theme = "^1.0.0" From 368de8a83b3a2ad81ca6cab0ae87813b230d7380 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Jul 2022 15:25:31 -0400 Subject: [PATCH 139/448] Bump types-setuptools from 63.2.0 to 63.2.1 (#259) Bumps [types-setuptools](https://github.com/python/typeshed) from 63.2.0 to 63.2.1. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6d3b68b4..a2a8f8f5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "63.2.0" +version = "63.2.1" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "1f184b6399815a9a43868424bb77188ba49f019f0efd5ddf997e35d56f74f808" +content-hash = "afa066797c33851d5448d97c2abed812b7ee44b01387a31c7422134f60d97d58" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-63.2.0.tar.gz", hash = "sha256:fc9a6c4776a398d0f57b259ca893748342174c52a35d593d08b56f52aa99c1a4"}, - {file = "types_setuptools-63.2.0-py3-none-any.whl", hash = "sha256:f9d0d0443dd344cad78da04320a3fb7837d4dd3f3ef4b25d3e0958edea6da812"}, + {file = "types-setuptools-63.2.1.tar.gz", hash = "sha256:2957a40addfca5c7125fd8d386a9efda5379098c6e66a08e02257fd1cea42131"}, + {file = "types_setuptools-63.2.1-py3-none-any.whl", hash = "sha256:eca7cbdd8db15e0ec37174a7dcfc9c8cbc87106f453066340e31729ec853cd63"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.16.tar.gz", hash = "sha256:8bb3832c684c30cbed40b96e28bc04703becb2b97d82ac65ba4b968783453b0e"}, diff --git a/pyproject.toml b/pyproject.toml index 4719217d..bb2812ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.3" types-certifi = "^2021.10.8" -types-setuptools = "^63.2.0" +types-setuptools = "^63.2.1" pook = "^1.0.2" [build-system] From a776ec7b0e5cdbe26186d29f2c9bbac2a7551cd6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 12:34:32 -0400 Subject: [PATCH 140/448] Bump sphinx from 5.1.0 to 5.1.1 (#266) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index a2a8f8f5..27fe6c64 100644 --- a/poetry.lock +++ b/poetry.lock @@ -349,7 +349,7 @@ python-versions = "*" [[package]] name = "sphinx" -version = "5.1.0" +version = "5.1.1" description = "Python documentation generator" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "afa066797c33851d5448d97c2abed812b7ee44b01387a31c7422134f60d97d58" +content-hash = "f899aa2f4bdb48923e1b431ef6260e7997eb2880d5d844b1004443ea2f46020e" [metadata.files] alabaster = [ @@ -792,8 +792,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] sphinx = [ - {file = "Sphinx-5.1.0-py3-none-any.whl", hash = "sha256:50661b4dbe6a4a1ac15692a7b6db48671da6bae1d4d507e814f1b8525b6bba86"}, - {file = "Sphinx-5.1.0.tar.gz", hash = "sha256:7893d10d9d852c16673f9b1b7e9eda1606b420b7810270294d6e4b44c0accacc"}, + {file = "Sphinx-5.1.1-py3-none-any.whl", hash = "sha256:309a8da80cb6da9f4713438e5b55861877d5d7976b69d87e336733637ea12693"}, + {file = "Sphinx-5.1.1.tar.gz", hash = "sha256:ba3224a4e206e1fbdecf98a4fae4992ef9b24b85ebf7b584bb340156eaf08d89"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.18.3-py3-none-any.whl", hash = "sha256:20294de2a818bda04953c5cb302ec5af46138c81980ad9efa6d8fc1fc4242518"}, diff --git a/pyproject.toml b/pyproject.toml index bb2812ff..da9517be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.6.0" mypy = "^0.971" types-urllib3 = "^1.26.16" -Sphinx = "^5.1.0" +Sphinx = "^5.1.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.3" From c8d16521e1ceaeb7260ac8a6361b612bd2b6a0ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:12:40 -0400 Subject: [PATCH 141/448] Bump urllib3 from 1.26.10 to 1.26.11 (#265) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.10 to 1.26.11. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.10...1.26.11) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 27fe6c64..73d7bf41 100644 --- a/poetry.lock +++ b/poetry.lock @@ -522,7 +522,7 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.10" +version = "1.26.11" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false @@ -848,8 +848,8 @@ typing-extensions = [ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, ] urllib3 = [ - {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, - {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, + {file = "urllib3-1.26.11-py2.py3-none-any.whl", hash = "sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc"}, + {file = "urllib3-1.26.11.tar.gz", hash = "sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a"}, ] websockets = [ {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, From acb350a9ac57b7fc8f50d7d5b7c84e6470b9bc87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:28:56 -0400 Subject: [PATCH 142/448] Bump types-setuptools from 63.2.1 to 63.2.2 (#262) Bumps [types-setuptools](https://github.com/python/typeshed) from 63.2.1 to 63.2.2. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 73d7bf41..76b4835e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "63.2.1" +version = "63.2.2" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "f899aa2f4bdb48923e1b431ef6260e7997eb2880d5d844b1004443ea2f46020e" +content-hash = "27324d8d6c8ce180fcd8fdbadc440bb47a7f8f76ea105b45d762929e19644e05" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-63.2.1.tar.gz", hash = "sha256:2957a40addfca5c7125fd8d386a9efda5379098c6e66a08e02257fd1cea42131"}, - {file = "types_setuptools-63.2.1-py3-none-any.whl", hash = "sha256:eca7cbdd8db15e0ec37174a7dcfc9c8cbc87106f453066340e31729ec853cd63"}, + {file = "types-setuptools-63.2.2.tar.gz", hash = "sha256:a9aa0c01d5f3443cd544026d5ffc97b95ddadf731dab13419c393d43fd8617c0"}, + {file = "types_setuptools-63.2.2-py3-none-any.whl", hash = "sha256:a370df7a1e0dc856af9d998234f6e2ab04f30f25b8e1410f6db65910979f6252"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.16.tar.gz", hash = "sha256:8bb3832c684c30cbed40b96e28bc04703becb2b97d82ac65ba4b968783453b0e"}, diff --git a/pyproject.toml b/pyproject.toml index da9517be..31154587 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.18.3" types-certifi = "^2021.10.8" -types-setuptools = "^63.2.1" +types-setuptools = "^63.2.2" pook = "^1.0.2" [build-system] From 59b307d4003e095b8478e89941a35f9dd4422e7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 14:01:52 -0400 Subject: [PATCH 143/448] Bump types-urllib3 from 1.26.16 to 1.26.20 (#263) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.16 to 1.26.20. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 76b4835e..8dd585a5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.16" +version = "1.26.20" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "27324d8d6c8ce180fcd8fdbadc440bb47a7f8f76ea105b45d762929e19644e05" +content-hash = "fe72000ba507dd91ecc9600b2b8592c2c028f8ca336b1cccaaa39980c0cacb4a" [metadata.files] alabaster = [ @@ -840,8 +840,8 @@ types-setuptools = [ {file = "types_setuptools-63.2.2-py3-none-any.whl", hash = "sha256:a370df7a1e0dc856af9d998234f6e2ab04f30f25b8e1410f6db65910979f6252"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.16.tar.gz", hash = "sha256:8bb3832c684c30cbed40b96e28bc04703becb2b97d82ac65ba4b968783453b0e"}, - {file = "types_urllib3-1.26.16-py3-none-any.whl", hash = "sha256:20588c285e5ca336d908d2705994830a83cfb6bda40fc356bbafaf430a262013"}, + {file = "types-urllib3-1.26.20.tar.gz", hash = "sha256:1fb6e2af519a7216a19dd6be8cd2ee787b402a754ccb4a13ca1c0e5b202aea5a"}, + {file = "types_urllib3-1.26.20-py3-none-any.whl", hash = "sha256:6249b6223226cb2012db3b4ff6945c9cb0e12ece9b24f5e29787c4f05028a979"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, diff --git a/pyproject.toml b/pyproject.toml index 31154587..7da207b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.6.0" mypy = "^0.971" -types-urllib3 = "^1.26.16" +types-urllib3 = "^1.26.20" Sphinx = "^5.1.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org From c65cfe3cbb1d545472ca1f4b916c41f32e4b4b26 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Mon, 1 Aug 2022 14:05:23 -0400 Subject: [PATCH 144/448] Fix locale for crypto snapshot (#268) * Fix locale for crypto snapshot * Fix enum --- polygon/rest/snapshot.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index d06f5945..7b58ab9a 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -10,10 +10,17 @@ from urllib3 import HTTPResponse +def get_locale(market_type: Union[SnapshotMarketType, str]): + if market_type == SnapshotMarketType.STOCKS.value: + return "us" + + return "global" + + class SnapshotClient(BaseClient): def get_snapshot_all( self, - market_type: Optional[Union[str, SnapshotMarketType]], + market_type: Union[str, SnapshotMarketType], tickers: Optional[Union[str, List[str]]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, @@ -29,7 +36,8 @@ def get_snapshot_all( :param include_otc: Include OTC securities in the response. Default is false (don't include OTC securities). :return: List of Snapshots """ - url = f"/v2/snapshot/locale/us/markets/{market_type}/tickers" + locale = get_locale(market_type) + url = f"/v2/snapshot/locale/{locale}/markets/{market_type}/tickers" if type(tickers) is list: tickers = ",".join(tickers) return self._get( @@ -42,7 +50,7 @@ def get_snapshot_all( def get_snapshot_direction( self, - market_type: Optional[Union[str, SnapshotMarketType]], + market_type: Union[str, SnapshotMarketType], direction: Union[str, Direction], params: Optional[Dict[str, Any]] = None, include_otc: Optional[bool] = False, @@ -60,7 +68,8 @@ def get_snapshot_direction( :param include_otc: Include OTC securities in the response. Default is false (don't include OTC securities). :return: List of Snapshots """ - url = f"/v2/snapshot/locale/us/markets/{market_type}/{direction}" + locale = get_locale(market_type) + url = f"/v2/snapshot/locale/{locale}/markets/{market_type}/{direction}" return self._get( path=url, params=self._get_params(self.get_snapshot_direction, locals()), @@ -71,7 +80,7 @@ def get_snapshot_direction( def get_snapshot_ticker( self, - market_type: Optional[Union[str, SnapshotMarketType]], + market_type: Union[str, SnapshotMarketType], ticker: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, @@ -85,7 +94,8 @@ def get_snapshot_ticker( :param ticker: The ticker symbol. :return: List of Snapshots """ - url = f"/v2/snapshot/locale/us/markets/{market_type}/tickers/{ticker}" + locale = get_locale(market_type) + url = f"/v2/snapshot/locale/{locale}/markets/{market_type}/tickers/{ticker}" return self._get( path=url, params=self._get_params(self.get_snapshot_ticker, locals()), From 13538ceb4e77d92c9a26faace8afe2c9a4a3ebfd Mon Sep 17 00:00:00 2001 From: Aaron Itzkovitz <19159499+aitzkovitz@users.noreply.github.com> Date: Mon, 1 Aug 2022 14:05:49 -0400 Subject: [PATCH 145/448] add starterfeed (#254) Co-authored-by: clickingbuttons --- polygon/websocket/models/common.py | 1 + 1 file changed, 1 insertion(+) diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index 635e15fb..ee02cc1f 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -7,6 +7,7 @@ class Feed(Enum): Nasdaq = "nasdaqfeed.polygon.io" PolyFeed = "polyfeed.polygon.io" PolyFeedPlus = "polyfeedplus.polygon.io" + StarterFeed = "starterfeed.polygon.io" class Market(Enum): From b34f0345a70fdb026e150ebc3bfd172cbbe46b54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 14:08:27 -0400 Subject: [PATCH 146/448] Bump sphinx-autodoc-typehints from 1.18.3 to 1.19.1 (#264) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.18.3 to 1.19.1. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.18.3...1.19.1) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8dd585a5..5d57d048 100644 --- a/poetry.lock +++ b/poetry.lock @@ -381,7 +381,7 @@ test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.18.3" +version = "1.19.1" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "fe72000ba507dd91ecc9600b2b8592c2c028f8ca336b1cccaaa39980c0cacb4a" +content-hash = "090a4f12c5c0dd76557b7c7d55095098b802b0e5be87cf56a64a38ab0ab20a4f" [metadata.files] alabaster = [ @@ -796,8 +796,8 @@ sphinx = [ {file = "Sphinx-5.1.1.tar.gz", hash = "sha256:ba3224a4e206e1fbdecf98a4fae4992ef9b24b85ebf7b584bb340156eaf08d89"}, ] sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.18.3-py3-none-any.whl", hash = "sha256:20294de2a818bda04953c5cb302ec5af46138c81980ad9efa6d8fc1fc4242518"}, - {file = "sphinx_autodoc_typehints-1.18.3.tar.gz", hash = "sha256:c04d8f8d70e988960e25b206af39a90df84e7e2c085bb24e123bc3684021b313"}, + {file = "sphinx_autodoc_typehints-1.19.1-py3-none-any.whl", hash = "sha256:9be46aeeb1b315eb5df1f3a7cb262149895d16c7d7dcd77b92513c3c3a1e85e6"}, + {file = "sphinx_autodoc_typehints-1.19.1.tar.gz", hash = "sha256:6c841db55e0e9be0483ff3962a2152b60e79306f4288d8c4e7e86ac84486a5ea"}, ] sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, diff --git a/pyproject.toml b/pyproject.toml index 7da207b0..0b19e8a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.20" Sphinx = "^5.1.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.18.3" +sphinx-autodoc-typehints = "^1.19.1" types-certifi = "^2021.10.8" types-setuptools = "^63.2.2" pook = "^1.0.2" From 2680dbb3e1177ae4d53ee60ff6b8f7de97e1d967 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Mon, 1 Aug 2022 14:25:41 -0400 Subject: [PATCH 147/448] update contributing (#269) --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d9e2a0bc..bf0cb001 100644 --- a/README.md +++ b/README.md @@ -17,10 +17,13 @@ section in our docs or view the [examples](./examples) directory. ## Contributing -For now, we're generally not accepting pull requests from outside contributors -but we're open to bug reports and feature requests. Or if you have more general -feedback, feel free to reach out on -our [Slack channel](https://polygon.io/contact). +If you found a bug or have an idea for a new feature, please first discuss it with us by +[submitting a new issue](https://github.com/polygon-io/client-python/issues/new/choose). +We're also open to volunteers if you want to submit a PR for any open issues but +please discuss it with us beforehand. PRs that aren't linked to an existing issue or +discussed with us ahead of time will generally be declined. If you have more general +feedback or want to discuss using this client with other users, feel free to reach out +on our [Slack channel](https://polygon-io.slack.com/archives/C03FRFN7UF3). ## Release planning This client will attempt to follow the release cadence of our API. From 0a3cbf4a6151026bc60a2e85df6e7a3f61c6f1d7 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Wed, 3 Aug 2022 10:40:29 -0400 Subject: [PATCH 148/448] fix otc field in ws equity agg (#274) --- polygon/websocket/models/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 937aa7a1..4f40e7ac 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -39,7 +39,7 @@ def from_dict(d): d.get("z", None), d.get("s", None), d.get("e", None), - d.get("o", None), + d.get("otc", None), ) From 595d44c68aa7a416ea98f7eb421335c480603d2f Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Wed, 3 Aug 2022 10:42:35 -0400 Subject: [PATCH 149/448] add indicators to ws equity model (#272) --- .polygon/websocket.json | 19 +++++++++++++++++++ polygon/websocket/models/models.py | 2 ++ 2 files changed, 21 insertions(+) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 9fd91c98..a7feaf84 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -292,6 +292,14 @@ "type": "integer", "description": "The condition." }, + "i": { + "type": "array", + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "type": "integer", + "description": "The indicator code.\n" + } + }, "t": { "type": "integer", "description": "The Timestamp in Unix MS." @@ -312,6 +320,9 @@ "ap": 114.128, "as": 160, "c": 0, + "i": [ + 604 + ], "t": 1536036818784, "z": 3 } @@ -2282,6 +2293,14 @@ "type": "integer", "description": "The condition." }, + "i": { + "type": "array", + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "type": "integer", + "description": "The indicator code.\n" + } + }, "t": { "type": "integer", "description": "The Timestamp in Unix MS." diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 4f40e7ac..41d85bdc 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -145,6 +145,7 @@ class EquityQuote: ask_price: Optional[float] = None ask_size: Optional[int] = None condition: Optional[int] = None + indicators: Optional[List[int]] = None timestamp: Optional[int] = None tape: Optional[int] = None sequence_number: Optional[int] = None @@ -161,6 +162,7 @@ def from_dict(d): d.get("ap", None), d.get("as", None), d.get("c", None), + d.get("i", None), d.get("t", None), d.get("z", None), d.get("q", None), From 9eafa40c0f01e9302f57a5698c637c605023a3bd Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Wed, 3 Aug 2022 10:55:26 -0400 Subject: [PATCH 150/448] Fix docstring (#273) * fix docstring * add extra comments Co-authored-by: Darcy Linde <{47221647+Darcy-Linde@users.noreply.github.com}> --- polygon/rest/trades.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 16b19d87..96eb0148 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -77,12 +77,13 @@ def get_last_crypto_trade( raw: bool = False, ) -> Union[CryptoTrade, HTTPResponse]: """ - Get the most recent trade for a ticker. + Get the last trade tick for a cryptocurrency pair. - :param ticker: The ticker symbol of the asset + :param from_: The "from" symbol of the pair. + :param to: The "to" symbol of the pair. :param params: Any additional query params :param raw: Return raw object instead of results object - :return: Last trade + :return: Last crypto trade """ url = f"/v1/last/crypto/{from_}/{to}" From d26697c254d3a7b3d8a61774fbad6f507f419c9c Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Wed, 3 Aug 2022 11:39:19 -0400 Subject: [PATCH 151/448] use full rest api spec (#271) --- .polygon/rest.json | 29746 ++++++++++++++++++++++++++----------------- 1 file changed, 18093 insertions(+), 11653 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index e9e94a0a..952f2e95 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -1,4010 +1,5573 @@ { - "openapi": "3.0.3", - "info": { - "title": "Polygon API", - "description": "The future of fintech.", - "version": "1.0.0" - }, - "servers": [ - { - "url": "https://api.polygon.io", - "description": "Polygon Platform API" - }, - { - "url": "https://api.staging.polygon.io", - "description": "Polygon Platform API (Staging)" - } - ], - "x-polygon-order": { - "stocks": { - "market": [ - { - "paths": [ - "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}" - ] - }, - { - "paths": [ - "/v2/aggs/grouped/locale/us/market/stocks/{date}" - ] - }, - { - "paths": [ - "/v1/open-close/{stocksTicker}/{date}" - ] - }, - { - "paths": [ - "/v2/aggs/ticker/{stocksTicker}/prev" - ] - }, - { - "paths": [ - "/v3/trades/{stockTicker}" - ] - }, - { - "paths": [ - "/v2/ticks/stocks/trades/{ticker}/{date}" - ] - }, - { - "paths": [ - "/v2/last/trade/{stocksTicker}" - ] - }, - { - "paths": [ - "/v3/quotes/{stockTicker}" - ] - }, - { - "paths": [ - "/v2/ticks/stocks/nbbo/{ticker}/{date}" - ] - }, - { - "paths": [ - "/v2/last/nbbo/{stocksTicker}" - ] - }, - { - "paths": [ - "/v2/snapshot/locale/us/markets/stocks/tickers", - "/v2/snapshot/locale/us/markets/stocks/{direction}", - "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}" - ], - "group": "Snapshots" + "components": { + "parameters": { + "AggregateAdjusted": { + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "type": "boolean" } - ], - "reference": [ - { - "paths": [ - "/v3/reference/tickers" - ] - }, - { - "paths": [ - "/v1/meta/symbols/{stocksTicker}/company" - ] - }, - { - "paths": [ - "/v3/reference/tickers/{ticker}" - ] - }, - { - "paths": [ - "/v2/reference/news" - ] - }, - { - "paths": [ - "/v3/reference/tickers/types" - ] - }, - { - "paths": [ - "/v1/marketstatus/upcoming" - ] - }, - { - "paths": [ - "/v1/marketstatus/now" - ] - }, - { - "paths": [ - "/v1/reference/sec/filings", - "/v1/reference/sec/filings/{filing_id}", - "/v1/reference/sec/filings/{filing_id}/files", - "/v1/reference/sec/filings/{filing_id}/files/{file_id}" - ], - "group": "SEC Filings" - }, - { - "paths": [ - "/v3/reference/splits" - ] - }, - { - "paths": [ - "/v3/reference/dividends" - ] - }, - { - "paths": [ - "/vX/reference/financials" - ] - }, - { - "paths": [ - "/v3/reference/conditions" - ] - }, - { - "paths": [ - "/v3/reference/exchanges" - ] + }, + "AggregateDate": { + "description": "The beginning date for the aggregate window.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, + "schema": { + "type": "string" } - ] - }, - "options": { - "market": [ - { - "paths": [ - "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}" - ] - }, - { - "paths": [ - "/v1/open-close/{optionsTicker}/{date}" - ] - }, - { - "paths": [ - "/v2/aggs/ticker/{optionsTicker}/prev" - ] - }, - { - "paths": [ - "/v3/trades/{optionsTicker}" - ] - }, - { - "paths": [ - "/v2/last/trade/{optionsTicker}" - ] - }, - { - "paths": [ - "/v3/quotes/{optionsTicker}" + }, + "AggregateLimitMax50000": { + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "example": 120, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + }, + "AggregateMultiplier": { + "description": "The size of the timespan multiplier.", + "example": 1, + "in": "path", + "name": "multiplier", + "required": true, + "schema": { + "type": "integer" + } + }, + "AggregateSort": { + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc", + "in": "query", + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" ] - }, - { - "paths": [ - "/v3/snapshot/options/{underlyingAsset}/{optionContract}", - "/v3/snapshot/options/{underlyingAsset}" + } + }, + "AggregateTimeFrom": { + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + "AggregateTimeTo": { + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + "AggregateTimespan": { + "description": "The size of the time window.", + "example": "day", + "in": "path", + "name": "timespan", + "required": true, + "schema": { + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" ], - "group": "Snapshots" + "type": "string" } - ], - "reference": [ - { - "paths": [ - "/v3/reference/options/contracts/{options_ticker}" - ] - }, - { - "paths": [ - "/v3/reference/options/contracts" - ] - }, - { - "paths": [ - "/v3/reference/tickers" - ] - }, - { - "paths": [ - "/v1/meta/symbols/{stocksTicker}/company" - ] - }, - { - "paths": [ - "/v3/reference/tickers/{ticker}" - ] - }, - { - "paths": [ - "/v2/reference/news" - ] - }, - { - "paths": [ - "/v3/reference/tickers/types" - ] - }, - { - "paths": [ - "/v1/marketstatus/upcoming" - ] - }, - { - "paths": [ - "/v1/marketstatus/now" - ] - }, - { - "paths": [ - "/v3/reference/conditions" - ] - }, - { - "paths": [ - "/v3/reference/exchanges" - ] + }, + "CryptoTickerPathParam": { + "description": "The ticker symbol of the currency pair.", + "example": "X:BTCUSD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" } - ] - }, - "fx": { - "market": [ - { - "paths": [ - "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}" - ] - }, - { - "paths": [ - "/v2/aggs/grouped/locale/global/market/fx/{date}" - ] - }, - { - "paths": [ - "/v2/aggs/ticker/{forexTicker}/prev" - ] - }, - { - "paths": [ - "/v3/quotes/{fxTicker}" - ] - }, - { - "paths": [ - "/v1/historic/forex/{from}/{to}/{date}" - ] - }, - { - "paths": [ - "/v1/last_quote/currencies/{from}/{to}" - ] - }, - { - "paths": [ - "/v1/conversion/{from}/{to}" - ] - }, - { - "paths": [ - "/v2/snapshot/locale/global/markets/forex/tickers", - "/v2/snapshot/locale/global/markets/forex/{direction}", - "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" - ], - "group": "Snapshots" + }, + "ForexTickerPathParam": { + "description": "The ticker symbol of the currency pair.", + "example": "C:EURUSD", + "in": "path", + "name": "forexTicker", + "required": true, + "schema": { + "type": "string" } - ], - "reference": [ - { - "paths": [ - "/v3/reference/tickers" - ] - }, - { - "paths": [ - "/v1/marketstatus/upcoming" - ] - }, - { - "paths": [ - "/v1/marketstatus/now" - ] - }, - { - "paths": [ - "/v3/reference/conditions" - ] - }, - { - "paths": [ - "/v3/reference/exchanges" - ] + }, + "GeneralTickerPathParam": { + "description": "The ticker symbol of the asset.", + "example": "AAPL", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" } - ] - }, - "crypto": { - "market": [ - { - "paths": [ - "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}" - ] - }, - { - "paths": [ - "/v2/aggs/grouped/locale/global/market/crypto/{date}" - ] - }, - { - "paths": [ - "/v1/open-close/crypto/{from}/{to}/{date}" - ] - }, - { - "paths": [ - "/v2/aggs/ticker/{cryptoTicker}/prev" - ] - }, - { - "paths": [ - "/v3/trades/{cryptoTicker}" - ] - }, - { - "paths": [ - "/v1/historic/crypto/{from}/{to}/{date}" - ] - }, - { - "paths": [ - "/v1/last/crypto/{from}/{to}" - ] - }, - { - "paths": [ - "/v2/snapshot/locale/global/markets/crypto/tickers", - "/v2/snapshot/locale/global/markets/crypto/{direction}", - "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}", - "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" - ], - "group": "Snapshots" + }, + "IncludeOTC": { + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "in": "query", + "name": "include_otc", + "schema": { + "type": "boolean" } - ], - "reference": [ - { - "paths": [ - "/v3/reference/tickers" - ] - }, - { - "paths": [ - "/v1/marketstatus/upcoming" - ] - }, - { - "paths": [ - "/v1/marketstatus/now" - ] - }, - { - "paths": [ - "/v3/reference/conditions" - ] - }, - { - "paths": [ - "/v3/reference/exchanges" - ] + }, + "LimitMax10000": { + "description": "Limit the size of the response, max 10000.", + "example": 100, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" } - ] - } - }, - "tags": [ - { - "name": "reference", - "description": "Reference API", - "x-polygon-sub-tags": [ - "tickers:list", - "tickers:types", - "tickers:get", - "options:contracts:list", - "news", - "tickers", - "stocks", - "sec:filings", - "sec:filing", - "sec:filing:files", - "sec:filing:file", - "stocks:market", - "conditions", - "stocks:meta:exchanges", - "crypto", - "exchanges" - ] - }, - { - "name": "stocks", - "description": "Stocks API", - "x-polygon-sub-tags": [ - "trades", - "quotes", - "last:trade", - "last:quote", - "open-close", - "aggregates", - "snapshot" - ] - }, - { - "name": "options", - "description": "Options API", - "x-polygon-sub-tags": [ - "trades", - "quotes", - "last:trade", - "last:quote", - "open-close", - "aggregates", - "snapshot" - ] + }, + "LimitMax50000": { + "description": "Limit the size of the response, max 50000 and default 5000.", + "example": 10, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + }, + "LimitNoMax": { + "description": "Limit the number of results.\n", + "example": 5, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + }, + "OptionsTickerPathParam": { + "description": "The ticker symbol of the options contract.", + "example": "O:TSLA210903C00700000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + } + }, + "ReverseOrder": { + "description": "Reverse the order of the results.\n", + "example": true, + "in": "query", + "name": "reverse", + "schema": { + "type": "boolean" + } + }, + "SnapshotDirection": { + "description": "The direction of the snapshot results to return.\n", + "example": "gainers", + "in": "path", + "name": "direction", + "required": true, + "schema": { + "enum": [ + "gainers", + "losers" + ], + "type": "string" + } + }, + "StocksTickerPathParam": { + "description": "The ticker symbol of the stock/equity.", + "example": "AAPL", + "in": "path", + "name": "stocksTicker", + "required": true, + "schema": { + "type": "string" + } + }, + "TickersQueryParam": { + "description": "A comma separated list of tickers to get snapshots for.", + "in": "query", + "name": "tickers", + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + } }, - { - "name": "fx", - "description": "Forex API", - "x-polygon-sub-tags": [ - "trades", - "quotes", - "conversion", - "last:trade", - "last:quote", - "aggregates", - "snapshot" - ] + "responses": { + "Conflict": { + "description": "Parameter is invalid or incorrect." + }, + "DefaultError": { + "description": "Unexpected error" + }, + "NotFound": { + "description": "The specified resource was not found" + }, + "Unauthorized": { + "description": "Unauthorized - Check our API Key and account status" + } }, - { - "name": "crypto", - "description": "Crypto API", - "x-polygon-sub-tags": [ - "trades", - "last:trade", - "open-close", - "aggregates", - "snapshot" - ] - } - ], - "paths": { - "/v3/reference/tickers": { - "get": { - "summary": "Tickers", - "description": "Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex.\n", - "tags": [ - "reference:tickers:list" - ], - "parameters": [ + "schemas": { + "Adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "AskExchangeId": { + "allOf": [ { - "name": "ticker", - "in": "query", - "description": "Specify a ticker symbol.\nDefaults to empty string which queries all tickers.\n", - "required": false, - "schema": { - "type": "string" - }, - "x-polygon-filter-field": { - "range": true - } + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" }, { - "name": "type", - "in": "query", - "description": "Specify the type of the tickers. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).\nDefaults to empty string which queries all types.\n", - "required": false, - "schema": { - "type": "string", - "enum": [ - "CS", - "ADRC", - "ADRP", - "ADRR", - "UNIT", - "RIGHT", - "PFD", - "FUND", - "SP", - "WARRANT", - "INDEX", - "ETF", - "ETN", - "OS", - "GDR", - "OTHER", - "NYRS", - "AGEN", - "EQLK", - "BOND", - "ADRW", - "BASKET", - "LT" - ] - } - }, + "description": "Ask Exchange Id" + } + ] + }, + "AskPrice": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "AskSize": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "type": "integer" + }, + "BidExchangeId": { + "allOf": [ { - "name": "market", - "in": "query", - "description": "Filter by market type. By default all markets are included.\n", - "required": false, - "schema": { - "type": "string", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ] - } + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" }, { - "name": "exchange", - "in": "query", - "description": "Specify the primary exchange of the asset in the ISO code format. Find more information about the ISO codes [at the ISO org website](https://www.iso20022.org/market-identifier-codes).\nDefaults to empty string which queries all exchanges.\n", - "required": false, - "schema": { - "type": "string" - } + "description": "Bid Exchange Id" + } + ] + }, + "BidPrice": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "BidSize": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "type": "integer" + }, + "Close": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "Company": { + "properties": { + "active": { + "description": "Indicates if the security is actively listed. If false, this means the company is no longer listed and cannot be traded.", + "type": "boolean" }, - { - "name": "cusip", - "in": "query", - "description": "Specify the CUSIP code of the asset you want to search for. Find more information about CUSIP codes [at their website](https://www.cusip.com/identifiers.html#/CUSIP).\nDefaults to empty string which queries all CUSIPs.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", - "required": false, - "schema": { - "type": "string" - } + "bloomberg": { + "description": "The Bloomberg guid for the symbol.", + "type": "string" }, - { - "name": "cik", - "in": "query", - "description": "Specify the CIK of the asset you want to search for. Find more information about CIK codes [at their website](https://www.sec.gov/edgar/searchedgar/cik.htm).\nDefaults to empty string which queries all CIKs.\n", - "required": false, - "schema": { - "type": "string" - } + "ceo": { + "description": "The name of the company's current CEO.", + "type": "string" }, - { - "name": "date", - "in": "query", - "description": "Specify a point in time to retrieve tickers available on that date.\nDefaults to the most recent available date.\n", - "required": false, - "schema": { - "oneOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "string", - "format": "date" - } - ] - } + "cik": { + "description": "The official CIK guid used for SEC database/filings.", + "type": "string" }, - { - "name": "search", - "in": "query", - "description": "Search for terms within the ticker and/or company name.\n", - "required": false, - "schema": { + "country": { + "description": "The country in which the company is registered.", + "type": "string" + }, + "description": { + "description": "A description of the company and what they do/offer.", + "type": "string" + }, + "employees": { + "description": "The approximate number of employees for the company.", + "type": "integer" + }, + "exchange": { + "description": "The symbol's primary exchange.", + "type": "string" + }, + "exchangeSymbol": { + "description": "The exchange code (id) of the symbol's primary exchange.", + "type": "string" + }, + "figi": { + "description": "The OpenFigi project guid for the symbol. (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://openfigi.com/\"\u003ehttps://openfigi.com/\u003c/a\u003e)", + "type": "string" + }, + "hq_address": { + "description": "The street address for the company's headquarters.", + "type": "string" + }, + "hq_country": { + "description": "The country in which the company's headquarters is located.", + "type": "string" + }, + "hq_state": { + "description": "The state in which the company's headquarters is located.", + "type": "string" + }, + "industry": { + "description": "The industry in which the company operates.", + "type": "string" + }, + "lei": { + "description": "The Legal Entity Identifier (LEI) guid for the symbol. (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Legal_Entity_Identifier\"\u003ehttps://en.wikipedia.org/wiki/Legal_Entity_Identifier\u003c/a\u003e)", + "type": "string" + }, + "listdate": { + "description": "The date that the symbol was listed on the exchange.", + "format": "date", + "type": "string" + }, + "logo": { + "description": "The URL of the entity's logo.", + "type": "string" + }, + "marketcap": { + "description": "The current market cap for the company.", + "type": "integer" + }, + "name": { + "description": "The name of the company/entity.", + "type": "string" + }, + "phone": { + "description": "The phone number for the company. This is usually a corporate contact number.", + "type": "string" + }, + "sector": { + "description": "The sector of the indsutry in which the symbol operates.", + "type": "string" + }, + "sic": { + "description": "Standard Industrial Classification (SIC) id for the symbol. (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Standard_Industrial_Classification\"\u003ehttps://en.wikipedia.org/wiki/Legal_Entity_Identifier\u003c/a\u003e)", + "type": "integer" + }, + "similar": { + "description": "A list of ticker symbols for similar companies.", + "items": { + "description": "The exchange symbol that this item is traded under.", "type": "string" - } + }, + "type": "array" }, - { - "name": "active", - "in": "query", - "description": "Specify if the tickers returned should be actively traded on the queried date. Default is true.\n", - "required": false, - "schema": { - "type": "boolean" + "symbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "tags": { + "items": { + "description": "A list of words related to the company.", + "type": "string" }, - "example": true + "type": "array" }, - { - "name": "sort", - "in": "query", - "description": "The field to sort the results on. Default is ticker.\nIf the `search` query parameter is present, `sort` is ignored and results are ordered by relevance.\n", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ticker", - "name", - "market", - "locale", - "primary_exchange", - "type", - "currency_symbol", - "currency_name", - "base_currency_symbol", - "base_currency_name", - "cik", - "composite_figi", - "share_class_figi", - "last_updated_utc", - "delisted_utc" - ] + "type": { + "description": "The type or class of the security. (\u003ca alt=\"Full List of Ticker Types\" href=\"https://polygon.io/docs/stocks/get_v3_reference_tickers_types\"\u003eFull List of Ticker Types\u003c/a\u003e)", + "type": "string" + }, + "updated": { + "description": "The last time this company record was updated.", + "format": "date", + "type": "string" + }, + "url": { + "description": "The URL of the company's website", + "type": "string" + } + }, + "type": "object" + }, + "ConditionTypeMap": { + "properties": { + "condition": { + "description": "Polygon.io's mapping for condition codes. For more information, see our \u003ca href=\"https://polygon.io/glossary/us/stocks/trade-conditions\" alt=\"Trade Conditions Glossary\" target=\"_blank\"\u003eTrade Conditions Glossary\u003c/a\u003e.\n", + "type": "string" + } + }, + "type": "object" + }, + "Conditions": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "Count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "CryptoExchange": { + "items": { + "properties": { + "id": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "market": { + "description": "Market data type this exchange contains ( crypto only currently )", + "type": "string" + }, + "name": { + "description": "Name of the exchange", + "type": "string" }, - "example": "ticker" + "type": { + "description": "Type of exchange feed", + "type": "string" + }, + "url": { + "description": "URL of this exchange", + "type": "string" + } }, - { - "name": "order", - "in": "query", - "description": "The order to sort the results on. Default is asc (ascending).\n", - "required": false, - "schema": { - "type": "string", - "enum": [ - "asc", - "desc" - ] + "type": "object" + }, + "type": "array" + }, + "CryptoGroupedResults": { + "properties": { + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" }, - "example": "asc" + "type": "array" + } + }, + "type": "object" + }, + "CryptoHistoricTrades": { + "properties": { + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" }, - { - "example": 10, - "required": false, - "name": "limit", - "in": "query", - "description": "Limit the size of the response, default is 100 and max is 1000.\n\nIf your query returns more than the max limit and you want to retrieve the next page of results,\nsee the `next_url` response attribute.\n", - "schema": { - "type": "integer", - "minimum": 1, - "maximum": 1000, - "default": 100 - } + "map": { + "description": "A map for shortened result keys.", + "type": "object" + }, + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + }, + "ticks": { + "items": { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" } - ], - "responses": { - "200": { - "description": "Reference Tickers.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "results": { - "type": "array", - "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", - "items": { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "name": { - "type": "string", - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" - }, - "market": { - "type": "string", - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ] - }, - "locale": { - "type": "string", - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ] - }, - "primary_exchange": { - "type": "string", - "description": "The ISO code of the primary listing exchange for this asset." - }, - "type": { - "type": "string", - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." - }, - "active": { - "type": "boolean", - "description": "Whether or not the asset is actively traded. False means the asset has been delisted." - }, - "currency_name": { - "type": "string", - "description": "The name of the currency that this asset is traded with." - }, - "cik": { - "type": "string", - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." - }, - "composite_figi": { - "type": "string", - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "share_class_figi": { - "type": "string", - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "last_updated_utc": { - "type": "string", - "format": "date-time", - "description": "The information is accurate up to this time." - }, - "delisted_utc": { - "type": "string", - "format": "date-time", - "description": "The last date that the asset was traded." - } - }, - "required": [ - "ticker", - "name", - "market", - "locale" - ] - } - } - } - }, - { - "type": "object", - "properties": { - "next_url": { - "type": "string", - "description": "If present, this value can be used to fetch the next page of data." - } - } - }, - { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "count": { - "type": "integer", - "description": "The total number of results for this request." - } - } - } - ] + }, + "type": "object" + }, + "CryptoLastTrade": { + "properties": { + "last": { + "properties": { + "conditions": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" }, - "example": { - "results": [ - { - "ticker": "A", - "name": "Agilent Technologies Inc.", - "market": "stocks", - "locale": "us", - "primary_exchange": "XNYS", - "type": "CS", - "active": true, - "currency_name": "usd", - "cik": "0001090872", - "composite_figi": "BBG000BWQYZ5", - "share_class_figi": "BBG001SCTQY4", - "last_updated_utc": "2021-04-25T00:00:00Z" - } - ], - "status": "OK", - "request_id": "e70013d92930de90e089dc8fa098888e", - "count": 1, - "next_url": "https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy" - } + "type": "array" + }, + "exchange": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "size": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "timestamp": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" } - } + }, + "type": "object" }, - "401": { - "description": "Unauthorized - Check our API Key and account status" + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" } }, - "x-polygon-entitlement-data-type": { - "name": "reference", - "description": "Reference data" - } - } - }, - "/v3/reference/tickers/{ticker}": { - "get": { - "summary": "Ticker Details v3", - "description": "Get a single ticker supported by Polygon.io. This response will have detailed information about the ticker and the company behind it.\n", - "tags": [ - "reference:tickers:get" - ], - "parameters": [ - { - "name": "ticker", - "in": "path", - "description": "The ticker symbol of the asset.", - "required": true, - "schema": { - "type": "string" + "type": "object" + }, + "CryptoOpenClose": { + "properties": { + "close": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "closingTrades": { + "items": { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + } + }, + "type": "object" }, - "example": "AAPL" + "type": "array" }, - { - "name": "date", - "in": "query", - "description": "Specify a point in time to get information about the ticker available on that date.\nWhen retrieving information from SEC filings, we compare this date with the period of report date on the SEC filing.\n\nFor example, consider an SEC filing submitted by AAPL on 2019-07-31, with a period of report date ending on 2019-06-29.\nThat means that the filing was submitted on 2019-07-31, but the filing was created based on information from 2019-06-29.\nIf you were to query for AAPL details on 2019-06-29, the ticker details would include information from the SEC filing.\n\nDefaults to the most recent available date.\n", - "required": false, - "schema": { - "oneOf": [ - { - "type": "string", - "format": "date-time" + "day": { + "description": "The date requested.", + "format": "date", + "type": "string" + }, + "isUTC": { + "description": "Whether or not the timestamps are in UTC timezone.", + "type": "boolean" + }, + "open": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "openTrades": { + "items": { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" }, - { - "type": "string", - "format": "date" + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" } - ] - } - } - ], - "responses": { - "200": { - "description": "Reference Tickers.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "results": { - "type": "object", - "description": "Ticker with details.\n", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "name": { - "type": "string", - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" - }, - "market": { - "type": "string", - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ] - }, - "locale": { - "type": "string", - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ] - }, - "primary_exchange": { - "type": "string", - "description": "The ISO code of the primary listing exchange for this asset." - }, - "type": { - "type": "string", - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." - }, - "active": { - "type": "boolean", - "description": "Whether or not the asset is actively traded. False means the asset has been delisted." - }, - "currency_name": { - "type": "string", - "description": "The name of the currency that this asset is traded with." - }, - "cik": { - "type": "string", - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." - }, - "composite_figi": { - "type": "string", - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "share_class_figi": { - "type": "string", - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "delisted_utc": { - "type": "string", - "format": "date-time", - "description": "The last date that the asset was traded." - }, - "share_class_shares_outstanding": { - "type": "number", - "format": "double", - "description": "The recorded number of outstanding shares for this particular share class." - }, - "weighted_shares_outstanding": { - "type": "number", - "format": "double", - "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n" - }, - "market_cap": { - "type": "number", - "format": "double", - "description": "The most recent close price of the ticker multiplied by weighted outstanding shares." - }, - "phone_number": { - "type": "string", - "description": "The phone number for the company behind this ticker." - }, - "address": { - "type": "object", - "properties": { - "address1": { - "type": "string", - "description": "The first line of the company's headquarters address." - }, - "city": { - "type": "string", - "description": "The city of the company's headquarters address." - }, - "state": { - "type": "string", - "description": "The state of the company's headquarters address." - }, - "postal_code": { - "type": "string", - "description": "The postal code of the company's headquarters address." - } - } - }, - "sic_code": { - "type": "string", - "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n" - }, - "sic_description": { - "type": "string", - "description": "A description of this ticker's SIC code." - }, - "ticker_root": { - "type": "string", - "description": "The root of a specified ticker. For example, the root of BRK.A is BRK." - }, - "ticker_suffix": { - "type": "string", - "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A." - }, - "total_employees": { - "type": "number", - "description": "The approximate number of employees for the company." - }, - "list_date": { - "type": "string", - "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD." - }, - "homepage_url": { - "type": "string", - "description": "The URL of the company's website homepage." - }, - "description": { - "type": "string", - "description": "A description of the company and what they do/offer." - }, - "branding": { - "type": "object", - "properties": { - "logo_url": { - "type": "string", - "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" - }, - "icon_url": { - "type": "string", - "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" - } - } - } - }, - "required": [ - "ticker", - "name", - "market", - "locale", - "active", - "currency_name" - ] - } - } - }, - { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "count": { - "type": "integer", - "description": "The total number of results for this request." - } - } - } - ] - }, - "example": { - "results": { - "ticker": "AAPL", - "name": "Apple Inc.", - "market": "stocks", - "locale": "us", - "primary_exchange": "XNAS", - "type": "CS", - "active": true, - "currency_name": "usd", - "cik": "0000320193", - "composite_figi": "BBG000B9XRY4", - "share_class_figi": "BBG001S5N8V8", - "share_class_shares_outstanding": 16406400000, - "weighted_shares_outstanding": 16334371000, - "market_cap": 2771126040150, - "phone_number": "(408) 996-1010", - "address": { - "address1": "One Apple Park Way", - "city": "Cupertino", - "state": "CA", - "postal_code": "95014" - }, - "sic_code": "3571", - "sic_description": "ELECTRONIC COMPUTERS", - "ticker_root": "AAPL", - "total_employees": 154000, - "list_date": "1980-12-12", - "homepage_url": "https://www.apple.com", - "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", - "branding": { - "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg", - "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png" - } - }, - "status": "OK", - "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe" - } - } - } - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" + }, + "type": "object" + }, + "type": "array" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" } }, - "x-polygon-entitlement-data-type": { - "name": "reference", - "description": "Reference data" - } - } - }, - "/v2/reference/news": { - "get": { - "summary": "Ticker News", - "description": "Get the most recent news articles relating to a stock ticker symbol,\nincluding a summary of the article and a link to the original source.\n", - "tags": [ - "reference:tickers" - ], - "parameters": [ - { - "example": 10, - "name": "limit", - "in": "query", - "description": "Limit the size of the response, default is 100 and max is 1000.\n\nIf your query returns more than the max limit and you want to retrieve the next page of results,\nsee the `next_url` response attribute.\n", - "schema": { - "type": "integer", - "minimum": 1, - "maximum": 1000, - "default": 100 - } + "type": "object" + }, + "CryptoSnapshotMinute": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "example": "descending", - "name": "order", - "in": "query", - "description": "Order the results in ascending or descending order.\n", - "required": false, - "schema": { - "type": "string", - "enum": [ - "asc", - "ascending", - "desc", - "descending" - ], - "default": "ascending" - } + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "schema": { - "enum": [ - "published_utc" - ], - "default": "published_utc" - }, - "example": "published_utc", - "name": "sort", - "in": "query", - "description": "The field key to sort the results on.\n" + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "name": "ticker", - "schema": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "x-polygon-filter-field": { - "range": true - }, - "in": "query", - "description": "Return results where this field equals the value.\n" + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "name": "published_utc", - "schema": { - "oneOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "string", - "format": "date" - } - ] - }, - "x-polygon-filter-field": { - "range": true - }, - "in": "query", - "description": "Return results where this field equals the value.\n" - } - ], - "responses": { - "200": { - "description": "An array of news articles.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "required": [ - "id", - "publisher", - "title", - "author", - "published_utc", - "article_url", - "tickers" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the article.\n" - }, - "publisher": { - "type": "object", - "required": [ - "name", - "logo_url", - "homepage_url" - ], - "properties": { - "name": { - "type": "string", - "description": "The publisher's name.\n" - }, - "logo_url": { - "type": "string", - "format": "url", - "description": "The publisher's logo URL.\n" - }, - "homepage_url": { - "type": "string", - "format": "url", - "description": "The publisher's homepage URL.\n" - }, - "favicon_url": { - "type": "string", - "format": "url", - "description": "The publisher's homepage favicon URL.\n" - } - } - }, - "title": { - "type": "string", - "description": "The title of the news article.\n" - }, - "author": { - "type": "string", - "description": "The article's author.\n" - }, - "published_utc": { - "type": "string", - "format": "date-time", - "description": "The date the article was published on.\n" - }, - "article_url": { - "type": "string", - "format": "url", - "description": "A link to the news article.\n" - }, - "tickers": { - "type": "array", - "description": "The ticker symbols associated with the article.\n", - "items": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - }, - "amp_url": { - "type": "string", - "format": "url", - "description": "The mobile friendly Accelerated Mobile Page (AMP) URL.\n" - }, - "image_url": { - "type": "string", - "format": "url", - "description": "The article's image URL.\n" - }, - "description": { - "type": "string", - "description": "A description of the article.\n" - }, - "keywords": { - "type": "array", - "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).\n", - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "object", - "properties": { - "next_url": { - "type": "string", - "description": "If present, this value can be used to fetch the next page of data." - } - } - }, - { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "count": { - "type": "integer", - "description": "The total number of results for this request." - } - } - } - ] - }, - "example": { - "results": [ - { - "id": "nJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA", - "publisher": { - "name": "Benzinga", - "homepage_url": "https://www.benzinga.com/", - "logo_url": "https://s3.polygon.io/public/public/assets/news/logos/benzinga.svg", - "favicon_url": "https://s3.polygon.io/public/public/assets/news/favicons/benzinga.ico" - }, - "title": "Cathie Wood Adds More Coinbase, Skillz, Trims Square", - "author": "Rachit Vats", - "published_utc": "2021-04-26T02:33:17Z", - "article_url": "https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square", - "tickers": [ - "DOCU", - "DDD", - "NIU", - "ARKF", - "NVDA", - "SKLZ", - "PCAR", - "MASS", - "PSTI", - "SPFR", - "TREE", - "PHR", - "IRDM", - "BEAM", - "ARKW", - "ARKK", - "ARKG", - "PSTG", - "SQ", - "IONS", - "SYRS" - ], - "amp_url": "https://amp.benzinga.com/amp/content/20784086", - "image_url": "https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720", - "description": "

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ: COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

\n

The investment firm’s Ark Innovation ETF (NYSE: ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

\n

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE: SKLZ), just a day after snapping 1.2 million shares of the stock.

\n

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

", - "keywords": [ - "Sector ETFs", - "Penny Stocks", - "Cryptocurrency", - "Small Cap", - "Markets", - "Trading Ideas", - "ETFs" - ] - } - ], - "status": "OK", - "request_id": "831afdb0b8078549fed053476984947a", - "count": 1, - "next_url": "https://api.polygon.io:443/v2/reference/news?cursor=eyJsaW1pdCI6MSwic29ydCI6InB1Ymxpc2hlZF91dGMiLCJvcmRlciI6ImFzY2VuZGluZyIsInRpY2tlciI6e30sInB1Ymxpc2hlZF91dGMiOnsiZ3RlIjoiMjAyMS0wNC0yNiJ9LCJzZWFyY2hfYWZ0ZXIiOlsxNjE5NDA0Mzk3MDAwLG51bGxdfQ" - } - } - } - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" - }, - "404": { - "description": "The specified resource was not found" + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } }, - "x-polygon-entitlement-data-type": { - "name": "reference", - "description": "Reference data" - } - } - }, - "/v1/marketstatus/upcoming": { - "get": { - "summary": "Market Holidays", - "description": "Get upcoming market holidays and their open/close times.\n", - "tags": [ - "reference:stocks:market" - ], - "responses": { - "200": { - "description": "Holidays for each market in the near future.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", + "type": "object" + }, + "CryptoSnapshotTicker": { + "properties": { + "ticker": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { "properties": { - "exchange": { - "type": "string", - "description": "Which market the record is for." + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" }, - "name": { - "type": "string", - "description": "The name of the holiday." + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" }, - "status": { - "type": "string", - "description": "The status of the market on the holiday." + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" }, - "date": { - "type": "string", - "format": "date", - "description": "The date of the holiday." + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" }, - "open": { - "type": "string", - "format": "date-time", - "description": "The market open time on the holiday (if it's not closed)." + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, - "close": { - "type": "string", - "format": "date-time", - "description": "The market close time on the holiday (if it's not closed)." + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" } } } - }, - "example": [ - { - "exchange": "NYSE", - "name": "Thanksgiving", - "date": "2020-11-26T00:00:00.000Z", - "status": "closed" + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "exchange": "NASDAQ", - "name": "Thanksgiving", - "date": "2020-11-26T00:00:00.000Z", - "status": "closed" + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "exchange": "OTC", - "name": "Thanksgiving", - "date": "2020-11-26T00:00:00.000Z", - "status": "closed" + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "exchange": "NASDAQ", - "name": "Thanksgiving", - "date": "2020-11-27T00:00:00.000Z", - "status": "early-close", - "open": "2020-11-27T14:30:00.000Z", - "close": "2020-11-27T18:00:00.000Z" + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - { - "exchange": "NYSE", - "name": "Thanksgiving", - "date": "2020-11-27T00:00:00.000Z", - "status": "early-close", - "open": "2020-11-27T14:30:00.000Z", - "close": "2020-11-27T18:00:00.000Z" + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } - ] - } - } - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" - }, - "404": { - "description": "The specified resource was not found" - }, - "409": { - "description": "Parameter is invalid or incorrect." - } - }, - "x-polygon-entitlement-data-type": { - "name": "reference", - "description": "Reference data" - } - } - }, - "/v1/marketstatus/now": { - "get": { - "summary": "Market Status", - "description": "Get the current trading status of the exchanges and overall financial markets.\n", - "tags": [ - "reference:stocks:market" - ], - "responses": { - "200": { - "description": "Status of the market and each exchange", - "content": { - "application/json": { - "schema": { - "type": "object", + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "CryptoSnapshotTickerFullBook": { + "properties": { + "data": { + "properties": { + "askCount": { + "description": "The combined total number of asks in the book.", + "format": "double", + "type": "number" + }, + "asks": { + "items": { "properties": { - "market": { - "type": "string", - "description": "The status of the market as a whole." + "p": { + "description": "The price of this book level.", + "format": "double", + "type": "number" }, - "earlyHours": { - "type": "boolean", - "description": "Whether or not the market is in pre-market hours." + "x": { + "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "bidCount": { + "description": "The combined total number of bids in the book.", + "format": "double", + "type": "number" + }, + "bids": { + "items": { + "properties": { + "p": { + "description": "The price of this book level.", + "format": "double", + "type": "number" }, - "afterHours": { - "type": "boolean", - "description": "Whether or not the market is in post-market hours." + "x": { + "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "spread": { + "description": "The difference between the best bid and the best ask price accross exchanges.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "CryptoSnapshotTickers": { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - "serverTime": { - "type": "string", - "format": "date-time", - "description": "The current time of the server." + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - "exchanges": { - "type": "object", + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { "properties": { - "nyse": { - "type": "string", - "description": "The status of the NYSE market." + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" }, - "nasdaq": { - "type": "string", - "description": "The status of the Nasdaq market." + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" }, - "otc": { - "type": "string", - "description": "The status of the OTC market." + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" } - } + }, + "type": "object" }, - "currencies": { - "type": "object", + { "properties": { - "fx": { - "type": "string", - "description": "The status of the forex market." - }, - "crypto": { - "type": "string", - "description": "The status of the crypto market." + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" } } } - } + ] }, - "example": { - "market": "extended-hours", - "earlyHours": false, - "afterHours": true, - "serverTime": "2020-11-10T22:37:37.000Z", - "exchanges": { - "nyse": "extended-hours", - "nasdaq": "extended-hours", - "otc": "closed" + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } }, - "currencies": { - "fx": "open", - "crypto": "open" - } + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" } - } - } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "CryptoTick": { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" }, - "401": { - "description": "Unauthorized - Check our API Key and account status" + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" }, - "404": { - "description": "The specified resource was not found" + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" }, - "409": { - "description": "Parameter is invalid or incorrect." + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" } }, - "x-polygon-entitlement-data-type": { - "name": "reference", - "description": "Reference data" - } - } - }, - "/v2/ticks/stocks/trades/{ticker}/{date}": { - "get": { - "summary": "Trades", - "description": "Get trades for a given ticker symbol on a specified date.\n", - "tags": [ - "stocks:trades" - ], - "parameters": [ + "type": "object" + }, + "CryptoTradeExchange": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + }, + "Date": { + "oneOf": [ { - "name": "ticker", - "in": "path", - "description": "The ticker symbol we want trades for.", - "required": true, - "schema": { - "type": "string" - }, - "example": "AAPL" + "format": "date-time", + "type": "string" }, { - "name": "date", - "in": "path", - "description": "The date/day of the trades to retrieve in the format YYYY-MM-DD.", - "required": true, - "schema": { - "type": "string", - "format": "date" + "format": "date", + "type": "string" + } + ] + }, + "Exchange": { + "items": { + "properties": { + "code": { + "description": "A unique identifier for the exchange internal to Polygon.io. This is not an industry code or ISO standard.", + "type": "string" }, - "example": "2020-10-14" - }, - { - "name": "timestamp", - "in": "query", - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", - "required": false, - "schema": { - "type": "integer" + "id": { + "description": "The ID of the exchange.", + "type": "number" + }, + "market": { + "description": "The market data type that this exchange contains.", + "type": "string" + }, + "mic": { + "description": "The Market Identification Code or MIC as defined in ISO 10383 (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Market_Identifier_Code\"\u003ehttps://en.wikipedia.org/wiki/Market_Identifier_Code\u003c/a\u003e).", + "type": "string" + }, + "name": { + "description": "The name of the exchange.", + "type": "string" + }, + "tape": { + "description": "The tape id of the exchange.", + "type": "string" + }, + "type": { + "description": "The type of exchange.\n- TRF = Trade Reporting Facility\n- exchange = Reporting exchange on the tape\n", + "type": "string" } }, - { - "name": "timestampLimit", - "in": "query", - "description": "The maximum timestamp allowed in the results.\n", - "required": false, - "schema": { - "type": "integer" - } + "type": "object" + }, + "type": "array" + }, + "ExchangeId": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "Financial": { + "properties": { + "cashChange": { + "example": 7202000000, + "type": "integer" }, - { - "name": "reverse", - "in": "query", - "description": "Reverse the order of the results.\n", - "required": false, - "schema": { - "type": "boolean" - }, - "example": true + "cashFlow": { + "example": 28293000000, + "type": "integer" }, - { - "name": "limit", - "in": "query", - "description": "Limit the size of the response, max 50000 and default 5000.", - "required": false, - "schema": { - "type": "integer" - }, - "example": 10 + "costOfRevenue": { + "example": 54381000000, + "type": "integer" + }, + "currentAssets": { + "example": 143810000000, + "type": "integer" + }, + "currentCash": { + "example": 27491000000, + "type": "integer" + }, + "currentDebt": { + "example": 18478000000, + "type": "integer" + }, + "grossProfit": { + "example": 33912000000, + "type": "integer" + }, + "netIncome": { + "example": 20065000000, + "type": "integer" + }, + "operatingExpense": { + "example": 7638000000, + "type": "integer" + }, + "operatingGainsLosses": { + "type": "number" + }, + "operatingIncome": { + "example": 26274000000, + "type": "integer" + }, + "operatingRevenue": { + "example": 88293000000, + "type": "integer" + }, + "reportDate": { + "description": "Report Date", + "example": "2017-12-31T00:00:00.000Z", + "format": "date-time", + "type": "string" + }, + "reportDateStr": { + "description": "Report date as non date format", + "example": "2017-12-31", + "type": "string" + }, + "researchAndDevelopment": { + "example": 3407000000, + "type": "integer" + }, + "shareholderEquity": { + "example": 140199000000, + "type": "integer" + }, + "symbol": { + "description": "Stock Symbol", + "example": "AAPL", + "type": "string" + }, + "totalAssets": { + "example": 406794000000, + "type": "integer" + }, + "totalCash": { + "example": 77153000000, + "type": "integer" + }, + "totalDebt": { + "example": 122400000000, + "type": "integer" + }, + "totalLiabilities": { + "example": 266595000000, + "type": "integer" + }, + "totalRevenue": { + "example": 88293000000, + "type": "integer" } + }, + "required": [ + "symbol", + "reportDate", + "reportDateStr" ], - "responses": { - "200": { - "description": "A list of trades.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "results_count": { - "type": "integer", - "description": "The total number of results for this request." - }, - "db_latency": { - "type": "integer", - "description": "Latency in milliseconds for the query results from the database." - }, - "success": { - "type": "boolean", - "description": "Whether or not this query was executed successfully." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "allOf": [ - { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } - } - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "e": { - "type": "integer", - "description": "The trade correction indicator.\n" - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "r": { - "type": "integer", - "description": "The ID for the Trade Reporting Facility where the trade took place.\n" - }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - } - } - } - ] - } - } - } - } - ] - }, - "example": { - "ticker": "AAPL", - "results_count": 2, - "db_latency": 11, - "success": true, - "results": [ - { - "t": 1517562000016036600, - "y": 1517562000015577000, - "q": 1063, - "i": "1", - "x": 11, - "s": 100, - "c": [ - 12, - 41 - ], - "p": 171.55, - "z": 3 - }, - { - "t": 1517562000016038100, - "y": 1517562000015577600, - "q": 1064, - "i": "2", - "x": 11, - "s": 100, - "c": [ - 12, - 41 - ], - "p": 171.55, - "z": 3 - } - ], - "map": { - "I": { - "name": "orig_id", - "type": "string" - }, - "x": { - "name": "exchange", - "type": "int" - }, - "p": { - "name": "price", - "type": "float64" - }, - "i": { - "name": "id", - "type": "string" - }, - "e": { - "name": "correction", - "type": "int" - }, - "r": { - "name": "trf_id", - "type": "int" - }, - "t": { - "name": "sip_timestamp", - "type": "int64" - }, - "y": { - "name": "participant_timestamp", - "type": "int64" - }, - "f": { - "name": "trf_timestamp", - "type": "int64" - }, - "q": { - "name": "sequence_number", - "type": "int64" - }, - "c": { - "name": "conditions", - "type": "int" - }, - "s": { - "name": "size", - "type": "int" - }, - "z": { - "name": "tape", - "type": "int" - } - } - } - } - } + "type": "object" + }, + "Financials": { + "description": "Financials", + "properties": { + "EBITDAMargin": { + "format": "double", + "type": "number" }, - "default": { - "description": "Unexpected error" - } - }, - "x-polygon-entitlement-data-type": { - "name": "trades", - "description": "Trade data" - }, - "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" - }, - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "path": "get_v3_trades__stockticker", - "name": "Trades v3" - } - } - } - }, - "/v2/ticks/stocks/nbbo/{ticker}/{date}": { - "get": { - "summary": "Quotes (NBBO)", - "description": "Get NBBO quotes for a given ticker symbol on a specified date.\n", - "tags": [ - "stocks:quotes" - ], - "parameters": [ - { - "name": "ticker", - "in": "path", - "description": "The ticker symbol we want quotes for.", - "required": true, - "schema": { - "type": "string" - }, - "example": "AAPL" + "accumulatedOtherComprehensiveIncome": { + "type": "integer" }, - { - "name": "date", - "in": "path", - "description": "The date/day of the quotes to retrieve in the format YYYY-MM-DD.", - "required": true, - "schema": { - "type": "string", - "format": "date" - }, - "example": "2020-10-14" + "accumulatedRetainedEarningsDeficit": { + "type": "integer" }, - { - "name": "timestamp", - "in": "query", - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", - "required": false, - "schema": { - "type": "integer" - } + "assetTurnover": { + "type": "integer" }, - { - "name": "timestampLimit", - "in": "query", - "description": "The maximum timestamp allowed in the results.\n", - "required": false, - "schema": { - "type": "integer" - } + "assets": { + "type": "integer" }, - { - "name": "reverse", - "in": "query", - "description": "Reverse the order of the results.\n", - "required": false, - "schema": { - "type": "boolean" - }, - "example": true + "assetsAverage": { + "type": "integer" }, - { - "name": "limit", - "in": "query", - "description": "Limit the size of the response, max 50000 and default 5000.", - "required": false, - "schema": { - "type": "integer" - }, - "example": 10 - } - ], - "responses": { - "200": { - "description": "A list of quotes.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "results_count": { - "type": "integer", - "description": "The total number of results for this request." - }, - "db_latency": { - "type": "integer", - "description": "Latency in milliseconds for the query results from the database." - }, - "success": { - "type": "boolean", - "description": "Whether or not this query was executed successfully." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "allOf": [ - { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } - } - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "array", - "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", - "items": { - "type": "integer", - "description": "The indicator code.\n" - } - }, - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." - }, - "x": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - { - "description": "Bid Exchange Id" - } - ] - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." - }, - "X": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - { - "description": "Ask Exchange Id" - } - ] - }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - } - } - } - ] - } - } - } + "assetsCurrent": { + "type": "integer" + }, + "assetsNonCurrent": { + "type": "integer" + }, + "averageEquity": { + "type": "integer" + }, + "bookValuePerShare": { + "format": "double", + "type": "number" + }, + "calendarDate": { + "example": "2019-03-31", + "format": "date-time", + "type": "string" + }, + "capitalExpenditure": { + "type": "integer" + }, + "cashAndEquivalents": { + "type": "integer" + }, + "cashAndEquivalentsUSD": { + "type": "integer" + }, + "consolidatedIncome": { + "type": "integer" + }, + "costOfRevenue": { + "type": "integer" + }, + "currentLiabilities": { + "type": "integer" + }, + "currentRatio": { + "format": "double", + "type": "number" + }, + "debt": { + "type": "integer" + }, + "debtCurrent": { + "type": "integer" + }, + "debtNonCurrent": { + "type": "integer" + }, + "debtToEquityRatio": { + "format": "double", + "type": "number" + }, + "debtUSD": { + "type": "integer" + }, + "deferredRevenue": { + "type": "integer" + }, + "deposits": { + "type": "integer" + }, + "depreciationAmortizationAndAccretion": { + "type": "integer" + }, + "dividendYield": { + "type": "integer" + }, + "dividendsPerBasicCommonShare": { + "type": "integer" + }, + "earningBeforeInterestTaxes": { + "type": "integer" + }, + "earningBeforeInterestTaxesUSD": { + "type": "integer" + }, + "earningsBeforeInterestTaxesDepreciationAmortization": { + "type": "integer" + }, + "earningsBeforeInterestTaxesDepreciationAmortizationUSD": { + "type": "integer" + }, + "earningsBeforeTax": { + "type": "integer" + }, + "earningsPerBasicShare": { + "format": "double", + "type": "number" + }, + "earningsPerBasicShareUSD": { + "format": "double", + "type": "number" + }, + "earningsPerDilutedShare": { + "format": "double", + "type": "number" + }, + "effectOfExchangeRateChangesOnCash": { + "type": "integer" + }, + "enterpriseValue": { + "type": "integer" + }, + "enterpriseValueOverEBIT": { + "type": "integer" + }, + "enterpriseValueOverEBITDA": { + "format": "double", + "type": "number" + }, + "foreignCurrencyUSDExchangeRate": { + "type": "integer" + }, + "freeCashFlow": { + "type": "integer" + }, + "freeCashFlowPerShare": { + "format": "double", + "type": "number" + }, + "goodwillAndIntangibleAssets": { + "type": "integer" + }, + "grossMargin": { + "format": "double", + "type": "number" + }, + "grossProfit": { + "type": "integer" + }, + "incomeTaxExpense": { + "type": "integer" + }, + "interestExpense": { + "type": "integer" + }, + "inventory": { + "type": "integer" + }, + "investedCapital": { + "type": "integer" + }, + "investedCapitalAverage": { + "type": "integer" + }, + "investments": { + "type": "integer" + }, + "investmentsCurrent": { + "type": "integer" + }, + "investmentsNonCurrent": { + "type": "integer" + }, + "issuanceDebtSecurities": { + "type": "integer" + }, + "issuanceEquityShares": { + "type": "integer" + }, + "liabilitiesNonCurrent": { + "type": "integer" + }, + "marketCapitalization": { + "type": "integer" + }, + "netCashFlow": { + "type": "integer" + }, + "netCashFlowBusinessAcquisitionsDisposals": { + "type": "integer" + }, + "netCashFlowFromFinancing": { + "type": "integer" + }, + "netCashFlowFromInvesting": { + "type": "integer" + }, + "netCashFlowFromOperations": { + "type": "integer" + }, + "netCashFlowInvestmentAcquisitionsDisposals": { + "type": "integer" + }, + "netIncome": { + "type": "integer" + }, + "netIncomeCommonStock": { + "type": "integer" + }, + "netIncomeCommonStockUSD": { + "type": "integer" + }, + "netIncomeToNonControllingInterests": { + "type": "integer" + }, + "netLossIncomeFromDiscontinuedOperations": { + "type": "integer" + }, + "operatingExpenses": { + "type": "integer" + }, + "operatingIncome": { + "type": "integer" + }, + "paymentDividendsOtherCashDistributions": { + "type": "integer" + }, + "payoutRatio": { + "type": "integer" + }, + "period": { + "description": "Reporting period.", + "enum": [ + "Q", + "T", + "QA", + "TA", + "Y", + "YA" + ], + "example": "Q", + "type": "string" + }, + "preferredDividendsIncomeStatementImpact": { + "type": "integer" + }, + "priceEarnings": { + "format": "double", + "type": "number" + }, + "priceSales": { + "format": "double", + "type": "number" + }, + "priceToBookValue": { + "format": "double", + "type": "number" + }, + "priceToEarningsRatio": { + "format": "double", + "type": "number" + }, + "priceToSalesRatio": { + "format": "double", + "type": "number" + }, + "profitMargin": { + "format": "double", + "type": "number" + }, + "propertyPlantEquipmentNet": { + "type": "integer" + }, + "reportPeriod": { + "example": "2019-03-31", + "format": "date-time", + "type": "string" + }, + "researchAndDevelopmentExpense": { + "type": "integer" + }, + "returnOnAverageAssets": { + "type": "integer" + }, + "returnOnAverageEquity": { + "type": "integer" + }, + "returnOnInvestedCapital": { + "type": "integer" + }, + "returnOnSales": { + "format": "double", + "type": "number" + }, + "revenues": { + "type": "integer" + }, + "revenuesUSD": { + "type": "integer" + }, + "salesPerShare": { + "format": "double", + "type": "number" + }, + "sellingGeneralAndAdministrativeExpense": { + "type": "integer" + }, + "shareBasedCompensation": { + "type": "integer" + }, + "shareFactor": { + "type": "integer" + }, + "sharePriceAdjustedClose": { + "format": "double", + "type": "number" + }, + "shareholdersEquity": { + "type": "integer" + }, + "shareholdersEquityUSD": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "tangibleAssetValue": { + "type": "integer" + }, + "tangibleAssetsBookValuePerShare": { + "format": "double", + "type": "number" + }, + "taxAssets": { + "type": "integer" + }, + "taxLiabilities": { + "type": "integer" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "totalLiabilities": { + "type": "integer" + }, + "tradeAndNonTradePayables": { + "type": "integer" + }, + "tradeAndNonTradeReceivables": { + "type": "integer" + }, + "updated": { + "example": "1999-03-28", + "format": "date-time", + "type": "string" + }, + "weightedAverageShares": { + "type": "integer" + }, + "weightedAverageSharesDiluted": { + "type": "integer" + }, + "workingCapital": { + "type": "integer" + } + }, + "required": [ + "ticker", + "exDate", + "paymentDate", + "ratio", + "tofactor", + "forfactor" + ], + "type": "object" + }, + "ForexConversion": { + "properties": { + "converted": { + "description": "The result of the conversion.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The \"from\" currency symbol.", + "type": "string" + }, + "initialAmount": { + "description": "The amount to convert.", + "format": "double", + "type": "number" + }, + "last": { + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "exchange": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "timestamp": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "to": { + "description": "The \"to\" currency symbol.", + "type": "string" + } + }, + "type": "object" + }, + "ForexExchangeId": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "ForexGroupedResults": { + "properties": { + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ForexHistoricTrades": { + "properties": { + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" + }, + "map": { + "description": "A map for shortened result keys.", + "type": "object" + }, + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" + }, + "pair": { + "description": "The currency pair that was evaluated from the request.", + "type": "string" + }, + "ticks": { + "items": { + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ForexPairLastQuote": { + "properties": { + "last": { + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "exchange": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "timestamp": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + } + }, + "type": "object" + }, + "ForexPreviousClose": { + "properties": { + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ForexSnapshotLastQuote": { + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID on which this quote happened.", + "type": "integer" + } + }, + "type": "object" + }, + "ForexSnapshotPrevDay": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ForexSnapshotTicker": { + "properties": { + "ticker": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID on which this quote happened.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ForexSnapshotTickers": { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID on which this quote happened.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "ForexTickerResults": { + "properties": { + "results": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "High": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "Indicators": { + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "description": "The indicator code.\n", + "type": "integer" + }, + "type": "array" + }, + "Locales": { + "properties": { + "results": { + "items": { + "properties": { + "locale": { + "description": "An abbreviated country name.", + "type": "string" + }, + "name": { + "description": "The name of the country.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "Low": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "Map": { + "description": "A mapping of the keys returned in the results to their descriptive name and data types.", + "properties": { + "key": { + "description": "A dynamic key from the results set", + "properties": { + "name": { + "description": "The descriptive name of this results key", + "type": "string" + }, + "type": { + "description": "The data type of this results key", + "enum": [ + "string", + "int", + "int64", + "float64" + ], + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "MarketHoliday": { + "items": { + "properties": { + "close": { + "description": "The market close time on the holiday (if it's not closed).", + "format": "date-time", + "type": "string" + }, + "date": { + "description": "The date of the holiday.", + "format": "date", + "type": "string" + }, + "exchange": { + "description": "Which market the record is for.", + "type": "string" + }, + "name": { + "description": "The name of the holiday.", + "type": "string" + }, + "open": { + "description": "The market open time on the holiday (if it's not closed).", + "format": "date-time", + "type": "string" + }, + "status": { + "description": "The status of the market on the holiday.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "MarketStatus": { + "properties": { + "afterHours": { + "description": "Whether or not the market is in post-market hours.", + "type": "boolean" + }, + "currencies": { + "properties": { + "crypto": { + "description": "The status of the crypto market.", + "type": "string" + }, + "fx": { + "description": "The status of the forex market.", + "type": "string" + } + }, + "type": "object" + }, + "earlyHours": { + "description": "Whether or not the market is in pre-market hours.", + "type": "boolean" + }, + "exchanges": { + "properties": { + "nasdaq": { + "description": "The status of the Nasdaq market.", + "type": "string" + }, + "nyse": { + "description": "The status of the NYSE market.", + "type": "string" + }, + "otc": { + "description": "The status of the OTC market.", + "type": "string" + } + }, + "type": "object" + }, + "market": { + "description": "The status of the market as a whole.", + "type": "string" + }, + "serverTime": { + "description": "The current time of the server.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + }, + "Markets": { + "properties": { + "results": { + "description": "A list of supported markets.", + "items": { + "properties": { + "desc": { + "description": "A description of the market.", + "type": "string" + }, + "market": { + "description": "The name of the market.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "MsLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" + }, + "News": { + "items": { + "properties": { + "image": { + "description": "A URL of the image for the news article, if found.", + "type": "string" + }, + "keywords": { + "description": "A list of common keywords related to the news article.", + "items": { + "description": "Common keywords of the news article.", + "type": "string" + }, + "type": "array" + }, + "source": { + "description": "The publication source of the article.", + "type": "string" + }, + "summary": { + "description": "A summary of the news article.", + "type": "string" + }, + "symbols": { + "description": "A list of ticker symbols relating to the article.", + "items": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "type": "array" + }, + "timestamp": { + "description": "The timestamp of the news article.", + "format": "date-time", + "type": "string" + }, + "title": { + "description": "The title of the news article.", + "type": "string" + }, + "url": { + "description": "A direct link to the news article from its source publication.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "NumberOfItems": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "OTC": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "Open": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "PaginationHooksBase": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + } + }, + "type": "object" + }, + "Price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "QueryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "RatingSection": { + "properties": { + "current": { + "description": "Analyst Rating at current month", + "example": 0, + "type": "number" + }, + "month1": { + "description": "Analyst Ratings at 1 month in the future", + "example": 1, + "type": "number" + }, + "month2": { + "description": "Analyst Ratings at 2 month in the future", + "example": 3, + "type": "number" + }, + "month3": { + "description": "Analyst Ratings at 3 month in the future", + "example": 4, + "type": "number" + }, + "month4": { + "description": "Analyst Ratings at 4 month in the future", + "example": 3, + "type": "number" + }, + "month5": { + "description": "Analyst Ratings at 5 month in the future", + "example": 2, + "type": "number" + } + }, + "required": [ + "month1", + "month2", + "month3", + "current" + ], + "type": "object" + }, + "RequestID": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "RequestIdBase": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + } + }, + "type": "object" + }, + "SequenceNumber": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" + }, + "Size": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "SnapshotLastTrade": { + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "SnapshotOHLCV": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "SnapshotOHLCVVW": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "SnapshotOHLCVVWOtc": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "StandardBase": { + "allOf": [ + { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + ] + }, + "Status": { + "description": "The status of this request's response.", + "type": "string" + }, + "StatusBase": { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + "StatusCountBase": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + "StockSymbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "StocksGroupedResults": { + "properties": { + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "StocksOpenClose": { + "properties": { + "afterHours": { + "description": "The close price of the ticker symbol in after hours trading.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The requested date.", + "format": "date", + "type": "string" + }, + "high": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "low": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "preMarket": { + "description": "The open price of the ticker symbol in pre-market trading.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "volume": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "StocksSnapshotLastQuote": { + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size in lots.", + "type": "integer" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size in lots.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "StocksSnapshotMinute": { + "properties": { + "av": { + "description": "The accumulated volume.", + "type": "integer" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "StocksSnapshotMinuteOTC": { + "properties": { + "av": { + "description": "The accumulated volume.", + "type": "integer" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "StocksSnapshotTicker": { + "properties": { + "ticker": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size in lots.", + "type": "integer" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size in lots.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "av": { + "description": "The accumulated volume.", + "type": "integer" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "StocksSnapshotTickers": { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } - ] + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size in lots.", + "type": "integer" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size in lots.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "av": { + "description": "The accumulated volume.", + "type": "integer" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "StocksTickerResultsOTC": { + "properties": { + "results": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "StocksV2Base": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + } + }, + "type": "object" + }, + "StocksV2NBBO": { + "allOf": [ + { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "type": "integer" + }, + "X": { + "allOf": [ + { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" }, - "example": { - "ticker": "AAPL", - "success": true, - "results_count": 2, - "db_latency": 43, - "results": [ - { - "t": 1517562000065700400, - "y": 1517562000065321200, - "q": 2060, - "c": [ - 1 - ], - "z": 3, - "p": 102.7, - "s": 60, - "x": 11, - "P": 0, - "S": 0, - "X": 0 + "type": "array" + }, + "i": { + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "description": "The indicator code.\n", + "type": "integer" + }, + "type": "array" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "type": "integer" + }, + "x": { + "allOf": [ + { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n", + "type": "integer" + } + }, + "type": "object" + } + ] + }, + "StocksV2NBBOs": { + "properties": { + "results": { + "items": { + "allOf": [ + { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" }, - { - "t": 1517562000065791500, - "y": 1517562000065408300, - "q": 2061, - "c": [ - 1 - ], - "z": 3, - "p": 170, - "s": 2, - "x": 11, - "P": 0, - "S": 0, - "X": 0 - } - ], - "map": { "t": { - "name": "sip_timestamp", - "type": "int64" + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" }, "y": { - "name": "participant_timestamp", - "type": "int64" + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "type": "integer" + }, + "X": { + "allOf": [ + { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" }, "i": { - "name": "indicators", - "type": "int" + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "description": "The indicator code.\n", + "type": "integer" + }, + "type": "array" }, - "P": { - "name": "ask_price", - "type": "float64" + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" }, - "X": { - "name": "ask_exchange", - "type": "int" + "s": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "type": "integer" + }, + "x": { + "allOf": [ + { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n", + "type": "integer" + } + }, + "type": "object" + } + ] + }, + "type": "array" + } + }, + "type": "object" + }, + "StocksV2Trade": { + "allOf": [ + { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "e": { + "description": "The trade correction indicator.\n", + "type": "integer" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "r": { + "description": "The ID for the Trade Reporting Facility where the trade took place.\n", + "type": "integer" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n", + "type": "integer" + } + }, + "type": "object" + } + ] + }, + "StocksV2Trades": { + "properties": { + "results": { + "items": { + "allOf": [ + { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" }, "f": { - "name": "trf_timestamp", - "type": "int64" + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" }, "q": { - "name": "sequence_number", - "type": "int" + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { "c": { - "name": "conditions", - "type": "int" + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "e": { + "description": "The trade correction indicator.\n", + "type": "integer" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" }, "p": { - "name": "bid_price", - "type": "float64" + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "r": { + "description": "The ID for the Trade Reporting Facility where the trade took place.\n", + "type": "integer" }, "s": { - "name": "bid_size", - "type": "int" + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" }, "x": { - "name": "bid_exchange", - "type": "int" - }, - "S": { - "name": "ask_size", - "type": "int" + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" }, "z": { - "name": "tape", - "type": "int" + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n", + "type": "integer" } - } + }, + "type": "object" } - } - } - }, - "default": { - "description": "Unexpected error" + ] + }, + "type": "array" } }, - "x-polygon-entitlement-data-type": { - "name": "nbbo", - "description": "NBBO data" + "type": "object" + }, + "SymbolPair": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + }, + "Tape": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n", + "type": "integer" + }, + "TickerBase": { + "properties": { + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } }, - "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" + "type": "object" + }, + "TickerResults": { + "properties": { + "results": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } }, - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "path": "get_v3_quotes__stockticker", - "name": "Quotes (NBBO) v3" + "type": "object" + }, + "TickerSymbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "Timestamp": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "TimestampExchange": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + }, + "TimestampSIP": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "TimestampTRF": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "TodaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "TodaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "TradeDetailsMapItem": { + "properties": { + "name": { + "description": "Name of the trade detail item", + "type": "string" + }, + "type": { + "description": "Actual type of the trade detail item", + "type": "string" } - } - } - }, - "/v2/last/trade/{stocksTicker}": { - "get": { - "summary": "Last Trade", - "description": "Get the most recent trade for a given stock.\n", - "tags": [ - "stocks:last:trade" - ], - "parameters": [ - { - "name": "stocksTicker", - "in": "path", - "description": "The ticker symbol of the stock/equity.", - "required": true, - "schema": { - "type": "string" - }, - "example": "AAPL" + }, + "type": "object" + }, + "TradeExchange": { + "description": "The exchange that this trade happened on.", + "type": "integer" + }, + "TradeId": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "Updated": { + "description": "The last updated timestamp.", + "type": "integer" + }, + "V1LastBase": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" } - ], - "responses": { - "200": { - "description": "The last trade for this stock.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "allOf": [ - { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } - } - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "e": { - "type": "integer", - "description": "The trade correction indicator.\n" - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "r": { - "type": "integer", - "description": "The ID for the Trade Reporting Facility where the trade took place.\n" - }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - } - } - } - ] - } - } - } - ] - }, - "example": { - "request_id": "f05562305bd26ced64b98ed68b3c5d96", - "status": "OK", - "results": { - "T": "AAPL", - "c": [ - 37 - ], - "f": 1617901342969796400, - "i": "118749", - "p": 129.8473, - "q": 3135876, - "r": 202, - "s": 25, - "t": 1617901342969834000, - "x": 4, - "y": 1617901342968000000, - "z": 3 - } - } - } - } + }, + "type": "object" + }, + "V2AggsBase": { + "properties": { + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + "V2LastBase": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + "V2News": { + "properties": { + "amp_url": { + "description": "The mobile friendly Accelerated Mobile Page (AMP) URL.\n", + "format": "url", + "type": "string" + }, + "article_url": { + "description": "A link to the news article.\n", + "format": "url", + "type": "string" + }, + "author": { + "description": "The article's author.\n", + "type": "string" }, - "401": { - "description": "Unauthorized - Check our API Key and account status" + "description": { + "description": "A description of the article.\n", + "type": "string" }, - "404": { - "description": "The specified resource was not found" - } - }, - "x-polygon-entitlement-data-type": { - "name": "trades", - "description": "Trade data" - }, - "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" + "id": { + "description": "Unique identifier for the article.\n", + "type": "string" }, - { - "name": "delayed", - "description": "15 minute delayed data" - } - ] - } - }, - "/v2/last/nbbo/{stocksTicker}": { - "get": { - "summary": "Last Quote", - "description": "Get the most recent NBBO (Quote) tick for a given stock.\n", - "tags": [ - "stocks:last:quote" - ], - "parameters": [ - { - "name": "stocksTicker", - "in": "path", - "description": "The ticker symbol of the stock/equity.", - "required": true, - "schema": { + "image_url": { + "description": "The article's image URL.\n", + "format": "url", + "type": "string" + }, + "keywords": { + "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "published_utc": { + "description": "The date the article was published on.\n", + "format": "date-time", + "type": "string" + }, + "publisher": { + "properties": { + "favicon_url": { + "description": "The publisher's homepage favicon URL.\n", + "format": "url", + "type": "string" + }, + "homepage_url": { + "description": "The publisher's homepage URL.\n", + "format": "url", + "type": "string" + }, + "logo_url": { + "description": "The publisher's logo URL.\n", + "format": "url", + "type": "string" + }, + "name": { + "description": "The publisher's name.\n", + "type": "string" + } + }, + "required": [ + "name", + "logo_url", + "homepage_url" + ], + "type": "object" + }, + "tickers": { + "description": "The ticker symbols associated with the article.\n", + "items": { + "description": "The exchange symbol that this item is traded under.", "type": "string" }, - "example": "AAPL" + "type": "array" + }, + "title": { + "description": "The title of the news article.\n", + "type": "string" } + }, + "required": [ + "id", + "publisher", + "title", + "author", + "published_utc", + "article_url", + "tickers" ], - "responses": { - "200": { - "description": "The last NBBO tick for this stock.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "allOf": [ - { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } - } - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "array", - "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", - "items": { - "type": "integer", - "description": "The indicator code.\n" - } - }, - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." - }, - "x": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - { - "description": "Bid Exchange Id" - } - ] - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." - }, - "X": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - { - "description": "Ask Exchange Id" - } - ] - }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - } - } - } - ] - } - } - } - ] + "type": "object" + }, + "V2TicksBase": { + "properties": { + "db_latency": { + "description": "Latency in milliseconds for the query results from the database.", + "type": "integer" + }, + "results_count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "success": { + "description": "Whether or not this query was executed successfully.", + "type": "boolean" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "type": "object" + }, + "Volume": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "VolumeWeight": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + }, + "v3TickerDetails": { + "properties": { + "results": { + "description": "Ticker with details.\n", + "properties": { + "active": { + "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", + "type": "boolean" + }, + "address": { + "properties": { + "address1": { + "description": "The first line of the company's headquarters address.", + "type": "string" + }, + "city": { + "description": "The city of the company's headquarters address.", + "type": "string" + }, + "postal_code": { + "description": "The postal code of the company's headquarters address.", + "type": "string" + }, + "state": { + "description": "The state of the company's headquarters address.", + "type": "string" + } }, - "example": { - "request_id": "b84e24636301f19f88e0dfbf9a45ed5c", - "status": "OK", - "results": { - "P": 127.98, - "S": 7, - "T": "AAPL", - "X": 19, - "p": 127.96, - "q": 83480742, - "s": 1, - "t": 1617827221349730300, - "x": 11, - "y": 1617827221349366000, - "z": 3 + "type": "object" + }, + "branding": { + "properties": { + "icon_url": { + "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", + "type": "string" + }, + "logo_url": { + "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", + "type": "string" } - } + }, + "type": "object" + }, + "cik": { + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", + "type": "string" + }, + "composite_figi": { + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "currency_name": { + "description": "The name of the currency that this asset is traded with.", + "type": "string" + }, + "delisted_utc": { + "description": "The last date that the asset was traded.", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the company and what they do/offer.", + "type": "string" + }, + "homepage_url": { + "description": "The URL of the company's website homepage.", + "type": "string" + }, + "list_date": { + "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD.", + "type": "string" + }, + "locale": { + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ], + "type": "string" + }, + "market": { + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx", + "otc" + ], + "type": "string" + }, + "market_cap": { + "description": "The most recent close price of the ticker multiplied by weighted outstanding shares.", + "format": "double", + "type": "number" + }, + "name": { + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", + "type": "string" + }, + "phone_number": { + "description": "The phone number for the company behind this ticker.", + "type": "string" + }, + "primary_exchange": { + "description": "The ISO code of the primary listing exchange for this asset.", + "type": "string" + }, + "share_class_figi": { + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "share_class_shares_outstanding": { + "description": "The recorded number of outstanding shares for this particular share class.", + "format": "double", + "type": "number" + }, + "sic_code": { + "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://www.sec.gov/info/edgar/siccodes.htm\"\u003eSIC Code List\u003c/a\u003e.\n", + "type": "string" + }, + "sic_description": { + "description": "A description of this ticker's SIC code.", + "type": "string" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "ticker_root": { + "description": "The root of a specified ticker. For example, the root of BRK.A is BRK.", + "type": "string" + }, + "ticker_suffix": { + "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A.", + "type": "string" + }, + "total_employees": { + "description": "The approximate number of employees for the company.", + "type": "number" + }, + "type": { + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", + "type": "string" + }, + "weighted_shares_outstanding": { + "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n", + "format": "double", + "type": "number" } - } - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" - }, - "404": { - "description": "The specified resource was not found" + }, + "required": [ + "ticker", + "name", + "market", + "locale", + "active", + "currency_name" + ], + "type": "object" } }, - "x-polygon-entitlement-data-type": { - "name": "nbbo", - "description": "NBBO data" - }, - "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" + "type": "object" + }, + "v3Tickers": { + "properties": { + "results": { + "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", + "items": { + "properties": { + "active": { + "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", + "type": "boolean" + }, + "cik": { + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", + "type": "string" + }, + "composite_figi": { + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "currency_name": { + "description": "The name of the currency that this asset is traded with.", + "type": "string" + }, + "delisted_utc": { + "description": "The last date that the asset was traded.", + "format": "date-time", + "type": "string" + }, + "last_updated_utc": { + "description": "The information is accurate up to this time.", + "format": "date-time", + "type": "string" + }, + "locale": { + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ], + "type": "string" + }, + "market": { + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx", + "otc" + ], + "type": "string" + }, + "name": { + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", + "type": "string" + }, + "primary_exchange": { + "description": "The ISO code of the primary listing exchange for this asset.", + "type": "string" + }, + "share_class_figi": { + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "type": { + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", + "type": "string" + } + }, + "required": [ + "ticker", + "name", + "market", + "locale" + ], + "type": "object" + }, + "type": "array" } - ] + }, + "type": "object" } }, - "/v1/open-close/{stocksTicker}/{date}": { + "securitySchemes": { + "apiKey": { + "in": "query", + "name": "apiKey", + "type": "apiKey" + } + } + }, + "info": { + "description": "The future of fintech.", + "title": "Polygon API", + "version": "1.0.0" + }, + "openapi": "3.0.3", + "paths": { + "/v1/conversion/{from}/{to}": { "get": { - "summary": "Daily Open/Close", - "description": "Get the open, close and afterhours prices of a stock symbol on a certain date.\n", - "tags": [ - "stocks:open-close" - ], + "description": "Get currency conversions using the latest market conversion rates. Note than you can convert in both directions. For example USD to CAD or CAD to USD.", + "operationId": "RealTimeCurrencyConversion", "parameters": [ { - "name": "stocksTicker", + "description": "The \"from\" symbol of the pair.", + "example": "AUD", "in": "path", - "description": "The ticker symbol of the stock/equity.", + "name": "from", "required": true, "schema": { "type": "string" - }, - "example": "AAPL" - }, - { - "name": "date", - "in": "path", - "description": "The date of the requested open/close in the format YYYY-MM-DD.", - "required": true, - "schema": { - "type": "string", - "format": "date" - }, - "example": "2020-10-14" - }, - { - "name": "adjusted", - "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, - "schema": { - "type": "boolean" - }, - "example": true - } - ], - "responses": { - "200": { - "description": "The open/close of this stock symbol.", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "from": { - "type": "string", - "format": "date", - "description": "The requested date." - }, - "symbol": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "open": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "high": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "low": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "close": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "volume": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - }, - "preMarket": { - "type": "integer", - "description": "The open price of the ticker symbol in pre-market trading." - }, - "afterHours": { - "type": "number", - "format": "double", - "description": "The close price of the ticker symbol in after hours trading." - } - } - }, - "example": { - "status": "OK", - "from": "2020-10-14T00:00:00.000Z", - "symbol": "AAPL", - "open": 324.66, - "high": 326.2, - "low": 322.3, - "close": 325.12, - "volume": 26122646, - "afterHours": 322.1, - "preMarket": 324.5 - } - } } }, - "default": { - "description": "Unexpected error" - } - }, - "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" - }, - "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" - } - } - }, - "/v2/aggs/grouped/locale/us/market/stocks/{date}": { - "get": { - "summary": "Grouped Daily (Bars)", - "description": "Get the daily open, high, low, and close (OHLC) for the entire stocks/equities markets.\n", - "tags": [ - "stocks:aggregates" - ], - "parameters": [ { - "name": "date", + "description": "The \"to\" symbol of the pair.", + "example": "USD", "in": "path", - "description": "The beginning date for the aggregate window.", + "name": "to", "required": true, "schema": { "type": "string" - }, - "example": "2020-10-14" + } }, { - "name": "adjusted", + "description": "The amount to convert, with a decimal.", + "example": 100, "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "name": "amount", + "required": true, "schema": { - "type": "boolean" - }, - "example": true + "default": 100, + "type": "number" + } }, { - "name": "include_otc", + "description": "The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy.", + "example": 2, "in": "query", - "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", - "required": false, + "name": "precision", "schema": { - "type": "boolean" + "default": 2, + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer" } } ], "responses": { "200": { - "description": "Previous day OHLC for ticker", "content": { "application/json": { + "example": { + "converted": 73.14, + "from": "AUD", + "initialAmount": 100, + "last": { + "ask": 1.3673344, + "bid": 1.3672596, + "exchange": 48, + "timestamp": 1605555313000 + }, + "status": "success", + "to": "USD" + }, "schema": { - "allOf": [ - { - "type": "object", + "properties": { + "converted": { + "description": "The result of the conversion.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The \"from\" currency symbol.", + "type": "string" + }, + "initialAmount": { + "description": "The amount to convert.", + "format": "double", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "last": { "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" }, - "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" }, - "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "exchange": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" }, - "resultsCount": { + "timestamp": { + "description": "The Unix millisecond timestamp.", "type": "integer", - "description": "The total number of results for this request." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" } } - } - } - ] - }, - "example": { - "status": "OK", - "queryCount": 3, - "resultsCount": 3, - "adjusted": true, - "results": [ - { - "T": "KIMpL", - "v": 4369, - "vw": 26.0407, - "o": 26.07, - "c": 25.9102, - "h": 26.25, - "l": 25.91, - "t": 1602705600000, - "n": 74 + }, + "type": "object" }, - { - "T": "TANH", - "v": 25933.6, - "vw": 23.493, - "o": 24.5, - "c": 23.4, - "h": 24.763, - "l": 22.65, - "t": 1602705600000, - "n": 1096 + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, - { - "T": "VSAT", - "v": 312583, - "vw": 34.4736, - "o": 34.9, - "c": 34.24, - "h": 35.47, - "l": 34.21, - "t": 1602705600000, - "n": 4966 + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + }, + "to": { + "description": "The \"to\" currency symbol.", + "type": "string" } - ] + }, + "type": "object" } } - } + }, + "description": "The last tick for this currency pair, plus the converted amount for the requested amount." }, "default": { "description": "Unexpected error" } }, + "summary": "Real-time Currency Conversion", + "tags": [ + "fx:conversion" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "NBBO data", + "name": "nbbo" }, "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" + "description": "Forex data", + "name": "fx" } } }, - "/v2/aggs/ticker/{stocksTicker}/prev": { + "/v1/historic/crypto/{from}/{to}/{date}": { "get": { - "summary": "Previous Close", - "description": "Get the previous day's open, high, low, and close (OHLC) for the specified stock ticker.\n", - "tags": [ - "stocks:aggregates" - ], + "description": "Get historic trade ticks for a cryptocurrency pair.\n", "parameters": [ { - "name": "stocksTicker", + "description": "The \"from\" symbol of the crypto pair.", + "example": "BTC", "in": "path", - "description": "The ticker symbol of the stock/equity.", + "name": "from", "required": true, "schema": { "type": "string" - }, - "example": "AAPL" + } }, { - "name": "adjusted", + "description": "The \"to\" symbol of the crypto pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The date/day of the historic ticks to retrieve.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "name": "offset", "schema": { - "type": "boolean" - }, - "example": true + "type": "integer" + } + }, + { + "description": "Limit the size of the response, max 10000.", + "example": 100, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } } ], "responses": { "200": { - "description": "The previous day OHLC for the ticker.", "content": { "application/json": { + "example": { + "day": "2020-10-14T00:00:00.000Z", + "map": { + "c": "conditions", + "p": "price", + "s": "size", + "t": "timestamp", + "x": "exchange" + }, + "msLatency": 1, + "status": "success", + "symbol": "BTC-USD", + "ticks": [ + { + "c": [ + 2 + ], + "p": 15482.89, + "s": 0.00188217, + "t": 1604880000067, + "x": 1 + }, + { + "c": [ + 2 + ], + "p": 15482.11, + "s": 0.00161739, + "t": 1604880000167, + "x": 1 + } + ], + "type": "crypto" + }, "schema": { "allOf": [ { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - } + "description": "The status of this request's response.", + "type": "string" }, { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" }, - "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "map": { + "description": "A map for shortened result keys.", + "type": "object" }, - "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" }, - "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", + "ticks": { "items": { - "type": "object", "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" }, - "v": { - "type": "number", + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, - "vw": { - "type": "number", + "s": { + "description": "The size of a trade (also known as volume).\n", "format": "double", - "description": "The volume weighted average price." + "type": "number" }, "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" } - } - } + }, + "type": "object" + }, + "type": "array" } - } + }, + "type": "object" } ] - }, - "example": { - "ticker": "AAPL", - "status": "OK", - "queryCount": 1, - "resultsCount": 1, - "adjusted": true, - "results": [ - { - "T": "AAPL", - "v": 131704427, - "vw": 116.3058, - "o": 115.55, - "c": 115.97, - "h": 117.59, - "l": 114.13, - "t": 1605042000000 - } - ], - "request_id": "6a7e466379af0a71039d60cc78e72282" } } - } + }, + "description": "An array of crypto trade ticks." }, "default": { "description": "Unexpected error" } }, + "summary": "Historic Crypto Trades", + "tags": [ + "crypto:trades" + ], + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Trades v3", + "path": "get_v3_trades__cryptoticker" + } + }, "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Trade data", + "name": "trades" }, "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" + "description": "Crypto data", + "name": "crypto" } } }, - "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "/v1/historic/forex/{from}/{to}/{date}": { "get": { - "summary": "Aggregates (Bars)", - "description": "Get aggregate bars for a stock over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", - "tags": [ - "stocks:aggregates" - ], + "description": "Get historic ticks for a forex currency pair.\n", "parameters": [ { - "name": "stocksTicker", + "description": "The \"from\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `from` would be **USD**.\n", + "example": "AUD", "in": "path", - "description": "The ticker symbol of the stock/equity.", + "name": "from", "required": true, "schema": { "type": "string" - }, - "example": "AAPL" - }, - { - "name": "multiplier", - "in": "path", - "description": "The size of the timespan multiplier.", - "required": true, - "schema": { - "type": "integer" - }, - "example": 1 - }, - { - "name": "timespan", - "in": "path", - "description": "The size of the time window.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] - }, - "example": "day" + } }, { - "name": "from", + "description": "The \"to\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `to` would be **JPY**.\n", + "example": "USD", "in": "path", - "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "name": "to", "required": true, "schema": { "type": "string" - }, - "example": "2021-07-22" + } }, { - "name": "to", + "description": "The date/day of the historic ticks to retrieve.", + "example": "2020-10-14", "in": "path", - "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "name": "date", "required": true, "schema": { + "format": "date", "type": "string" - }, - "example": "2021-07-22" + } }, { - "name": "adjusted", + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "name": "offset", "schema": { - "type": "boolean" - }, - "example": true + "type": "integer" + } }, { - "name": "sort", - "schema": { - "enum": [ - "asc", - "desc" - ] - }, + "description": "Limit the size of the response, max 10000.", + "example": 100, "in": "query", - "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", - "example": "asc" - }, - { "name": "limit", - "in": "query", - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", - "required": false, "schema": { "type": "integer" - }, - "example": 120 + } } ], "responses": { "200": { - "description": "Stock Aggregates.", "content": { "application/json": { + "example": { + "day": "2020-10-14", + "map": { + "ap": "ask", + "bp": "bid", + "t": "timestamp" + }, + "msLatency": "0", + "pair": "AUD/USD", + "status": "success", + "ticks": [ + { + "ap": 0.71703, + "bp": 0.71701, + "t": 1602633600000, + "x": 48 + }, + { + "ap": 0.71703, + "bp": 0.717, + "t": 1602633600000, + "x": 48 + }, + { + "ap": 0.71702, + "bp": 0.717, + "t": 1602633600000, + "x": 48 + } + ], + "type": "forex" + }, "schema": { "allOf": [ { - "type": "object", "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" }, - "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "map": { + "description": "A map for shortened result keys.", + "type": "object" }, - "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" }, - "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + "pair": { + "description": "The currency pair that was evaluated from the request.", + "type": "string" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", + "ticks": { "items": { - "type": "object", "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", + "a": { + "description": "The ask price.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, - "vw": { - "type": "number", + "b": { + "description": "The bid price.", "format": "double", - "description": "The volume weighted average price." + "type": "number" }, "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - } - } - } - } - ] - }, - "example": { - "ticker": "AAPL", - "status": "OK", - "queryCount": 2, - "resultsCount": 2, - "adjusted": true, - "results": [ - { - "v": 135647456, - "vw": 74.6099, - "o": 74.06, - "c": 75.0875, - "h": 75.15, - "l": 73.7975, - "t": 1577941200000, - "n": 1 - }, - { - "v": 146535512, - "vw": 74.7026, - "o": 74.2875, - "c": 74.3575, - "h": 75.145, - "l": 74.125, - "t": 1578027600000, - "n": 1 + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" } - ], - "request_id": "6a7e466379af0a71039d60cc78e72282" + ] } } - } + }, + "description": "An array of forex ticks" }, "default": { "description": "Unexpected error" } }, + "summary": "Historic Forex Ticks", + "tags": [ + "fx:trades" + ], + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Quotes (BBO) v3", + "path": "get_v3_quotes__fxticker" + } + }, "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "NBBO data", + "name": "nbbo" }, "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" + "description": "Forex data", + "name": "fx" } } }, - "/v2/snapshot/locale/us/markets/stocks/tickers": { + "/v1/last/crypto/{from}/{to}": { "get": { - "summary": "All Tickers", - "description": "Get the most up-to-date market data for all traded stock symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", - "tags": [ - "stocks:snapshot" - ], + "description": "Get the last trade tick for a cryptocurrency pair.", + "operationId": "LastTradeCrypto", "parameters": [ { - "name": "tickers", - "in": "query", - "description": "A comma separated list of tickers to get snapshots for.", + "description": "The \"from\" symbol of the pair.", + "example": "BTC", + "in": "path", + "name": "from", + "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } }, { - "name": "include_otc", - "in": "query", - "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", - "required": false, + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "Get current state for all tickers", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "count": { - "type": "integer", - "description": "The total number of results for this request." - } - } - }, - { - "type": "object", - "properties": { - "tickers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size in lots." - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size in lots." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - }, - "lastTrade": { - "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "av": { - "type": "integer", - "description": "The accumulated volume." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } - } - } - } - } - } - ] - }, - "example": { - "status": "OK", - "count": 1, - "tickers": [ - { - "day": { - "c": 20.506, - "h": 20.64, - "l": 20.506, - "o": 20.64, - "v": 37216, - "vw": 20.616 - }, - "lastQuote": { - "P": 20.6, - "S": 22, - "p": 20.5, - "s": 13, - "t": 1605192959994246100 - }, - "lastTrade": { - "c": [ - 14, - 41 - ], - "i": "71675577320245", - "p": 20.506, - "s": 2416, - "t": 1605192894630916600, - "x": 4 - }, - "min": { - "av": 37216, - "c": 20.506, - "h": 20.506, - "l": 20.506, - "o": 20.506, - "v": 5000, - "vw": 20.5105 - }, - "prevDay": { - "c": 20.63, - "h": 21, - "l": 20.5, - "o": 20.79, - "v": 292738, - "vw": 20.6939 + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "last": { + "conditions": [ + 1 + ], + "exchange": 4, + "price": 16835.42, + "size": 0.006909, + "timestamp": 1605560885027 + }, + "request_id": "d2d779df015fe2b7fbb8e58366610ef7", + "status": "success", + "symbol": "BTC-USD" + }, + "schema": { + "properties": { + "last": { + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "[]*int32" + } + }, + "exchange": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.", + "type": "integer" + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } }, - "ticker": "BCAT", - "todaysChange": -0.124, - "todaysChangePerc": -0.601, - "updated": 1605192894630916600 + "type": "object" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" } - ] + }, + "type": "object" } } - } + }, + "description": "The last tick for this currency pair." }, "default": { "description": "Unexpected error" } }, + "summary": "Last Trade for a Crypto Pair", + "tags": [ + "crypto:last:trade" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Trade data", + "name": "trades" }, "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" - } - ] + "description": "Crypto data", + "name": "crypto" + } } }, - "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}": { + "/v1/last_quote/currencies/{from}/{to}": { "get": { - "summary": "Ticker", - "description": "Get the most up-to-date market data for a single traded stock ticker.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", - "tags": [ - "stocks:snapshot" - ], + "description": "Get the last quote tick for a forex currency pair.", + "operationId": "LastQuoteCurrencies", "parameters": [ { - "name": "stocksTicker", + "description": "The \"from\" symbol of the pair.", + "example": "AUD", "in": "path", - "description": "The ticker symbol of the stock/equity.", + "name": "from", "required": true, "schema": { "type": "string" - }, - "example": "AAPL" + } + }, + { + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } } ], "responses": { "200": { - "description": "Get current state for a ticker", "content": { "application/json": { + "example": { + "last": { + "ask": 0.73124, + "bid": 0.73122, + "exchange": 48, + "timestamp": 1605557756000 + }, + "request_id": "a73a29dbcab4613eeaf48583d3baacf0", + "status": "success", + "symbol": "AUD/USD" + }, "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } - }, - { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", + "properties": { + "last": { "properties": { - "ticker": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size in lots." - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size in lots." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - }, - "lastTrade": { - "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "av": { - "type": "integer", - "description": "The accumulated volume." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "exchange": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" } } - } - } - ] - }, - "example": { - "status": "OK", - "request_id": "657e430f1ae768891f018e08e03598d8", - "ticker": { - "day": { - "c": 120.4229, - "h": 120.53, - "l": 118.81, - "o": 119.62, - "v": 28727868, - "vw": 119.725 - }, - "lastQuote": { - "P": 120.47, - "S": 4, - "p": 120.46, - "s": 8, - "t": 1605195918507251700 - }, - "lastTrade": { - "c": [ - 14, - 41 - ], - "i": "4046", - "p": 120.47, - "s": 236, - "t": 1605195918306274000, - "x": 10 + }, + "type": "object" }, - "min": { - "av": 28724441, - "c": 120.4201, - "h": 120.468, - "l": 120.37, - "o": 120.435, - "v": 270796, - "vw": 120.4129 + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, - "prevDay": { - "c": 119.49, - "h": 119.63, - "l": 116.44, - "o": 117.19, - "v": 110597265, - "vw": 118.4998 + "status": { + "description": "The status of this request's response.", + "type": "string" }, - "ticker": "AAPL", - "todaysChange": 0.98, - "todaysChangePerc": 0.82, - "updated": 1605195918306274000 - } + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + } + }, + "type": "object" } } - } + }, + "description": "The last quote tick for this currency pair." }, "default": { "description": "Unexpected error" } }, + "summary": "Last Quote for a Currency Pair", + "tags": [ + "fx:last:quote" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "NBBO data", + "name": "nbbo" }, "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" + "description": "Forex data", + "name": "fx" + } + } + }, + "/v1/marketstatus/now": { + "get": { + "description": "Get the current trading status of the exchanges and overall financial markets.\n", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "afterHours": true, + "currencies": { + "crypto": "open", + "fx": "open" + }, + "earlyHours": false, + "exchanges": { + "nasdaq": "extended-hours", + "nyse": "extended-hours", + "otc": "closed" + }, + "market": "extended-hours", + "serverTime": "2020-11-10T22:37:37.000Z" + }, + "schema": { + "properties": { + "afterHours": { + "description": "Whether or not the market is in post-market hours.", + "type": "boolean" + }, + "currencies": { + "properties": { + "crypto": { + "description": "The status of the crypto market.", + "type": "string" + }, + "fx": { + "description": "The status of the forex market.", + "type": "string" + } + }, + "type": "object" + }, + "earlyHours": { + "description": "Whether or not the market is in pre-market hours.", + "type": "boolean" + }, + "exchanges": { + "properties": { + "nasdaq": { + "description": "The status of the Nasdaq market.", + "type": "string" + }, + "nyse": { + "description": "The status of the NYSE market.", + "type": "string" + }, + "otc": { + "description": "The status of the OTC market.", + "type": "string" + } + }, + "type": "object" + }, + "market": { + "description": "The status of the market as a whole.", + "type": "string" + }, + "serverTime": { + "description": "The current time of the server.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Status of the market and each exchange" }, - { - "name": "delayed", - "description": "15 minute delayed data" + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + }, + "409": { + "description": "Parameter is invalid or incorrect." } - ] + }, + "summary": "Market Status", + "tags": [ + "reference:stocks:market" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } } }, - "/v2/snapshot/locale/us/markets/stocks/{direction}": { + "/v1/marketstatus/upcoming": { "get": { - "summary": "Gainers/Losers", - "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "description": "Get upcoming market holidays and their open/close times.\n", + "responses": { + "200": { + "content": { + "application/json": { + "example": [ + { + "date": "2020-11-26T00:00:00.000Z", + "exchange": "NYSE", + "name": "Thanksgiving", + "status": "closed" + }, + { + "date": "2020-11-26T00:00:00.000Z", + "exchange": "NASDAQ", + "name": "Thanksgiving", + "status": "closed" + }, + { + "date": "2020-11-26T00:00:00.000Z", + "exchange": "OTC", + "name": "Thanksgiving", + "status": "closed" + }, + { + "close": "2020-11-27T18:00:00.000Z", + "date": "2020-11-27T00:00:00.000Z", + "exchange": "NASDAQ", + "name": "Thanksgiving", + "open": "2020-11-27T14:30:00.000Z", + "status": "early-close" + }, + { + "close": "2020-11-27T18:00:00.000Z", + "date": "2020-11-27T00:00:00.000Z", + "exchange": "NYSE", + "name": "Thanksgiving", + "open": "2020-11-27T14:30:00.000Z", + "status": "early-close" + } + ], + "schema": { + "items": { + "properties": { + "close": { + "description": "The market close time on the holiday (if it's not closed).", + "format": "date-time", + "type": "string" + }, + "date": { + "description": "The date of the holiday.", + "format": "date", + "type": "string" + }, + "exchange": { + "description": "Which market the record is for.", + "type": "string" + }, + "name": { + "description": "The name of the holiday.", + "type": "string" + }, + "open": { + "description": "The market open time on the holiday (if it's not closed).", + "format": "date-time", + "type": "string" + }, + "status": { + "description": "The status of the market on the holiday.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + } + }, + "description": "Holidays for each market in the near future." + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" + }, + "409": { + "description": "Parameter is invalid or incorrect." + } + }, + "summary": "Market Holidays", "tags": [ - "stocks:snapshot" + "reference:stocks:market" ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v1/open-close/crypto/{from}/{to}/{date}": { + "get": { + "description": "Get the open, close prices of a cryptocurrency symbol on a certain day.\n", "parameters": [ { - "name": "direction", + "description": "The \"from\" symbol of the pair.", + "example": "BTC", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "example": "2020-10-14", "in": "path", - "description": "The direction of the snapshot results to return.\n", + "name": "date", "required": true, "schema": { - "type": "string", - "enum": [ - "gainers", - "losers" - ] - }, - "example": "gainers" + "format": "date", + "type": "string" + } }, { - "name": "include_otc", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, "in": "query", - "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", - "required": false, + "name": "adjusted", "schema": { "type": "boolean" } @@ -4012,3736 +5575,3286 @@ ], "responses": { "200": { - "description": "Get the current tickers of the day", "content": { "application/json": { - "schema": { - "allOf": [ + "example": { + "close": 11050.64, + "closingTrades": [ { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } + "c": [ + 2 + ], + "i": "973323250", + "p": 11050.64, + "s": 0.006128, + "t": 1602287999795, + "x": 4 }, { - "type": "object", - "properties": { - "tickers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size in lots." - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size in lots." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - }, - "lastTrade": { - "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "av": { - "type": "integer", - "description": "The accumulated volume." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } - } - } - } - } + "c": [ + 1 + ], + "i": "105717893", + "p": 11049.4, + "s": 0.014, + "t": 1602287999659, + "x": 17 } - ] - }, - "example": { - "status": "OK", - "tickers": [ + ], + "day": "2020-10-09T00:00:00.000Z", + "isUTC": true, + "open": 10932.44, + "openTrades": [ { - "day": { - "c": 14.2284, - "h": 15.09, - "l": 14.2, - "o": 14.33, - "v": 133963, - "vw": 14.5311 - }, - "lastQuote": { - "P": 14.44, - "S": 11, - "p": 14.2, - "s": 25, - "t": 1605195929997325600 - }, - "lastTrade": { - "c": [ - 63 - ], - "i": "79372124707124", - "p": 14.2284, - "s": 536, - "t": 1605195848258266000, - "x": 4 - }, - "min": { - "av": 133963, - "c": 14.2284, - "h": 14.325, - "l": 14.2, - "o": 14.28, - "v": 6108, - "vw": 14.2426 + "c": [ + 2 + ], + "i": "511235746", + "p": 10932.44, + "s": 0.002, + "t": 1602201600056, + "x": 1 + }, + { + "c": [ + 2 + ], + "i": "511235751", + "p": 10923.76, + "s": 0.02, + "t": 1602201600141, + "x": 4 + } + ], + "symbol": "BTC-USD" + }, + "schema": { + "properties": { + "close": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "closingTrades": { + "items": { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + } + }, + "type": "object" }, - "prevDay": { - "c": 0.73, - "h": 0.799, - "l": 0.73, - "o": 0.75, - "v": 1568097, - "vw": 0.7721 + "type": "array" + }, + "day": { + "description": "The date requested.", + "format": "date", + "type": "string" + }, + "isUTC": { + "description": "Whether or not the timestamps are in UTC timezone.", + "type": "boolean" + }, + "open": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "openTrades": { + "items": { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + } + }, + "type": "object" }, - "ticker": "PDS", - "todaysChange": 13.498, - "todaysChangePerc": 1849.096, - "updated": 1605195848258266000 + "type": "array" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" } - ] + }, + "type": "object" } } - } + }, + "description": "The open/close of this symbol." }, "default": { "description": "Unexpected error" } }, + "summary": "Daily Open/Close", + "tags": [ + "crypto:open-close" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "stocks", - "description": "Stocks data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" - } - ] + "description": "Crypto data", + "name": "crypto" + } } }, - "/v2/last/trade/{optionsTicker}": { + "/v1/open-close/{optionsTicker}/{date}": { "get": { - "summary": "Last Trade", - "description": "Get the most recent trade for a given options contract.\n", - "tags": [ - "options:last:trade" - ], + "description": "Get the open, close and afterhours prices of an options contract on a certain date.\n", "parameters": [ { + "description": "The ticker symbol of the options contract.", + "example": "O:TSLA210903C00700000", + "in": "path", "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "example": "2021-07-22", "in": "path", - "description": "The ticker symbol of the options contract.", + "name": "date", "required": true, "schema": { + "format": "date", "type": "string" - }, - "example": "O:TSLA210903C00700000" + } + }, + { + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "The last trade for this options contract.", "content": { "application/json": { + "example": { + "afterHours": 26.35, + "close": 26.35, + "from": "2021-07-22", + "high": 26.35, + "low": 25, + "open": 25, + "preMarket": 25, + "status": "OK", + "symbol": "O:TSLA210903C00700000", + "volume": 2 + }, "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } + "properties": { + "afterHours": { + "description": "The close price of the ticker symbol in after hours trading.", + "format": "double", + "type": "number" }, - { - "type": "object", - "properties": { - "results": { - "allOf": [ - { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } - } - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "e": { - "type": "integer", - "description": "The trade correction indicator.\n" - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "r": { - "type": "integer", - "description": "The ID for the Trade Reporting Facility where the trade took place.\n" - }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - } - } - } - ] - } - } + "close": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The requested date.", + "format": "date", + "type": "string" + }, + "high": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "low": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "preMarket": { + "description": "The open price of the ticker symbol in pre-market trading.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "volume": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" } - ] - }, - "example": { - "request_id": "f05562305bd26ced64b98ed68b3c5d96", - "status": "OK", - "results": { - "T": "O:TSLA210903C00700000", - "c": [ - 227 - ], - "f": 1617901342969796400, - "i": "", - "p": 115.55, - "q": 1325541950, - "r": 202, - "s": 25, - "t": 1617901342969834000, - "x": 312 - } + }, + "type": "object" } } - } - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" + }, + "description": "The open/close of this stock symbol." }, - "404": { - "description": "The specified resource was not found" + "default": { + "description": "Unexpected error" } }, + "summary": "Daily Open/Close", + "tags": [ + "options:open-close" + ], "x-polygon-entitlement-data-type": { - "name": "trades", - "description": "Trade data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "options", - "description": "Options data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" - } - ] + "description": "Options data", + "name": "options" + } } }, - "/v1/open-close/{optionsTicker}/{date}": { + "/v1/open-close/{stocksTicker}/{date}": { "get": { - "summary": "Daily Open/Close", - "description": "Get the open, close and afterhours prices of an options contract on a certain date.\n", - "tags": [ - "options:open-close" - ], + "description": "Get the open, close and afterhours prices of a stock symbol on a certain date.\n", "parameters": [ { - "name": "optionsTicker", + "description": "The ticker symbol of the stock/equity.", + "example": "AAPL", "in": "path", - "description": "The ticker symbol of the options contract.", + "name": "stocksTicker", "required": true, "schema": { "type": "string" - }, - "example": "O:TSLA210903C00700000" + } }, { - "name": "date", - "in": "path", "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "example": "2020-10-14", + "in": "path", + "name": "date", "required": true, "schema": { - "type": "string", - "format": "date" - }, - "example": "2021-07-22" + "format": "date", + "type": "string" + } }, { - "name": "adjusted", - "in": "query", "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "example": true, + "in": "query", + "name": "adjusted", "schema": { "type": "boolean" - }, - "example": true + } } ], "responses": { "200": { - "description": "The open/close of this stock symbol.", "content": { "application/json": { + "example": { + "afterHours": 322.1, + "close": 325.12, + "from": "2020-10-14T00:00:00.000Z", + "high": 326.2, + "low": 322.3, + "open": 324.66, + "preMarket": 324.5, + "status": "OK", + "symbol": "AAPL", + "volume": 26122646 + }, "schema": { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." + "afterHours": { + "description": "The close price of the ticker symbol in after hours trading.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" }, "from": { - "type": "string", + "description": "The requested date.", "format": "date", - "description": "The requested date." - }, - "symbol": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "open": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "string" }, "high": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "low": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "close": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "volume": { - "type": "number", + "open": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" }, "preMarket": { - "type": "integer", - "description": "The open price of the ticker symbol in pre-market trading." + "description": "The open price of the ticker symbol in pre-market trading.", + "type": "integer" }, - "afterHours": { - "type": "number", + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "volume": { + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The close price of the ticker symbol in after hours trading." + "type": "number" } - } - }, - "example": { - "status": "OK", - "from": "2021-07-22", - "symbol": "O:TSLA210903C00700000", - "open": 25, - "high": 26.35, - "low": 25, - "close": 26.35, - "volume": 2, - "afterHours": 26.35, - "preMarket": 25 + }, + "type": "object" } } - } + }, + "description": "The open/close of this stock symbol." }, "default": { "description": "Unexpected error" } }, + "summary": "Daily Open/Close", + "tags": [ + "stocks:open-close" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "options", - "description": "Options data" + "description": "Stocks data", + "name": "stocks" } } }, - "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "/v1/reference/sec/filings": { "get": { - "summary": "Aggregates (Bars)", - "description": "Get aggregate bars for an option contract over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", - "tags": [ - "options:aggregates" - ], + "description": "List filings", + "operationId": "ListFilings", "parameters": [ { - "name": "optionsTicker", - "in": "path", - "description": "The ticker symbol of the options contract.", - "required": true, + "description": "Query by filing type.", + "in": "query", + "name": "type", + "schema": { + "description": "Filing Type", + "enum": [ + "10-K", + "10-Q" + ], + "type": "string" + } + }, + { + "description": "Query by filing date.", + "in": "query", + "name": "filing_date", "schema": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", "type": "string" }, - "example": "O:TSLA210903C00700000" + "x-polygon-filter-field": { + "range": true + } }, { - "name": "multiplier", - "in": "path", - "description": "The size of the timespan multiplier.", - "required": true, + "description": "Query by period of report.", + "in": "query", + "name": "period_of_report_date", "schema": { - "type": "integer" + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" }, - "example": 1 + "x-polygon-filter-field": { + "range": true + } }, { - "name": "timespan", - "in": "path", - "description": "The size of the time window.", - "required": true, + "description": "If true, query only for filings with an XBRL instance file.\nIf false, query for filings without an XBRL instance file.\nIf this parameter is not provided, query for filings with or without XBRL instance files.", + "in": "query", + "name": "has_xbrl", "schema": { - "type": "string", - "enum": [ - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] + "nullable": true, + "type": "boolean" }, - "example": "day" + "x-polygon-go-id": "HasXBRL" }, { - "name": "from", - "in": "path", - "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "required": true, + "description": "Query by entity company name.", + "in": "query", + "name": "entities.company_data.name", "schema": { + "example": "Facebook Inc", "type": "string" }, - "example": "2021-07-22" + "x-polygon-filter-field": { + "search": true + } }, { - "name": "to", - "in": "path", - "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "required": true, + "description": "Query by entity company CIK.", + "in": "query", + "name": "entities.company_data.cik", "schema": { + "description": "Central Index Key (CIK) Number", "type": "string" - }, - "example": "2021-07-22" + } }, { - "name": "adjusted", + "description": "Query by entity company ticker.", "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "name": "entities.company_data.ticker", "schema": { - "type": "boolean" - }, - "example": true + "description": "Ticker", + "type": "string" + } }, { - "name": "sort", + "description": "Query by entity company SIC.", + "in": "query", + "name": "entities.company_data.sic", + "schema": { + "description": "Standard Industrial Classification (SIC)", + "type": "string" + } + }, + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.gte", + "schema": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.gt", + "schema": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.lte", + "schema": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.lt", + "schema": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.gte", + "schema": { + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.gt", + "schema": { + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.lte", + "schema": { + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.lt", + "schema": { + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + } + }, + { + "description": "Search by entities.company_data.name.", + "in": "query", + "name": "entities.company_data.name.search", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", "schema": { "enum": [ "asc", "desc" - ] - }, - "in": "query", - "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", - "example": "asc" + ], + "example": "asc", + "type": "string" + } }, { - "name": "limit", + "description": "Limit the number of results returned, default is 10 and max is 1000.", "in": "query", - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", - "required": false, + "name": "limit", "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, "type": "integer" - }, - "example": 120 + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "filing_date", + "enum": [ + "filing_date", + "period_of_report_date" + ], + "example": "filing_date", + "type": "string" + } } ], "responses": { "200": { - "description": "Options Aggregates.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - } - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." - }, - "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." - }, - "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } + "content": { + "application/json": { + "description": "FIXME", + "example": {}, + "schema": { + "properties": { + "count": { + "type": "integer" }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "next_url": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "accession_number": { + "description": "Filing Accession Number", + "type": "string" + }, + "entities": { + "description": "Entities related to the filing (e.g. the document filers).", + "items": { + "description": "A filing entity (e.g. the document filer).", + "properties": { + "company_data": { + "properties": { + "cik": { + "description": "Central Index Key (CIK) Number", + "type": "string" + }, + "name": { + "example": "Facebook Inc", + "type": "string" + }, + "sic": { + "description": "Standard Industrial Classification (SIC)", + "type": "string" + }, + "ticker": { + "description": "Ticker", + "type": "string" + } + }, + "required": [ + "name", + "cik", + "sic" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECCompanyData", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "relation": { + "description": "Relationship of this entity to the filing.", + "enum": [ + "filer" + ], + "type": "string" + } }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "required": [ + "relation" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECFilingEntity", + "path": "github.com/polygon-io/go-lib-models/v2/globals" } - } + }, + "type": "array" + }, + "files_count": { + "description": "The number of files associated with the filing.", + "format": "int64", + "type": "integer" + }, + "filing_date": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + }, + "id": { + "description": "Unique identifier for the filing.", + "type": "string" + }, + "period_of_report_date": { + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + }, + "source_url": { + "description": "The source URL is a link back to the upstream source for this filing\ndocument.", + "example": "https://www.sec.gov/Archives/edgar/data/0001326801/000132680119000037/0001326801-19-000037-index.html", + "format": "uri", + "type": "string" + }, + "type": { + "description": "Filing Type", + "enum": [ + "10-K", + "10-Q" + ], + "type": "string" } + }, + "required": [ + "id", + "accession_number", + "type", + "filing_date", + "period_of_report_date", + "files_count", + "source_url", + "download_url", + "entities" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECFiling", + "path": "github.com/polygon-io/go-lib-models/v2/globals" } - } - } - ] - }, - "example": { - "ticker": "O:RDFN211119C00025000", - "queryCount": 2, - "resultsCount": 2, - "adjusted": true, - "results": [ - { - "v": 2, - "vw": 26.2, - "o": 26.2, - "c": 26.2, - "h": 26.2, - "l": 26.2, - "t": 1632369600000, - "n": 1 + }, + "type": "array" }, - { - "v": 2, - "vw": 28.3, - "o": 28.3, - "c": 28.3, - "h": 28.3, - "l": 28.3, - "t": 1632456000000, - "n": 1 + "status": { + "type": "string" } + }, + "required": [ + "status", + "request_id", + "count", + "results" ], - "status": "OK", - "request_id": "5585acde-5085-42d6-95b2-2e388a28370a", - "count": 2 + "type": "object" } } - } - }, - "default": { - "description": "Unexpected error" + }, + "description": "FIXME" } }, + "summary": "SEC Filings", + "tags": [ + "reference:sec:filings" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Reference data", + "name": "reference" }, - "x-polygon-entitlement-market-type": { - "name": "options", - "description": "Options data" + "x-polygon-paginate": { + "sort": { + "default": "filing_date", + "enum": [ + "filing_date", + "period_of_report_date" + ] + } } - } + }, + "x-polygon-draft": true }, - "/v2/aggs/ticker/{optionsTicker}/prev": { + "/v1/reference/sec/filings/{filing_id}": { "get": { - "summary": "Previous Close", - "description": "Get the previous day's open, high, low, and close (OHLC) for the specified option contract.\n", - "tags": [ - "options:aggregates" - ], + "description": "Get filing", + "operationId": "GetFiling", "parameters": [ { - "name": "optionsTicker", + "description": "Select by filing id.", "in": "path", - "description": "The ticker symbol of the options contract.", - "required": true, + "name": "filing_id", "schema": { + "description": "Unique identifier for the filing.", "type": "string" - }, - "example": "O:TSLA210903C00700000" - }, - { - "name": "adjusted", - "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, - "schema": { - "type": "boolean" - }, - "example": true + } } ], "responses": { "200": { - "description": "The previous day OHLC for the options contract.", "content": { "application/json": { + "description": "FIXME", + "example": {}, "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - } - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." - }, - "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." - }, - "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } + "properties": { + "accession_number": { + "description": "Filing Accession Number", + "type": "string" }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", + "entities": { + "description": "Entities related to the filing (e.g. the document filers).", + "items": { + "description": "A filing entity (e.g. the document filer).", + "properties": { + "company_data": { "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + "cik": { + "description": "Central Index Key (CIK) Number", + "type": "string" }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + "name": { + "example": "Facebook Inc", + "type": "string" }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "sic": { + "description": "Standard Industrial Classification (SIC)", + "type": "string" }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "ticker": { + "description": "Ticker", + "type": "string" } + }, + "required": [ + "name", + "cik", + "sic" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECCompanyData", + "path": "github.com/polygon-io/go-lib-models/v2/globals" } + }, + "relation": { + "description": "Relationship of this entity to the filing.", + "enum": [ + "filer" + ], + "type": "string" } + }, + "required": [ + "relation" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECFilingEntity", + "path": "github.com/polygon-io/go-lib-models/v2/globals" } - } - } - ] - }, - "example": { - "ticker": "O:TSLA210903C00700000", - "status": "OK", - "queryCount": 1, - "resultsCount": 1, - "adjusted": true, - "results": [ - { - "T": "O:TSLA210903C00700000", - "v": 131704427, - "vw": 116.3058, - "o": 115.55, - "c": 115.97, - "h": 117.59, - "l": 114.13, - "t": 1605042000000, - "n": 2 + }, + "type": "array" + }, + "files_count": { + "description": "The number of files associated with the filing.", + "format": "int64", + "type": "integer" + }, + "filing_date": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + }, + "id": { + "description": "Unique identifier for the filing.", + "type": "string" + }, + "period_of_report_date": { + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + }, + "source_url": { + "description": "The source URL is a link back to the upstream source for this filing\ndocument.", + "example": "https://www.sec.gov/Archives/edgar/data/0001326801/000132680119000037/0001326801-19-000037-index.html", + "format": "uri", + "type": "string" + }, + "type": { + "description": "Filing Type", + "enum": [ + "10-K", + "10-Q" + ], + "type": "string" } + }, + "required": [ + "id", + "accession_number", + "type", + "filing_date", + "period_of_report_date", + "files_count", + "source_url", + "download_url", + "entities" ], - "request_id": "6a7e466379af0a71039d60cc78e72282" + "type": "object", + "x-polygon-go-type": { + "name": "SECFiling", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } } } - } - }, - "default": { - "description": "Unexpected error" + }, + "description": "FIXME" } }, + "summary": "SEC Filing", + "tags": [ + "reference:sec:filing" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" - }, - "x-polygon-entitlement-market-type": { - "name": "options", - "description": "Options data" + "description": "Reference data", + "name": "reference" } - } + }, + "x-polygon-draft": true }, - "/v1/historic/forex/{from}/{to}/{date}": { + "/v1/reference/sec/filings/{filing_id}/files": { "get": { - "summary": "Historic Forex Ticks", - "description": "Get historic ticks for a forex currency pair.\n", - "tags": [ - "fx:trades" - ], + "description": "List filing files", + "operationId": "ListFilingFiles", "parameters": [ { - "name": "from", + "description": "Select by filing id.", "in": "path", - "description": "The \"from\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `from` would be **USD**.\n", - "required": true, + "name": "filing_id", "schema": { + "description": "Unique identifier for the filing.", "type": "string" + } + }, + { + "description": "Query by file sequence number.", + "in": "query", + "name": "sequence", + "schema": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, + "type": "integer" }, - "example": "AUD" + "x-polygon-filter-field": { + "range": true + } }, { - "name": "to", - "in": "path", - "description": "The \"to\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `to` would be **JPY**.\n", - "required": true, + "description": "Query by file name.", + "in": "query", + "name": "filename", "schema": { + "description": "The name for the file.", "type": "string" }, - "example": "USD" + "x-polygon-filter-field": { + "range": true + } }, { - "name": "date", - "in": "path", - "description": "The date/day of the historic ticks to retrieve.", - "required": true, + "description": "Search by sequence.", + "in": "query", + "name": "sequence.gte", "schema": { - "type": "string", - "format": "date" - }, - "example": "2020-10-14" + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, + "type": "integer" + } }, { - "name": "offset", + "description": "Search by sequence.", "in": "query", - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", - "required": false, + "name": "sequence.gt", "schema": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, "type": "integer" } }, { - "name": "limit", + "description": "Search by sequence.", "in": "query", - "description": "Limit the size of the response, max 10000.", - "required": false, + "name": "sequence.lte", "schema": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, "type": "integer" - }, - "example": 100 - } - ], - "responses": { - "200": { - "description": "An array of forex ticks", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } - }, - { - "type": "object", - "properties": { - "day": { - "type": "string", - "format": "date", - "description": "The date that was evaluated from the request." - }, - "map": { - "type": "object", - "description": "A map for shortened result keys." - }, - "msLatency": { - "type": "integer", - "description": "The milliseconds of latency for the query results." - }, - "pair": { - "type": "string", - "description": "The currency pair that was evaluated from the request." - }, - "ticks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - } - } - } - } - ] - }, - "example": { - "day": "2020-10-14", - "map": { - "ap": "ask", - "bp": "bid", - "t": "timestamp" - }, - "msLatency": "0", - "pair": "AUD/USD", - "status": "success", - "ticks": [ - { - "x": 48, - "ap": 0.71703, - "bp": 0.71701, - "t": 1602633600000 - }, - { - "x": 48, - "ap": 0.71703, - "bp": 0.717, - "t": 1602633600000 - }, - { - "x": 48, - "ap": 0.71702, - "bp": 0.717, - "t": 1602633600000 - } - ], - "type": "forex" - } - } } }, - "default": { - "description": "Unexpected error" - } - }, - "x-polygon-entitlement-data-type": { - "name": "nbbo", - "description": "NBBO data" - }, - "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" - }, - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "path": "get_v3_quotes__fxticker", - "name": "Quotes (BBO) v3" - } - } - } - }, - "/v1/conversion/{from}/{to}": { - "get": { - "summary": "Real-time Currency Conversion", - "description": "Get currency conversions using the latest market conversion rates. Note than you can convert in both directions. For example USD to CAD or CAD to USD.\n", - "tags": [ - "fx:conversion" - ], - "parameters": [ { - "name": "from", - "in": "path", - "description": "The \"from\" symbol of the pair.", - "required": true, + "description": "Search by sequence.", + "in": "query", + "name": "sequence.lt", + "schema": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, + "type": "integer" + } + }, + { + "description": "Search by filename.", + "in": "query", + "name": "filename.gte", "schema": { + "description": "The name for the file.", "type": "string" - }, - "example": "AUD" + } }, { - "name": "to", - "in": "path", - "description": "The \"to\" symbol of the pair.", - "required": true, + "description": "Search by filename.", + "in": "query", + "name": "filename.gt", "schema": { + "description": "The name for the file.", "type": "string" - }, - "example": "USD" + } }, { - "name": "amount", + "description": "Search by filename.", "in": "query", - "description": "The amount to convert, with a decimal.", - "required": false, + "name": "filename.lte", "schema": { - "type": "integer" - }, - "example": 100 + "description": "The name for the file.", + "type": "string" + } }, { - "name": "precision", + "description": "Search by filename.", "in": "query", - "description": "The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy.", - "required": false, + "name": "filename.lt", "schema": { - "type": "integer", - "enum": [ - 0, - 1, - 2, - 3, - 4 - ] - }, - "example": 2 - } - ], - "responses": { - "200": { - "description": "The last tick for this currency pair, plus the converted amount for the requested amount.", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } - }, - { - "type": "object", - "properties": { - "last": { - "type": "object", - "properties": { - "ask": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "bid": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "exchange": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "timestamp": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - }, - "from": { - "type": "string", - "description": "The \"from\" currency symbol." - }, - "to": { - "type": "string", - "description": "The \"to\" currency symbol." - }, - "initialAmount": { - "type": "number", - "format": "double", - "description": "The amount to convert." - }, - "converted": { - "type": "number", - "format": "double", - "description": "The result of the conversion." - } - } - } - ] - }, - "example": { - "status": "success", - "last": { - "bid": 1.3672596, - "ask": 1.3673344, - "exchange": 48, - "timestamp": 1605555313000 - }, - "from": "AUD", - "to": "USD", - "initialAmount": 100, - "converted": 73.14 - } - } + "description": "The name for the file.", + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" } }, - "default": { - "description": "Unexpected error" - } - }, - "x-polygon-entitlement-data-type": { - "name": "nbbo", - "description": "NBBO data" - }, - "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" - } - } - }, - "/v1/last_quote/currencies/{from}/{to}": { - "get": { - "summary": "Last Quote for a Currency Pair", - "description": "Get the last quote tick for a forex currency pair.\n", - "tags": [ - "fx:last:quote" - ], - "parameters": [ { - "name": "from", - "in": "path", - "description": "The \"from\" symbol of the pair.", - "required": true, + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", "schema": { - "type": "string" - }, - "example": "AUD" + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } }, { - "name": "to", - "in": "path", - "description": "The \"to\" symbol of the pair.", - "required": true, + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", "schema": { + "default": "sequence", + "enum": [ + "sequence", + "filename" + ], + "example": "sequence", "type": "string" - }, - "example": "USD" + } } ], "responses": { "200": { - "description": "The last quote tick for this currency pair.", "content": { "application/json": { + "description": "FIXME", + "example": {}, "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } + "properties": { + "count": { + "type": "integer" }, - { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } + "next_url": { + "type": "string" }, - { - "type": "object", - "properties": { - "last": { - "type": "object", - "properties": { - "ask": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "bid": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "exchange": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "timestamp": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } + "request_id": { + "type": "string" + }, + "results": { + "items": { + "description": "File associated with the filing.\n\nThis provides information to uniquly identify the additional data and a URL\nwhere the file may be downloaded.", + "properties": { + "description": { + "description": "A description for the contents of the file.", + "type": "string" + }, + "filename": { + "description": "The name for the file.", + "type": "string" + }, + "id": { + "description": "An identifier unique to the filing for this data entry.", + "example": "1", + "type": "string" + }, + "sequence": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, + "type": "integer" + }, + "size_bytes": { + "description": "The size of the file in bytes.", + "format": "int64", + "type": "integer" + }, + "source_url": { + "description": "The source URL is a link back to the upstream source for this file.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "The type of document contained in the file.", + "type": "string" } }, - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." + "required": [ + "id", + "file", + "description", + "type", + "size_bytes", + "sequence", + "source_url" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECFilingFile", + "path": "github.com/polygon-io/go-lib-models/v2/globals" } - } + }, + "type": "array" + }, + "status": { + "type": "string" } - ] - }, - "example": { - "last": { - "ask": 0.73124, - "bid": 0.73122, - "exchange": 48, - "timestamp": 1605557756000 }, - "request_id": "a73a29dbcab4613eeaf48583d3baacf0", - "status": "success", - "symbol": "AUD/USD" + "required": [ + "status", + "request_id", + "count", + "results" + ], + "type": "object" } } - } - }, - "default": { - "description": "Unexpected error" + }, + "description": "FIXME" } }, + "summary": "SEC Filing Files", + "tags": [ + "reference:sec:filing:files" + ], "x-polygon-entitlement-data-type": { - "name": "nbbo", - "description": "NBBO data" + "description": "Reference data", + "name": "reference" }, - "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" + "x-polygon-paginate": { + "sort": { + "default": "sequence", + "enum": [ + "sequence", + "filename" + ] + } } - } + }, + "x-polygon-draft": true }, - "/v2/aggs/grouped/locale/global/market/fx/{date}": { + "/v1/reference/sec/filings/{filing_id}/files/{file_id}": { "get": { - "summary": "Grouped Daily (Bars)", - "description": "Get the daily open, high, low, and close (OHLC) for the entire forex markets.\n", - "tags": [ - "fx:aggregates" - ], + "description": "Get filing file", + "operationId": "GetFilingFile", "parameters": [ { - "name": "date", + "description": "Select by filing id.", "in": "path", - "description": "The beginning date for the aggregate window.", - "required": true, + "name": "filing_id", "schema": { + "description": "Unique identifier for the filing.", "type": "string" - }, - "example": "2020-10-14" + } }, { - "name": "adjusted", - "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "description": "Select by file id.", + "in": "path", + "name": "file_id", "schema": { - "type": "boolean" - }, - "example": true + "description": "An identifier unique to the filing for this data entry.", + "example": "1", + "type": "string" + } } - ], - "responses": { - "200": { - "description": "Previous day OHLC for ticker", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." - }, - "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." - }, - "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." - } - } - } - } - } - } - ] - }, - "example": { - "status": "OK", - "queryCount": 3, - "resultsCount": 3, - "adjusted": true, - "results": [ - { - "T": "C:ILSCHF", - "v": 689, - "vw": 0.2702, - "o": 0.2698, - "c": 0.2704, - "h": 0.2706, - "l": 0.2693, - "t": 1602719999999, - "n": 689 - }, - { - "T": "C:GBPCAD", - "v": 407324, - "vw": 1.7062, - "o": 1.69955, - "c": 1.71103, - "h": 1.71642, - "l": 1.69064, - "t": 1602719999999, - "n": 407324 - }, - { - "T": "C:DKKAUD", - "v": 10639, - "vw": 0.2202, - "o": 0.22, - "c": 0.2214, - "h": 0.2214, - "l": 0.2195, - "t": 1602719999999, - "n": 10639 - } - ] - } + ], + "responses": { + "200": { + "content": { + "application/json": { + "description": "JavaScript Object Notation (JSON)", + "example": {} + }, + "application/octet-stream": { + "description": "Binary format", + "example": {} + }, + "application/pdf": { + "description": "Adobe Portable Document Format (PDF)", + "example": {} + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "description": "Microsoft Excel (OpenXML)", + "example": {} + }, + "application/xml": { + "description": "Extensible Markup Language (XML)", + "example": {} + }, + "application/zip": { + "description": "ZIP archive", + "example": {} + }, + "image/gif": { + "description": "Graphics Interchange Format (GIF)", + "example": {} + }, + "image/jpeg": { + "description": "Joint Photographic Experts Group (JPEG) image", + "example": {} + }, + "image/png": { + "description": "Portable Network Graphics (PNG)", + "example": {} + }, + "text/css": { + "description": "Cascading Style Sheets (CSS)", + "example": {} + }, + "text/html": { + "description": "HyperText Markup Language (HTML)", + "example": {} + }, + "text/javascript": { + "description": "JavaScript", + "example": {} + }, + "text/plain": { + "description": "Text", + "example": {} } - } - }, - "default": { - "description": "Unexpected error" + }, + "description": "The file data." } }, + "summary": "SEC Filing File", + "tags": [ + "reference:sec:filing:file" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" - }, - "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" + "description": "Reference data", + "name": "reference" } - } + }, + "x-polygon-draft": true }, - "/v2/aggs/ticker/{forexTicker}/prev": { + "/v2/aggs/grouped/locale/global/market/crypto/{date}": { "get": { - "summary": "Previous Close", - "description": "Get the previous day's open, high, low, and close (OHLC) for the specified forex pair.\n", - "tags": [ - "fx:aggregates" - ], + "description": "Get the daily open, high, low, and close (OHLC) for the entire cryptocurrency markets.\n", "parameters": [ { - "name": "forexTicker", + "description": "The beginning date for the aggregate window.", + "example": "2020-10-14", "in": "path", - "description": "The ticker symbol of the currency pair.", + "name": "date", "required": true, "schema": { "type": "string" - }, - "example": "C:EURUSD" + } }, { - "name": "adjusted", - "in": "query", "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "example": true, + "in": "query", + "name": "adjusted", "schema": { "type": "boolean" - }, - "example": true + } } ], "responses": { "200": { - "description": "The previous day OHLC for the ticker.", "content": { "application/json": { - "schema": { - "allOf": [ + "example": { + "adjusted": true, + "queryCount": 3, + "results": [ { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - } + "T": "X:ARDRUSD", + "c": 0.0550762, + "h": 0.0550762, + "l": 0.0550762, + "n": 18388, + "o": 0.0550762, + "t": 1580676480000, + "v": 2, + "vw": 0.0551 }, { - "type": "object", + "T": "X:NGCUSD", + "c": 0.0272983, + "h": 0.0273733, + "l": 0.0272983, + "n": 18, + "o": 0.0273733, + "t": 1580674080000, + "v": 4734, + "vw": 0.0273 + }, + { + "T": "X:ZSCUSD", + "c": 0.00028531, + "h": 0.00028531, + "l": 0.00028531, + "n": 151, + "o": 0.00028531, + "t": 1580671080000, + "v": 390, + "vw": 0.0003 + } + ], + "resultsCount": 3, + "status": "OK" + }, + "schema": { + "allOf": [ + { "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" }, "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + "description": "The total number of results for this request.", + "type": "integer" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { "results": { - "type": "array", "items": { - "type": "object", "properties": { "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." + "description": "The exchange symbol that this item is traded under.", + "type": "string" }, "c": { - "type": "number", + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" }, "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, - "vw": { - "type": "number", + "v": { + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The volume weighted average price." + "type": "number" }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } - } - ] - }, - "example": { - "ticker": "C:EURUSD", - "status": "OK", - "request_id": "08ec061fb85115678d68452c0a609cb7", - "queryCount": 1, - "resultsCount": 1, - "adjusted": true, - "results": [ - { - "T": "C:EURUSD", - "v": 180300, - "vw": 1.055, - "o": 1.05252, - "c": 1.06206, - "h": 1.0631, - "l": 1.0505, - "t": 1651708799999, - "n": 180300 + }, + "type": "object" } ] } } - } + }, + "description": "The previous day OHLC for the ticker." }, "default": { "description": "Unexpected error" } }, + "summary": "Grouped Daily (Bars)", + "tags": [ + "crypto:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" + "description": "Crypto data", + "name": "crypto" } } }, - "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "/v2/aggs/grouped/locale/global/market/fx/{date}": { "get": { - "summary": "Aggregates (Bars)", - "description": "Get aggregate bars for a forex pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", - "tags": [ - "fx:aggregates" - ], + "description": "Get the daily open, high, low, and close (OHLC) for the entire forex markets.\n", "parameters": [ { - "name": "forexTicker", - "in": "path", - "description": "The ticker symbol of the currency pair.", - "required": true, - "schema": { - "type": "string" - }, - "example": "C:EURUSD" - }, - { - "name": "multiplier", - "in": "path", - "description": "The size of the timespan multiplier.", - "required": true, - "schema": { - "type": "integer" - }, - "example": 1 - }, - { - "name": "timespan", - "in": "path", - "description": "The size of the time window.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ] - }, - "example": "day" - }, - { - "name": "from", - "in": "path", - "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "required": true, - "schema": { - "type": "string" - }, - "example": "2021-07-22" - }, - { - "name": "to", + "description": "The beginning date for the aggregate window.", + "example": "2020-10-14", "in": "path", - "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "name": "date", "required": true, "schema": { "type": "string" - }, - "example": "2021-07-22" + } }, { - "name": "adjusted", - "in": "query", "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, - "schema": { - "type": "boolean" - }, - "example": true - }, - { - "name": "sort", - "schema": { - "enum": [ - "asc", - "desc" - ] - }, - "in": "query", - "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", - "example": "asc" - }, - { - "name": "limit", + "example": true, "in": "query", - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", - "required": false, + "name": "adjusted", "schema": { - "type": "integer" - }, - "example": 120 + "type": "boolean" + } } ], "responses": { "200": { - "description": "Forex Aggregates.", "content": { "application/json": { - "schema": { - "allOf": [ + "example": { + "adjusted": true, + "queryCount": 3, + "results": [ + { + "T": "C:ILSCHF", + "c": 0.2704, + "h": 0.2706, + "l": 0.2693, + "n": 689, + "o": 0.2698, + "t": 1602719999999, + "v": 689, + "vw": 0.2702 + }, { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - } + "T": "C:GBPCAD", + "c": 1.71103, + "h": 1.71642, + "l": 1.69064, + "n": 407324, + "o": 1.69955, + "t": 1602719999999, + "v": 407324, + "vw": 1.7062 }, { - "type": "object", + "T": "C:DKKAUD", + "c": 0.2214, + "h": 0.2214, + "l": 0.2195, + "n": 10639, + "o": 0.22, + "t": 1602719999999, + "v": 10639, + "vw": 0.2202 + } + ], + "resultsCount": 3, + "status": "OK" + }, + "schema": { + "allOf": [ + { "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" }, "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + "description": "The total number of results for this request.", + "type": "integer" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { "results": { - "type": "array", "items": { - "type": "object", "properties": { - "o": { - "type": "number", + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "c": { - "type": "number", + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, "v": { - "type": "number", + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "vw": { - "type": "number", + "description": "The volume weighted average price.", "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } + }, + "type": "object" } ] - }, - "example": { - "ticker": "C:EURUSD", - "status": "OK", - "queryCount": 1, - "resultsCount": 1, - "adjusted": true, - "results": [ - { - "v": 125329, - "vw": 1.1789, - "o": 1.17921, - "c": 1.17721, - "h": 1.18305, - "l": 1.1756, - "t": 1626912000000, - "n": 125329 - } - ], - "request_id": "79c061995d8b627b736170bc9653f15d" } } - } + }, + "description": "Previous day OHLC for ticker" }, "default": { "description": "Unexpected error" } }, + "summary": "Grouped Daily (Bars)", + "tags": [ + "fx:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" + "description": "Forex data", + "name": "fx" } } }, - "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}": { + "/v2/aggs/grouped/locale/us/market/stocks/{date}": { "get": { - "summary": "Ticker", - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded currency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", - "tags": [ - "fx:snapshot" - ], + "description": "Get the daily open, high, low, and close (OHLC) for the entire stocks/equities markets.\n", "parameters": [ { - "name": "ticker", + "description": "The beginning date for the aggregate window.", + "example": "2020-10-14", "in": "path", - "description": "The forex ticker.", + "name": "date", "required": true, "schema": { "type": "string" - }, - "example": "C:EURUSD" + } + }, + { + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "type": "boolean" + } + }, + { + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "in": "query", + "name": "include_otc", + "schema": { + "type": "boolean" + } } ], "responses": { "200": { - "description": "Get current state for a ticker", "content": { "application/json": { - "schema": { - "allOf": [ + "example": { + "adjusted": true, + "queryCount": 3, + "results": [ { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } + "T": "KIMpL", + "c": 25.9102, + "h": 26.25, + "l": 25.91, + "n": 74, + "o": 26.07, + "t": 1602705600000, + "v": 4369, + "vw": 26.0407 }, { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } + "T": "TANH", + "c": 23.4, + "h": 24.763, + "l": 22.65, + "n": 1096, + "o": 24.5, + "t": 1602705600000, + "v": 25933.6, + "vw": 23.493 }, { - "type": "object", + "T": "VSAT", + "c": 34.24, + "h": 35.47, + "l": 34.21, + "n": 4966, + "o": 34.9, + "t": 1602705600000, + "v": 312583, + "vw": 34.4736 + } + ], + "resultsCount": 3, + "status": "OK" + }, + "schema": { + "allOf": [ + { "properties": { - "ticker": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker.", - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID on which this quote happened." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } - } + "type": "object" + }, + "type": "array" } - } + }, + "type": "object" } ] - }, - "example": { - "request_id": "ad76e76ce183002c5937a7f02dfebde4", - "status": "OK", - "ticker": { - "day": { - "c": 1.18403, - "h": 1.1906, - "l": 1.18001, - "o": 1.18725, - "v": 83578 - }, - "lastQuote": { - "a": 1.18403, - "b": 1.18398, - "i": 0, - "t": 1606163759000, - "x": 48 - }, - "min": { - "c": 1.18396, - "h": 1.18423, - "l": 1.1838, - "o": 1.18404, - "v": 41 - }, - "prevDay": { - "c": 1.18724, - "h": 1.18727, - "l": 1.18725, - "o": 1.18725, - "v": 5, - "vw": 0 - }, - "ticker": "C:EURUSD", - "todaysChange": -0.00316, - "todaysChangePerc": -0.27458312, - "updated": 1606163759000 - } } } - } + }, + "description": "Previous day OHLC for ticker" }, "default": { "description": "Unexpected error" } }, + "summary": "Grouped Daily (Bars)", + "tags": [ + "stocks:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" - } - ] + "description": "Stocks data", + "name": "stocks" + } } }, - "/v2/snapshot/locale/global/markets/forex/tickers": { + "/v2/aggs/ticker/{cryptoTicker}/prev": { "get": { - "summary": "All Tickers", - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded forex symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", - "tags": [ - "fx:snapshot" - ], + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified cryptocurrency pair.\n", "parameters": [ { - "name": "tickers", + "description": "The ticker symbol of the currency pair.", + "example": "X:BTCUSD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, "in": "query", - "description": "A comma separated list of tickers to get snapshots for.", + "name": "adjusted", "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "boolean" } } ], "responses": { "200": { - "description": "Get current state for all tickers", "content": { "application/json": { + "example": { + "adjusted": true, + "queryCount": 1, + "request_id": "b2170df985474b6d21a6eeccfb6bee67", + "results": [ + { + "T": "X:BTCUSD", + "c": 16035.9, + "h": 16180, + "l": 15639.2, + "o": 15937.1, + "t": 1605416400000, + "v": 95045.16897951, + "vw": 15954.2111 + } + ], + "resultsCount": 1, + "status": "OK", + "ticker": "X:BTCUSD" + }, "schema": { "allOf": [ { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { - "tickers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker.", - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID on which this quote happened." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - "todaysChange": { - "type": "number", + "h": { + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The value of the change the from previous day." + "type": "number" }, - "todaysChangePerc": { - "type": "number", + "l": { + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The percentage change since the previous day." + "type": "number" }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } - } - ] - }, - "example": { - "status": "OK", - "tickers": [ - { - "day": { - "c": 0.11778221, - "h": 0.11812263, - "l": 0.11766631, - "o": 0.11797149, - "v": 77794 - }, - "lastQuote": { - "a": 0.11780678, - "b": 0.11777952, - "t": 1605280919000, - "x": 48 - }, - "min": { - "c": 0.117769, - "h": 0.11779633, - "l": 0.11773698, - "o": 0.11778, - "v": 202 - }, - "prevDay": { - "c": 0.11797258, - "h": 0.11797258, - "l": 0.11797149, - "o": 0.11797149, - "v": 2, - "vw": 0 }, - "ticker": "C:HKDCHF", - "todaysChange": -0.00019306, - "todaysChangePerc": -0.1636482, - "updated": 1605280919000 + "type": "object" } ] } } - } + }, + "description": "The previous day OHLC for a ticker." }, "default": { "description": "Unexpected error" } }, + "summary": "Previous Close", + "tags": [ + "crypto:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" - } - ] + "description": "Crypto data", + "name": "crypto" + } } }, - "/v2/snapshot/locale/global/markets/forex/{direction}": { + "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "summary": "Gainers/Losers", - "description": "Get the current top 20 gainers or losers of the day in forex markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", - "tags": [ - "fx:snapshot" - ], + "description": "Get aggregate bars for a cryptocurrency pair over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", "parameters": [ { - "name": "direction", + "description": "The ticker symbol of the currency pair.", + "example": "X:BTCUSD", "in": "path", - "description": "The direction of the snapshot results to return.\n", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The size of the timespan multiplier.", + "example": 1, + "in": "path", + "name": "multiplier", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the time window.", + "example": "day", + "in": "path", + "name": "timespan", "required": true, "schema": { - "type": "string", "enum": [ - "gainers", - "losers" + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "type": "boolean" + } + }, + { + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc", + "in": "query", + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" ] - }, - "example": "gainers" + } + }, + { + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "example": 120, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } } ], "responses": { "200": { - "description": "Get the current gainers / losers of the day", "content": { "application/json": { + "example": { + "adjusted": true, + "queryCount": 2, + "request_id": "0cf72b6da685bcd386548ffe2895904a", + "results": [ + { + "c": 10094.75, + "h": 10429.26, + "l": 9490, + "n": 1, + "o": 9557.9, + "t": 1590984000000, + "v": 303067.6562332156, + "vw": 9874.5529 + }, + { + "c": 9492.62, + "h": 10222.72, + "l": 9135.68, + "n": 1, + "o": 10096.87, + "t": 1591070400000, + "v": 323339.6922892879, + "vw": 9729.5701 + } + ], + "resultsCount": 2, + "status": "OK", + "ticker": "X:BTCUSD" + }, "schema": { "allOf": [ { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { - "tickers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker.", - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID on which this quote happened." - } - } + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "results": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" }, - "todaysChange": { - "type": "number", + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The value of the change the from previous day." + "type": "number" }, - "todaysChangePerc": { - "type": "number", + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The percentage change since the previous day." + "type": "number" }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } - } - ] - }, - "example": { - "status": "OK", - "tickers": [ - { - "day": { - "c": 0.886156, - "h": 0.887111, - "l": 0.8825327, - "o": 0.8844732, - "v": 1041 - }, - "lastQuote": { - "a": 0.8879606, - "b": 0.886156, - "t": 1605283204000, - "x": 48 }, - "min": { - "c": 0.886156, - "h": 0.886156, - "l": 0.886156, - "o": 0.886156, - "v": 1 - }, - "prevDay": { - "c": 0.8428527, - "h": 0.889773, - "l": 0.8428527, - "o": 0.8848539, - "v": 1078, - "vw": 0 - }, - "ticker": "C:PLNILS", - "todaysChange": 0.0433033, - "todaysChangePerc": 5.13770674, - "updated": 1605330008999 + "type": "object" } ] } } - } + }, + "description": "Cryptocurrency Aggregates." }, "default": { "description": "Unexpected error" } }, + "summary": "Aggregates (Bars)", + "tags": [ + "crypto:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "fx", - "description": "Forex data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" - } - ] + "description": "Crypto data", + "name": "crypto" + } } }, - "/v1/last/crypto/{from}/{to}": { + "/v2/aggs/ticker/{forexTicker}/prev": { "get": { - "summary": "Last Trade for a Crypto Pair", - "description": "Get the last trade tick for a cryptocurrency pair.\n", - "tags": [ - "crypto:last:trade" - ], + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified forex pair.\n", "parameters": [ { - "name": "from", + "description": "The ticker symbol of the currency pair.", + "example": "C:EURUSD", "in": "path", - "description": "The \"from\" symbol of the pair.", + "name": "forexTicker", "required": true, "schema": { "type": "string" - }, - "example": "BTC" + } }, { - "name": "to", - "in": "path", - "description": "The \"to\" symbol of the pair.", - "required": true, + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, + "in": "query", + "name": "adjusted", "schema": { - "type": "string" - }, - "example": "USD" + "type": "boolean" + } } ], "responses": { "200": { - "description": "The last tick for this currency pair.", "content": { "application/json": { + "example": { + "adjusted": true, + "queryCount": 1, + "request_id": "08ec061fb85115678d68452c0a609cb7", + "results": [ + { + "T": "C:EURUSD", + "c": 1.06206, + "h": 1.0631, + "l": 1.0505, + "n": 180300, + "o": 1.05252, + "t": 1651708799999, + "v": 180300, + "vw": 1.055 + } + ], + "resultsCount": 1, + "status": "OK", + "ticker": "C:EURUSD" + }, "schema": { "allOf": [ { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, "request_id": { - "type": "string", - "description": "A request id assigned by the server." + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { - "last": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } - }, - "exchange": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "price": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "size": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "timestamp": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - }, - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." - } - } - } - ] - }, - "example": { - "last": { - "conditions": [ - 1 - ], - "exchange": 4, - "price": 16835.42, - "size": 0.006909, - "timestamp": 1605560885027 - }, - "request_id": "d2d779df015fe2b7fbb8e58366610ef7", - "status": "success", - "symbol": "BTC-USD" + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] } } - } + }, + "description": "The previous day OHLC for the ticker." }, "default": { "description": "Unexpected error" } }, + "summary": "Previous Close", + "tags": [ + "fx:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "trades", - "description": "Trade data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" + "description": "Forex data", + "name": "fx" } } }, - "/v1/open-close/crypto/{from}/{to}/{date}": { + "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "summary": "Daily Open/Close", - "description": "Get the open, close prices of a cryptocurrency symbol on a certain day.\n", - "tags": [ - "crypto:open-close" - ], + "description": "Get aggregate bars for a forex pair over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", "parameters": [ { - "name": "from", + "description": "The ticker symbol of the currency pair.", + "example": "C:EURUSD", "in": "path", - "description": "The \"from\" symbol of the pair.", + "name": "forexTicker", "required": true, "schema": { "type": "string" - }, - "example": "BTC" + } }, { - "name": "to", + "description": "The size of the timespan multiplier.", + "example": 1, "in": "path", - "description": "The \"to\" symbol of the pair.", + "name": "multiplier", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the time window.", + "example": "day", + "in": "path", + "name": "timespan", "required": true, "schema": { + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], "type": "string" - }, - "example": "USD" + } }, { - "name": "date", + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", "in": "path", - "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "name": "from", "required": true, "schema": { - "type": "string", - "format": "date" - }, - "example": "2020-10-14" + "type": "string" + } + }, + { + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } }, { - "name": "adjusted", - "in": "query", "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "example": true, + "in": "query", + "name": "adjusted", "schema": { "type": "boolean" - }, - "example": true + } + }, + { + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc", + "in": "query", + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" + ] + } + }, + { + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "example": 120, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } } ], "responses": { "200": { - "description": "The open/close of this symbol.", "content": { "application/json": { - "schema": { - "type": "object", - "properties": { - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." - }, - "isUTC": { - "type": "boolean", - "description": "Whether or not the timestamps are in UTC timezone." - }, - "day": { - "type": "string", - "format": "date", - "description": "The date requested." - }, - "open": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "close": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "openTrades": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - } - } - } - }, - "closingTrades": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - } - } - } - } - } - }, "example": { - "symbol": "BTC-USD", - "isUTC": true, - "day": "2020-10-09T00:00:00.000Z", - "open": 10932.44, - "close": 11050.64, - "openTrades": [ - { - "s": 0.002, - "p": 10932.44, - "x": 1, - "t": 1602201600056, - "c": [ - 2 - ], - "i": "511235746" - }, + "adjusted": true, + "queryCount": 1, + "request_id": "79c061995d8b627b736170bc9653f15d", + "results": [ { - "s": 0.02, - "p": 10923.76, - "x": 4, - "t": 1602201600141, - "c": [ - 2 - ], - "i": "511235751" + "c": 1.17721, + "h": 1.18305, + "l": 1.1756, + "n": 125329, + "o": 1.17921, + "t": 1626912000000, + "v": 125329, + "vw": 1.1789 } ], - "closingTrades": [ + "resultsCount": 1, + "status": "OK", + "ticker": "C:EURUSD" + }, + "schema": { + "allOf": [ { - "s": 0.006128, - "p": 11050.64, - "x": 4, - "t": 1602287999795, - "c": [ - 2 - ], - "i": "973323250" + "properties": { + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "type": "object" }, { - "s": 0.014, - "p": 11049.4, - "x": 17, - "t": 1602287999659, - "c": [ - 1 - ], - "i": "105717893" + "properties": { + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "results": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" } ] } } - } + }, + "description": "Forex Aggregates." }, "default": { "description": "Unexpected error" } }, + "summary": "Aggregates (Bars)", + "tags": [ + "fx:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" + "description": "Forex data", + "name": "fx" } } }, - "/v1/historic/crypto/{from}/{to}/{date}": { + "/v2/aggs/ticker/{optionsTicker}/prev": { "get": { - "summary": "Historic Crypto Trades", - "description": "Get historic trade ticks for a cryptocurrency pair.\n", - "tags": [ - "crypto:trades" - ], + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified option contract.\n", "parameters": [ { - "name": "from", - "in": "path", - "description": "The \"from\" symbol of the crypto pair.", - "required": true, - "schema": { - "type": "string" - }, - "example": "BTC" - }, - { - "name": "to", + "description": "The ticker symbol of the options contract.", + "example": "O:TSLA210903C00700000", "in": "path", - "description": "The \"to\" symbol of the crypto pair.", + "name": "optionsTicker", "required": true, "schema": { "type": "string" - }, - "example": "USD" - }, - { - "name": "date", - "in": "path", - "description": "The date/day of the historic ticks to retrieve.", - "required": true, - "schema": { - "type": "string", - "format": "date" - }, - "example": "2020-10-14" - }, - { - "name": "offset", - "in": "query", - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", - "required": false, - "schema": { - "type": "integer" } }, { - "name": "limit", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, "in": "query", - "description": "Limit the size of the response, max 10000.", - "required": false, + "name": "adjusted", "schema": { - "type": "integer" - }, - "example": 100 + "type": "boolean" + } } ], "responses": { "200": { - "description": "An array of crypto trade ticks.", "content": { "application/json": { + "example": { + "adjusted": true, + "queryCount": 1, + "request_id": "6a7e466379af0a71039d60cc78e72282", + "results": [ + { + "T": "O:TSLA210903C00700000", + "c": 115.97, + "h": 117.59, + "l": 114.13, + "n": 2, + "o": 115.55, + "t": 1605042000000, + "v": 131704427, + "vw": 116.3058 + } + ], + "resultsCount": 1, + "status": "OK", + "ticker": "O:TSLA210903C00700000" + }, "schema": { "allOf": [ { - "type": "string", - "description": "The status of this request's response." + "properties": { + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "type": "object" }, { - "type": "object", "properties": { - "day": { - "type": "string", - "format": "date", - "description": "The date that was evaluated from the request." + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" }, - "map": { - "type": "object", - "description": "A map for shortened result keys." + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" }, - "msLatency": { - "type": "integer", - "description": "The milliseconds of latency for the query results." + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" }, - "ticks": { - "type": "array", + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "results": { "items": { - "type": "object", "properties": { - "p": { - "type": "number", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + "type": "number" }, - "s": { - "type": "number", + "h": { + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The size of a trade (also known as volume).\n" + "type": "number" }, - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" }, - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" }, "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } + }, + "type": "object" } ] - }, - "example": { - "day": "2020-10-14T00:00:00.000Z", - "map": { - "c": "conditions", - "p": "price", - "s": "size", - "t": "timestamp", - "x": "exchange" - }, - "msLatency": 1, - "status": "success", - "symbol": "BTC-USD", - "ticks": [ - { - "s": 0.00188217, - "p": 15482.89, - "x": 1, - "t": 1604880000067, - "c": [ - 2 - ] - }, - { - "s": 0.00161739, - "p": 15482.11, - "x": 1, - "t": 1604880000167, - "c": [ - 2 - ] - } - ], - "type": "crypto" } } - } + }, + "description": "The previous day OHLC for the options contract." }, "default": { "description": "Unexpected error" } }, + "summary": "Previous Close", + "tags": [ + "options:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "trades", - "description": "Trade data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" - }, - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "path": "get_v3_trades__cryptoticker", - "name": "Trades v3" - } + "description": "Options data", + "name": "options" } } }, - "/v2/aggs/grouped/locale/global/market/crypto/{date}": { + "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "summary": "Grouped Daily (Bars)", - "description": "Get the daily open, high, low, and close (OHLC) for the entire cryptocurrency markets.\n", - "tags": [ - "crypto:aggregates" - ], + "description": "Get aggregate bars for an option contract over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", "parameters": [ { - "name": "date", + "description": "The ticker symbol of the options contract.", + "example": "O:TSLA210903C00700000", "in": "path", - "description": "The beginning date for the aggregate window.", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The size of the timespan multiplier.", + "example": 1, + "in": "path", + "name": "multiplier", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the time window.", + "example": "day", + "in": "path", + "name": "timespan", + "required": true, + "schema": { + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "to", "required": true, "schema": { - "type": "string" - }, - "example": "2020-10-14" + "type": "string" + } + }, + { + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "type": "boolean" + } + }, + { + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc", + "in": "query", + "name": "sort", + "schema": { + "enum": [ + "asc", + "desc" + ] + } }, { - "name": "adjusted", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "example": 120, "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "name": "limit", "schema": { - "type": "boolean" - }, - "example": true + "type": "integer" + } } ], "responses": { "200": { - "description": "The previous day OHLC for the ticker.", "content": { "application/json": { + "example": { + "adjusted": true, + "count": 2, + "queryCount": 2, + "request_id": "5585acde-5085-42d6-95b2-2e388a28370a", + "results": [ + { + "c": 26.2, + "h": 26.2, + "l": 26.2, + "n": 1, + "o": 26.2, + "t": 1632369600000, + "v": 2, + "vw": 26.2 + }, + { + "c": 28.3, + "h": 28.3, + "l": 28.3, + "n": 1, + "o": 28.3, + "t": 1632456000000, + "v": 2, + "vw": 28.3 + } + ], + "resultsCount": 2, + "status": "OK", + "ticker": "O:RDFN211119C00025000" + }, "schema": { "allOf": [ { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" }, "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + "description": "The total number of results for this request.", + "type": "integer" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { "results": { - "type": "array", "items": { - "type": "object", "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "o": { - "type": "number", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "c": { - "type": "number", + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, "v": { - "type": "number", + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "vw": { - "type": "number", + "description": "The volume weighted average price.", "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } - } - ] - }, - "example": { - "status": "OK", - "queryCount": 3, - "resultsCount": 3, - "adjusted": true, - "results": [ - { - "T": "X:ARDRUSD", - "v": 2, - "vw": 0.0551, - "o": 0.0550762, - "c": 0.0550762, - "h": 0.0550762, - "l": 0.0550762, - "t": 1580676480000, - "n": 18388 - }, - { - "T": "X:NGCUSD", - "v": 4734, - "vw": 0.0273, - "o": 0.0273733, - "c": 0.0272983, - "h": 0.0273733, - "l": 0.0272983, - "t": 1580674080000, - "n": 18 - }, - { - "T": "X:ZSCUSD", - "v": 390, - "vw": 0.0003, - "o": 0.00028531, - "c": 0.00028531, - "h": 0.00028531, - "l": 0.00028531, - "t": 1580671080000, - "n": 151 + }, + "type": "object" } ] } } - } + }, + "description": "Options Aggregates." }, "default": { "description": "Unexpected error" } }, + "summary": "Aggregates (Bars)", + "tags": [ + "options:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" + "description": "Options data", + "name": "options" } } }, - "/v2/aggs/ticker/{cryptoTicker}/prev": { + "/v2/aggs/ticker/{stocksTicker}/prev": { "get": { - "summary": "Previous Close", - "description": "Get the previous day's open, high, low, and close (OHLC) for the specified cryptocurrency pair.\n", - "tags": [ - "crypto:aggregates" - ], + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified stock ticker.\n", "parameters": [ { - "name": "cryptoTicker", + "description": "The ticker symbol of the stock/equity.", + "example": "AAPL", "in": "path", - "description": "The ticker symbol of the currency pair.", + "name": "stocksTicker", "required": true, "schema": { "type": "string" - }, - "example": "X:BTCUSD" + } }, { - "name": "adjusted", - "in": "query", "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "example": true, + "in": "query", + "name": "adjusted", "schema": { "type": "boolean" - }, - "example": true + } } ], "responses": { "200": { - "description": "The previous day OHLC for a ticker.", "content": { "application/json": { + "example": { + "adjusted": true, + "queryCount": 1, + "request_id": "6a7e466379af0a71039d60cc78e72282", + "results": [ + { + "T": "AAPL", + "c": 115.97, + "h": 117.59, + "l": 114.13, + "o": 115.55, + "t": 1605042000000, + "v": 131704427, + "vw": 116.3058 + } + ], + "resultsCount": 1, + "status": "OK", + "ticker": "AAPL" + }, "schema": { "allOf": [ { - "type": "object", "properties": { "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + "description": "The exchange symbol that this item is traded under.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" }, "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + "description": "The total number of results for this request.", + "type": "integer" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { "results": { - "type": "array", "items": { - "type": "object", "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "o": { - "type": "number", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "c": { - "type": "number", + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, "v": { - "type": "number", + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "vw": { - "type": "number", + "description": "The volume weighted average price.", "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } - } - ] - }, - "example": { - "ticker": "X:BTCUSD", - "status": "OK", - "request_id": "b2170df985474b6d21a6eeccfb6bee67", - "queryCount": 1, - "resultsCount": 1, - "adjusted": true, - "results": [ - { - "T": "X:BTCUSD", - "v": 95045.16897951, - "vw": 15954.2111, - "o": 15937.1, - "c": 16035.9, - "h": 16180, - "l": 15639.2, - "t": 1605416400000 + }, + "type": "object" } ] } } - } + }, + "description": "The previous day OHLC for the ticker." }, "default": { "description": "Unexpected error" } }, + "summary": "Previous Close", + "tags": [ + "stocks:aggregates" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" + "description": "Stocks data", + "name": "stocks" } } }, - "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "summary": "Aggregates (Bars)", - "description": "Get aggregate bars for a cryptocurrency pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", - "tags": [ - "crypto:aggregates" - ], + "description": "Get aggregate bars for a stock over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", "parameters": [ { - "name": "cryptoTicker", + "description": "The ticker symbol of the stock/equity.", + "example": "AAPL", "in": "path", - "description": "The ticker symbol of the currency pair.", + "name": "stocksTicker", "required": true, "schema": { "type": "string" - }, - "example": "X:BTCUSD" + } }, { - "name": "multiplier", - "in": "path", "description": "The size of the timespan multiplier.", + "example": 1, + "in": "path", + "name": "multiplier", "required": true, "schema": { "type": "integer" - }, - "example": 1 + } }, { - "name": "timespan", - "in": "path", "description": "The size of the time window.", + "example": "day", + "in": "path", + "name": "timespan", "required": true, "schema": { - "type": "string", "enum": [ "minute", "hour", @@ -7750,1044 +8863,1196 @@ "month", "quarter", "year" - ] - }, - "example": "day" + ], + "type": "string" + } }, { - "name": "from", - "in": "path", "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "from", "required": true, "schema": { "type": "string" - }, - "example": "2021-07-22" + } }, { - "name": "to", - "in": "path", "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2021-07-22", + "in": "path", + "name": "to", "required": true, "schema": { "type": "string" - }, - "example": "2021-07-22" + } }, { - "name": "adjusted", - "in": "query", "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, + "example": true, + "in": "query", + "name": "adjusted", "schema": { "type": "boolean" - }, - "example": true + } }, { + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc", + "in": "query", "name": "sort", "schema": { "enum": [ "asc", "desc" ] - }, - "in": "query", - "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", - "example": "asc" + } }, { - "name": "limit", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "example": 120, "in": "query", - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", - "required": false, + "name": "limit", "schema": { "type": "integer" - }, - "example": 120 + } } ], "responses": { "200": { - "description": "Cryptocurrency Aggregates.", "content": { "application/json": { + "example": { + "adjusted": true, + "queryCount": 2, + "request_id": "6a7e466379af0a71039d60cc78e72282", + "results": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "resultsCount": 2, + "status": "OK", + "ticker": "AAPL" + }, "schema": { "allOf": [ { - "type": "object", "properties": { "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + "description": "The exchange symbol that this item is traded under.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" }, "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + "description": "The total number of results for this request.", + "type": "integer" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" }, { - "type": "object", "properties": { "results": { - "type": "array", "items": { - "type": "object", "properties": { - "o": { - "type": "number", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "c": { - "type": "number", + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, "v": { - "type": "number", + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "vw": { - "type": "number", + "description": "The volume weighted average price.", "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "type": "number" } - } - } + }, + "type": "object" + }, + "type": "array" } - } + }, + "type": "object" } ] - }, + } + } + }, + "description": "Stock Aggregates." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Aggregates (Bars)", + "tags": [ + "stocks:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, + "/v2/last/nbbo/{stocksTicker}": { + "get": { + "description": "Get the most recent NBBO (Quote) tick for a given stock.", + "operationId": "LastQuote", + "parameters": [ + { + "description": "The ticker symbol of the stock/equity.", + "example": "AAPL", + "in": "path", + "name": "stocksTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + } + ], + "responses": { + "200": { + "content": { + "application/json": { "example": { - "ticker": "X:BTCUSD", - "status": "OK", - "queryCount": 2, - "resultsCount": 2, - "adjusted": true, - "results": [ - { - "v": 303067.6562332156, - "vw": 9874.5529, - "o": 9557.9, - "c": 10094.75, - "h": 10429.26, - "l": 9490, - "t": 1590984000000, - "n": 1 + "request_id": "b84e24636301f19f88e0dfbf9a45ed5c", + "results": { + "P": 127.98, + "S": 7, + "T": "AAPL", + "X": 19, + "p": 127.96, + "q": 83480742, + "s": 1, + "t": 1617827221349730300, + "x": 11, + "y": 1617827221349366000, + "z": 3 + }, + "status": "OK" + }, + "schema": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, - { - "v": 323339.6922892879, - "vw": 9729.5701, - "o": 10096.87, - "c": 9492.62, - "h": 10222.72, - "l": 9135.68, - "t": 1591070400000, - "n": 1 + "results": { + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "type": "integer" + }, + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "X": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "c": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "[]*int32" + } + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "i": { + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).", + "items": { + "description": "The indicator code.", + "type": "integer" + }, + "type": "array" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).", + "format": "int64", + "type": "integer" + }, + "s": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "type": "integer" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ", + "type": "integer" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastQuoteResult" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } - ], - "request_id": "0cf72b6da685bcd386548ffe2895904a" + }, + "type": "object" } } - } + }, + "description": "The last NBBO tick for this stock." }, - "default": { - "description": "Unexpected error" + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" } }, + "summary": "Last Quote", + "tags": [ + "stocks:last:quote" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" + }, + { + "description": "15 minute delayed data", + "name": "delayed" + } + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "NBBO data", + "name": "nbbo" }, "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" + "description": "Stocks data", + "name": "stocks" } } }, - "/v2/snapshot/locale/global/markets/crypto/tickers": { + "/v2/last/trade/{optionsTicker}": { "get": { - "summary": "All Tickers", - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", - "tags": [ - "crypto:snapshot" - ], + "description": "Get the most recent trade for a given options contract.", + "operationId": "LastTradeOptions", "parameters": [ { - "name": "tickers", - "in": "query", - "description": "A comma separated list of tickers to get snapshots for.", + "description": "The ticker symbol of the options contract.", + "example": "O:TSLA210903C00700000", + "in": "path", + "name": "optionsTicker", + "required": true, "schema": { - "type": "array", - "items": { - "type": "string" - } + "type": "string" } } ], "responses": { "200": { - "description": "Get current state for all tickers", "content": { "application/json": { + "example": { + "request_id": "f05562305bd26ced64b98ed68b3c5d96", + "results": { + "T": "O:TSLA210903C00700000", + "c": [ + 227 + ], + "f": 1617901342969796400, + "i": "", + "p": 115.55, + "q": 1325541950, + "r": 202, + "s": 25, + "t": 1617901342969834000, + "x": 312 + }, + "status": "OK" + }, "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, - { - "type": "object", + "results": { "properties": { - "tickers": { - "type": "array", + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "A list of condition codes.", "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "lastTrade": { - "allOf": [ - { - "description": "The most recent trade for this ticker." - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - { - "properties": { - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - } - } - } - ] - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } - } + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "[]*int32" } + }, + "e": { + "description": "The trade correction indicator.", + "type": "integer" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).", + "format": "int64", + "type": "integer" + }, + "r": { + "description": "The ID for the Trade Reporting Facility where the trade took place.", + "type": "integer" + }, + "s": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ", + "type": "integer" } - } - } - ] - }, - "example": { - "status": "OK", - "tickers": [ - { - "day": { - "c": 0.296, - "h": 0.59714, - "l": 0.23706, - "o": 0.28, - "v": 4097699.5691991993, - "vw": 0 - }, - "lastTrade": { - "c": [ - 1 - ], - "i": 413131, - "p": 0.293, - "s": 13.6191, - "t": 1605292686010, - "x": 17 - }, - "min": { - "c": 0.296, - "h": 0.296, - "l": 0.294, - "o": 0.296, - "v": 123.4866, - "vw": 0 - }, - "prevDay": { - "c": 0.281, - "h": 0.59714, - "l": 0.23706, - "o": 0.27, - "v": 6070178.786154971, - "vw": 0.4076 }, - "ticker": "X:FSNUSD", - "todaysChange": 0.012, - "todaysChangePerc": 4.270463, - "updated": 1605330008999 + "type": "object", + "x-polygon-go-type": { + "name": "LastTradeResult" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } - ] + }, + "type": "object" } } - } + }, + "description": "The last trade for this options contract." }, - "default": { - "description": "Unexpected error" + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" } }, - "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" - }, - "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" - }, + "summary": "Last Trade", + "tags": [ + "options:last:trade" + ], "x-polygon-entitlement-allowed-timeframes": [ { - "name": "realtime", - "description": "Real Time Data" + "description": "Real Time Data", + "name": "realtime" }, { - "name": "delayed", - "description": "15 minute delayed data" + "description": "15 minute delayed data", + "name": "delayed" } - ] - } + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + }, + "x-polygon-ignore": true }, - "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}": { + "/v2/last/trade/{stocksTicker}": { "get": { - "summary": "Ticker", - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded cryptocurrency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", - "tags": [ - "crypto:snapshot" - ], + "description": "Get the most recent trade for a given stock.", + "operationId": "LastTrade", "parameters": [ { - "name": "ticker", + "description": "The ticker symbol of the stock/equity.", + "example": "AAPL", "in": "path", - "description": "Ticker of the snapshot", + "name": "stocksTicker", "required": true, "schema": { "type": "string" }, - "example": "X:BTCUSD" + "x-polygon-go-id": "Ticker" } ], "responses": { "200": { - "description": "Get current state for a ticker", "content": { "application/json": { + "example": { + "request_id": "f05562305bd26ced64b98ed68b3c5d96", + "results": { + "T": "AAPL", + "c": [ + 37 + ], + "f": 1617901342969796400, + "i": "118749", + "p": 129.8473, + "q": 3135876, + "r": 202, + "s": 25, + "t": 1617901342969834000, + "x": 4, + "y": 1617901342968000000, + "z": 3 + }, + "status": "OK" + }, "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } - }, - { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" }, - { - "type": "object", + "results": { "properties": { - "ticker": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "lastTrade": { - "allOf": [ - { - "description": "The most recent trade for this ticker." - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - { - "properties": { - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - } - } - } - ] - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "[]*int32" } + }, + "e": { + "description": "The trade correction indicator.", + "type": "integer" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).", + "format": "int64", + "type": "integer" + }, + "r": { + "description": "The ID for the Trade Reporting Facility where the trade took place.", + "type": "integer" + }, + "s": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ", + "type": "integer" } - } - } - ] - }, - "example": { - "request_id": "ad92e92ce183112c593717f00dfebd2c", - "status": "OK", - "ticker": { - "day": { - "c": 16260.85, - "h": 16428.4, - "l": 15830.4, - "o": 16418.07, - "v": 105008.84231068, - "vw": 0 - }, - "lastTrade": { - "c": [ - 2 - ], - "i": "464569520", - "p": 16242.31, - "s": 0.001933, - "t": 1605294230780, - "x": 4 - }, - "min": { - "c": 16235.1, - "h": 16264.29, - "l": 16129.3, - "o": 16257.51, - "v": 19.30791925, - "vw": 0 - }, - "prevDay": { - "c": 16399.24, - "h": 16418.07, - "l": 16399.24, - "o": 16418.07, - "v": 0.99167108, - "vw": 16402.6893 - }, - "ticker": "X:BTCUSD", - "todaysChange": -156.93, - "todaysChangePerc": -0.956935, - "updated": 1605330008999 - } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastTradeResult" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" } } - } + }, + "description": "The last trade for this stock." }, - "default": { - "description": "Unexpected error" + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" } }, - "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" - }, - "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" - }, + "summary": "Last Trade", + "tags": [ + "stocks:last:trade" + ], "x-polygon-entitlement-allowed-timeframes": [ { - "name": "realtime", - "description": "Real Time Data" + "description": "Real Time Data", + "name": "realtime" }, { - "name": "delayed", - "description": "15 minute delayed data" + "description": "15 minute delayed data", + "name": "delayed" } - ] + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } } }, - "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book": { + "/v2/reference/news": { "get": { - "summary": "Ticker Full Book (L2)", - "description": "Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", - "tags": [ - "crypto:snapshot" - ], + "description": "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.", + "operationId": "ListNews", "parameters": [ { + "description": "Return results that contain this ticker.", + "in": "query", "name": "ticker", - "in": "path", - "description": "The cryptocurrency ticker.", - "required": true, "schema": { + "description": "The exchange symbol that this item is traded under.", "type": "string" }, - "example": "X:BTCUSD" + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "Return results published on, before, or after this date.", + "in": "query", + "name": "published_utc", + "schema": { + "oneOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ] + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.gte", + "schema": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.gt", + "schema": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lte", + "schema": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lt", + "schema": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + { + "description": "Search by published_utc.", + "in": "query", + "name": "published_utc.gte", + "schema": { + "oneOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ] + } + }, + { + "description": "Search by published_utc.", + "in": "query", + "name": "published_utc.gt", + "schema": { + "oneOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ] + } + }, + { + "description": "Search by published_utc.", + "in": "query", + "name": "published_utc.lte", + "schema": { + "oneOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ] + } + }, + { + "description": "Search by published_utc.", + "in": "query", + "name": "published_utc.lt", + "schema": { + "oneOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ] + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "published_utc", + "enum": [ + "published_utc" + ], + "example": "published_utc", + "type": "string" + } } ], "responses": { "200": { - "description": "Get current level 2 book for a ticker", "content": { "application/json": { - "schema": { - "allOf": [ + "example": { + "count": 1, + "next_url": "https://api.polygon.io:443/v2/reference/news?cursor=eyJsaW1pdCI6MSwic29ydCI6InB1Ymxpc2hlZF91dGMiLCJvcmRlciI6ImFzY2VuZGluZyIsInRpY2tlciI6e30sInB1Ymxpc2hlZF91dGMiOnsiZ3RlIjoiMjAyMS0wNC0yNiJ9LCJzZWFyY2hfYWZ0ZXIiOlsxNjE5NDA0Mzk3MDAwLG51bGxdfQ", + "request_id": "831afdb0b8078549fed053476984947a", + "results": [ { - "type": "string", - "description": "The status of this request's response." + "amp_url": "https://amp.benzinga.com/amp/content/20784086", + "article_url": "https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square", + "author": "Rachit Vats", + "description": "\u003cp\u003eCathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange \u003cstrong\u003eCoinbase Global Inc \u003c/strong\u003e(NASDAQ: \u003ca class=\"ticker\" href=\"https://www.benzinga.com/stock/coin#NASDAQ\"\u003eCOIN\u003c/a\u003e) worth about $64.49 million on the stock\u0026rsquo;s Friday\u0026rsquo;s dip and also its fourth-straight loss.\u003c/p\u003e\n\u003cp\u003eThe investment firm\u0026rsquo;s \u003cstrong\u003eArk Innovation ETF\u003c/strong\u003e (NYSE: \u003ca class=\"ticker\" href=\"https://www.benzinga.com/stock/arkk#NYSE\"\u003eARKK\u003c/a\u003e) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase\u0026rsquo;s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.\u003c/p\u003e\n\u003cp\u003eThe New York-based company also added another 3,873 shares of the mobile gaming company \u003cstrong\u003eSkillz Inc\u003c/strong\u003e (NYSE: \u003ca class=\"ticker\" href=\"https://www.benzinga.com/stock/sklz#NYSE\"\u003eSKLZ\u003c/a\u003e), \u003ca href=\"http://www.benzinga.com/markets/cryptocurrency/21/04/20762794/cathie-woods-ark-loads-up-another-1-2-million-shares-in-skillz-also-adds-coinbase-draftkin\"\u003ejust a day after\u003c/a\u003e snapping 1.2 million shares of the stock.\u003c/p\u003e\n\u003cp\u003eARKK bought the shares of the company which closed ...\u003c/p\u003e\u003cp\u003e\u003ca href=https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square alt=Cathie Wood Adds More Coinbase, Skillz, Trims Square\u003eFull story available on Benzinga.com\u003c/a\u003e\u003c/p\u003e", + "id": "nJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA", + "image_url": "https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720", + "keywords": [ + "Sector ETFs", + "Penny Stocks", + "Cryptocurrency", + "Small Cap", + "Markets", + "Trading Ideas", + "ETFs" + ], + "published_utc": "2021-04-26T02:33:17Z", + "publisher": { + "favicon_url": "https://s3.polygon.io/public/public/assets/news/favicons/benzinga.ico", + "homepage_url": "https://www.benzinga.com/", + "logo_url": "https://s3.polygon.io/public/public/assets/news/logos/benzinga.svg", + "name": "Benzinga" + }, + "tickers": [ + "DOCU", + "DDD", + "NIU", + "ARKF", + "NVDA", + "SKLZ", + "PCAR", + "MASS", + "PSTI", + "SPFR", + "TREE", + "PHR", + "IRDM", + "BEAM", + "ARKW", + "ARKK", + "ARKG", + "PSTG", + "SQ", + "IONS", + "SYRS" + ], + "title": "Cathie Wood Adds More Coinbase, Skillz, Trims Square" + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" }, - { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "bids": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of this book level." - }, - "x": { - "type": "object", - "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" - } - } - } - }, - "asks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of this book level." - }, - "x": { - "type": "object", - "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" - } - } - } - }, - "bidCount": { - "type": "number", - "format": "double", - "description": "The combined total number of bids in the book." + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "items": { + "properties": { + "amp_url": { + "description": "The mobile friendly Accelerated Mobile Page (AMP) URL.", + "type": "string" + }, + "article_url": { + "description": "A link to the news article.", + "type": "string" + }, + "author": { + "description": "The article's author.", + "type": "string" + }, + "description": { + "description": "A description of the article.", + "type": "string" + }, + "id": { + "description": "Unique identifier for the article.", + "type": "string" + }, + "image_url": { + "description": "The article's image URL.", + "type": "string" + }, + "keywords": { + "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).", + "items": { + "type": "string" }, - "askCount": { - "type": "number", - "format": "double", - "description": "The combined total number of asks in the book." + "type": "array" + }, + "published_utc": { + "description": "The date the article was published on.", + "format": "date-time", + "type": "string" + }, + "publisher": { + "properties": { + "favicon_url": { + "description": "The publisher's homepage favicon URL.", + "type": "string" + }, + "homepage_url": { + "description": "The publisher's homepage URL.", + "type": "string" + }, + "logo_url": { + "description": "The publisher's logo URL.", + "type": "string" + }, + "name": { + "description": "The publisher's name.", + "type": "string" + } }, - "spread": { - "type": "number", - "format": "double", - "description": "The difference between the best bid and the best ask price accross exchanges." + "required": [ + "name", + "logo_url", + "homepage_url" + ], + "type": "object" + }, + "tickers": { + "description": "The ticker symbols associated with the article.", + "items": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } + "type": "array" + }, + "title": { + "description": "The title of the news article.", + "type": "string" } - } - } - } - ] - }, - "example": { - "status": "OK", - "data": { - "ticker": "X:BTCUSD", - "bids": [ - { - "p": 16303.17, - "x": { - "1": 2 - } - }, - { - "p": 16302.94, - "x": { - "1": 0.02859424, - "6": 0.023455 - } - } - ], - "asks": [ - { - "p": 11454, - "x": { - "2": 1 + }, + "required": [ + "id", + "publisher", + "title", + "author", + "published_utc", + "article_url", + "tickers" + ], + "type": "object", + "x-polygon-go-type": { + "name": "NewsArticleMetadata", + "path": "github.com/polygon-io/go-lib-models/v2/globals" } }, - { - "p": 11455, - "x": { - "2": 1 - } - } - ], - "bidCount": 694.951789670001, - "askCount": 593.1412981600005, - "spread": -4849.17, - "updated": 1605295074162 - } + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" } } - } + }, + "description": "An array of news articles." }, - "default": { - "description": "Unexpected error" + "401": { + "description": "Unauthorized - Check our API Key and account status" + }, + "404": { + "description": "The specified resource was not found" } }, + "summary": "Ticker News", + "tags": [ + "reference:news" + ], "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "description": "Reference data", + "name": "reference" }, - "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" - }, - "x-polygon-entitlement-allowed-timeframes": [ - { - "name": "realtime", - "description": "Real Time Data" - }, - { - "name": "delayed", - "description": "15 minute delayed data" + "x-polygon-paginate": { + "sort": { + "default": "published_utc", + "enum": [ + "published_utc" + ], + "limit": { + "default": 10, + "maximum": 1000, + "minimum": 1 + } } - ] + } } }, - "/v2/snapshot/locale/global/markets/crypto/{direction}": { + "/v2/snapshot/locale/global/markets/crypto/tickers": { "get": { - "summary": "Gainers/Losers", - "description": "Get the current top 20 gainers or losers of the day in cryptocurrency markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", - "tags": [ - "crypto:snapshot" - ], + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { - "name": "direction", - "in": "path", - "description": "The direction of the snapshot results to return.\n", - "required": true, + "description": "A comma separated list of tickers to get snapshots for.", + "in": "query", + "name": "tickers", "schema": { - "type": "string", - "enum": [ - "gainers", - "losers" - ] - }, - "example": "gainers" + "items": { + "type": "string" + }, + "type": "array" + } } ], "responses": { "200": { - "description": "Get the current gainers / losers of the day", "content": { "application/json": { + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.296, + "h": 0.59714, + "l": 0.23706, + "o": 0.28, + "v": 4097699.5691991993, + "vw": 0 + }, + "lastTrade": { + "c": [ + 1 + ], + "i": 413131, + "p": 0.293, + "s": 13.6191, + "t": 1605292686010, + "x": 17 + }, + "min": { + "c": 0.296, + "h": 0.296, + "l": 0.294, + "o": 0.296, + "v": 123.4866, + "vw": 0 + }, + "prevDay": { + "c": 0.281, + "h": 0.59714, + "l": 0.23706, + "o": 0.27, + "v": 6070178.786154971, + "vw": 0.4076 + }, + "ticker": "X:FSNUSD", + "todaysChange": 0.012, + "todaysChangePerc": 4.270463, + "updated": 1605330008999 + } + ] + }, "schema": { "allOf": [ { - "type": "string", - "description": "The status of this request's response." + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" }, { - "type": "object", "properties": { "tickers": { - "type": "array", "items": { - "type": "object", "properties": { "day": { "description": "The most recent daily bar for this ticker.", - "type": "object", "properties": { - "o": { - "type": "number", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "c": { - "type": "number", + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" }, "v": { - "type": "number", + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "vw": { - "type": "number", + "description": "The volume weighted average price.", "format": "double", - "description": "The volume weighted average price." + "type": "number" } - } + }, + "type": "object" }, "lastTrade": { "allOf": [ @@ -8795,43 +10060,43 @@ "description": "The most recent trade for this ticker." }, { - "type": "object", "properties": { "c": { - "type": "array", "description": "The trade conditions.", "items": { "type": "string" - } + }, + "type": "array" }, "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" }, "p": { - "type": "number", + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" + "type": "number" }, "s": { - "type": "integer", - "description": "The size (volume) of the trade." + "description": "The size (volume) of the trade.", + "type": "integer" }, "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" } - } + }, + "type": "object" }, { "properties": { "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" } } } @@ -8839,4754 +10104,9929 @@ }, "min": { "description": "The most recent minute bar for this ticker.", - "type": "object", "properties": { - "o": { - "type": "number", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "c": { - "type": "number", + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" }, "v": { - "type": "number", + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "vw": { - "type": "number", + "description": "The volume weighted average price.", "format": "double", - "description": "The volume weighted average price." + "type": "number" } - } + }, + "type": "object" }, "prevDay": { "description": "The previous day's bar for this ticker.", - "type": "object", "properties": { - "o": { - "type": "number", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", - "description": "The open price for the symbol in the given time period." + "type": "number" }, "h": { - "type": "number", + "description": "The highest price for the symbol in the given time period.", "format": "double", - "description": "The highest price for the symbol in the given time period." + "type": "number" }, "l": { - "type": "number", + "description": "The lowest price for the symbol in the given time period.", "format": "double", - "description": "The lowest price for the symbol in the given time period." + "type": "number" }, - "c": { - "type": "number", + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", - "description": "The close price for the symbol in the given time period." + "type": "number" }, "v": { - "type": "number", + "description": "The trading volume of the symbol in the given time period.", "format": "double", - "description": "The trading volume of the symbol in the given time period." + "type": "number" }, "vw": { - "type": "number", + "description": "The volume weighted average price.", "format": "double", - "description": "The volume weighted average price." + "type": "number" } - } + }, + "type": "object" }, "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + "description": "The exchange symbol that this item is traded under.", + "type": "string" }, "todaysChange": { - "type": "number", + "description": "The value of the change the from previous day.", "format": "double", - "description": "The value of the change the from previous day." + "type": "number" }, "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } - } - } - } - } - } - ] - }, - "example": { - "status": "OK", - "tickers": [ - { - "day": { - "c": 0.0374, - "h": 0.062377, - "l": 0.01162, - "o": 0.044834, - "v": 27313165.159427017, - "vw": 0 - }, - "lastTrade": { - "c": [ - 2 - ], - "i": "517478762", - "p": 0.0374, - "s": 499, - "t": 1604409649544, - "x": 2 - }, - "min": { - "c": 0.062377, - "h": 0.062377, - "l": 0.062377, - "o": 0.062377, - "v": 35420, - "vw": 0 - }, - "prevDay": { - "c": 0.01162, - "h": 0.044834, - "l": 0.01162, - "o": 0.044834, - "v": 53616273.36827199, - "vw": 0.0296 + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } }, - "ticker": "X:DRNUSD", - "todaysChange": 0.02578, - "todaysChangePerc": 221.858864, - "updated": 1605330008999 + "type": "object" } ] } } - } + }, + "description": "Get current state for all tickers" }, "default": { "description": "Unexpected error" } }, - "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" - }, - "x-polygon-entitlement-market-type": { - "name": "crypto", - "description": "Crypto data" - }, + "summary": "All Tickers", + "tags": [ + "crypto:snapshot" + ], "x-polygon-entitlement-allowed-timeframes": [ { - "name": "realtime", - "description": "Real Time Data" + "description": "Real Time Data", + "name": "realtime" }, { - "name": "delayed", - "description": "15 minute delayed data" - } - ] - } - } - }, - "components": { - "schemas": { - "TickerBase": { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - } - }, - "StatusBase": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - } - } - }, - "StatusCountBase": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "count": { - "type": "integer", - "description": "The total number of results for this request." - } - } - }, - "RequestIdBase": { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" } - }, - "StandardBase": { - "allOf": [ + } + }, + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}": { + "get": { + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded cryptocurrency symbol.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "parameters": [ { - "type": "object", - "properties": { - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } + "description": "Ticker of the snapshot", + "example": "X:BTCUSD", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" } - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "count": { - "type": "integer", - "description": "The total number of results for this request." + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "ad92e92ce183112c593717f00dfebd2c", + "status": "OK", + "ticker": { + "day": { + "c": 16260.85, + "h": 16428.4, + "l": 15830.4, + "o": 16418.07, + "v": 105008.84231068, + "vw": 0 + }, + "lastTrade": { + "c": [ + 2 + ], + "i": "464569520", + "p": 16242.31, + "s": 0.001933, + "t": 1605294230780, + "x": 4 + }, + "min": { + "c": 16235.1, + "h": 16264.29, + "l": 16129.3, + "o": 16257.51, + "v": 19.30791925, + "vw": 0 + }, + "prevDay": { + "c": 16399.24, + "h": 16418.07, + "l": 16399.24, + "o": 16418.07, + "v": 0.99167108, + "vw": 16402.6893 + }, + "ticker": "X:BTCUSD", + "todaysChange": -156.93, + "todaysChangePerc": -0.956935, + "updated": 1605330008999 + } + }, + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "ticker": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + } + } + } + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + ] + } } - } - } - ] - }, - "PaginationHooksBase": { - "type": "object", - "properties": { - "next_url": { - "type": "string", - "description": "If present, this value can be used to fetch the next page of data." - } - } - }, - "V1LastBase": { - "type": "object", - "properties": { - "symbol": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - "V2LastBase": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." - } - } - }, - "V2TicksBase": { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "results_count": { - "type": "integer", - "description": "The total number of results for this request." - }, - "db_latency": { - "type": "integer", - "description": "Latency in milliseconds for the query results from the database." + }, + "description": "Get current state for a ticker" }, - "success": { - "type": "boolean", - "description": "Whether or not this query was executed successfully." + "default": { + "description": "Unexpected error" } - } - }, - "V2AggsBase": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." - }, - "queryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." - }, - "resultsCount": { - "type": "integer", - "description": "The total number of results for this request." + }, + "summary": "Ticker", + "tags": [ + "crypto:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "request_id": { - "type": "string", - "description": "A request id assigned by the server." + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" } - }, - "News": { - "type": "array", - "items": { - "type": "object", - "properties": { - "symbols": { - "type": "array", - "description": "A list of ticker symbols relating to the article.", - "items": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - }, - "title": { - "type": "string", - "description": "The title of the news article." - }, - "url": { - "type": "string", - "description": "A direct link to the news article from its source publication." - }, - "source": { - "type": "string", - "description": "The publication source of the article." - }, - "summary": { - "type": "string", - "description": "A summary of the news article." - }, - "image": { - "type": "string", - "description": "A URL of the image for the news article, if found." - }, - "timestamp": { - "type": "string", - "format": "date-time", - "description": "The timestamp of the news article." - }, - "keywords": { - "type": "array", - "description": "A list of common keywords related to the news article.", - "items": { - "type": "string", - "description": "Common keywords of the news article." - } + } + }, + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book": { + "get": { + "description": "Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "parameters": [ + { + "description": "The cryptocurrency ticker.", + "example": "X:BTCUSD", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" } } - } - }, - "Financial": { - "type": "object", - "required": [ - "symbol", - "reportDate", - "reportDateStr" ], - "properties": { - "symbol": { - "type": "string", - "example": "AAPL", - "description": "Stock Symbol" - }, - "reportDate": { - "type": "string", - "format": "date-time", - "example": "2017-12-31T00:00:00.000Z", - "description": "Report Date" - }, - "reportDateStr": { - "type": "string", - "example": "2017-12-31", - "description": "Report date as non date format" - }, - "grossProfit": { - "type": "integer", - "example": 33912000000 - }, - "costOfRevenue": { - "type": "integer", - "example": 54381000000 - }, - "operatingRevenue": { - "type": "integer", - "example": 88293000000 - }, - "totalRevenue": { - "type": "integer", - "example": 88293000000 - }, - "operatingIncome": { - "type": "integer", - "example": 26274000000 - }, - "netIncome": { - "type": "integer", - "example": 20065000000 - }, - "researchAndDevelopment": { - "type": "integer", - "example": 3407000000 - }, - "operatingExpense": { - "type": "integer", - "example": 7638000000 - }, - "currentAssets": { - "type": "integer", - "example": 143810000000 - }, - "totalAssets": { - "type": "integer", - "example": 406794000000 - }, - "totalLiabilities": { - "type": "integer", - "example": 266595000000 - }, - "currentCash": { - "type": "integer", - "example": 27491000000 - }, - "currentDebt": { - "type": "integer", - "example": 18478000000 - }, - "totalCash": { - "type": "integer", - "example": 77153000000 - }, - "totalDebt": { - "type": "integer", - "example": 122400000000 - }, - "shareholderEquity": { - "type": "integer", - "example": 140199000000 - }, - "cashChange": { - "type": "integer", - "example": 7202000000 + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "data": { + "askCount": 593.1412981600005, + "asks": [ + { + "p": 11454, + "x": { + "2": 1 + } + }, + { + "p": 11455, + "x": { + "2": 1 + } + } + ], + "bidCount": 694.951789670001, + "bids": [ + { + "p": 16303.17, + "x": { + "1": 2 + } + }, + { + "p": 16302.94, + "x": { + "1": 0.02859424, + "6": 0.023455 + } + } + ], + "spread": -4849.17, + "ticker": "X:BTCUSD", + "updated": 1605295074162 + }, + "status": "OK" + }, + "schema": { + "allOf": [ + { + "description": "The status of this request's response.", + "type": "string" + }, + { + "properties": { + "data": { + "properties": { + "askCount": { + "description": "The combined total number of asks in the book.", + "format": "double", + "type": "number" + }, + "asks": { + "items": { + "properties": { + "p": { + "description": "The price of this book level.", + "format": "double", + "type": "number" + }, + "x": { + "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "bidCount": { + "description": "The combined total number of bids in the book.", + "format": "double", + "type": "number" + }, + "bids": { + "items": { + "properties": { + "p": { + "description": "The price of this book level.", + "format": "double", + "type": "number" + }, + "x": { + "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "spread": { + "description": "The difference between the best bid and the best ask price accross exchanges.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Get current level 2 book for a ticker" }, - "cashFlow": { - "type": "integer", - "example": 28293000000 + "default": { + "description": "Unexpected error" + } + }, + "summary": "Ticker Full Book (L2)", + "tags": [ + "crypto:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "operatingGainsLosses": { - "type": "number", - "example": null + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" } - }, - "Exchange": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "number", - "description": "The ID of the exchange." - }, - "type": { - "type": "string", - "description": "The type of exchange.\n- TRF = Trade Reporting Facility\n- exchange = Reporting exchange on the tape\n" - }, - "market": { - "type": "string", - "description": "The market data type that this exchange contains." - }, - "mic": { - "type": "string", - "description": "The Market Identification Code or MIC as defined in ISO 10383 (https://en.wikipedia.org/wiki/Market_Identifier_Code)." - }, - "name": { - "type": "string", - "description": "The name of the exchange." - }, - "tape": { - "type": "string", - "description": "The tape id of the exchange." - }, - "code": { - "type": "string", - "description": "A unique identifier for the exchange internal to Polygon.io. This is not an industry code or ISO standard." + } + }, + "/v2/snapshot/locale/global/markets/crypto/{direction}": { + "get": { + "description": "Get the current top 20 gainers or losers of the day in cryptocurrency markets.\n\u003cbr /\u003e\n\u003cbr /\u003e\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "parameters": [ + { + "description": "The direction of the snapshot results to return.\n", + "example": "gainers", + "in": "path", + "name": "direction", + "required": true, + "schema": { + "enum": [ + "gainers", + "losers" + ], + "type": "string" } } - } - }, - "ConditionTypeMap": { - "type": "object", - "properties": { - "condition": { - "type": "string", - "description": "Polygon.io's mapping for condition codes. For more information, see our Trade Conditions Glossary.\n" - } - } - }, - "MarketStatus": { - "type": "object", - "properties": { - "market": { - "type": "string", - "description": "The status of the market as a whole." - }, - "earlyHours": { - "type": "boolean", - "description": "Whether or not the market is in pre-market hours." - }, - "afterHours": { - "type": "boolean", - "description": "Whether or not the market is in post-market hours." - }, - "serverTime": { - "type": "string", - "format": "date-time", - "description": "The current time of the server." - }, - "exchanges": { - "type": "object", - "properties": { - "nyse": { - "type": "string", - "description": "The status of the NYSE market." - }, - "nasdaq": { - "type": "string", - "description": "The status of the Nasdaq market." - }, - "otc": { - "type": "string", - "description": "The status of the OTC market." - } - } - }, - "currencies": { - "type": "object", - "properties": { - "fx": { - "type": "string", - "description": "The status of the forex market." - }, - "crypto": { - "type": "string", - "description": "The status of the crypto market." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.0374, + "h": 0.062377, + "l": 0.01162, + "o": 0.044834, + "v": 27313165.159427017, + "vw": 0 + }, + "lastTrade": { + "c": [ + 2 + ], + "i": "517478762", + "p": 0.0374, + "s": 499, + "t": 1604409649544, + "x": 2 + }, + "min": { + "c": 0.062377, + "h": 0.062377, + "l": 0.062377, + "o": 0.062377, + "v": 35420, + "vw": 0 + }, + "prevDay": { + "c": 0.01162, + "h": 0.044834, + "l": 0.01162, + "o": 0.044834, + "v": 53616273.36827199, + "vw": 0.0296 + }, + "ticker": "X:DRNUSD", + "todaysChange": 0.02578, + "todaysChangePerc": 221.858864, + "updated": 1605330008999 + } + ] + }, + "schema": { + "allOf": [ + { + "description": "The status of this request's response.", + "type": "string" + }, + { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastTrade": { + "allOf": [ + { + "description": "The most recent trade for this ticker." + }, + { + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "x": { + "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "type": "integer" + } + } + } + ] + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } } - } - } - } - }, - "MarketHoliday": { - "type": "array", - "items": { - "type": "object", - "properties": { - "exchange": { - "type": "string", - "description": "Which market the record is for." - }, - "name": { - "type": "string", - "description": "The name of the holiday." - }, - "status": { - "type": "string", - "description": "The status of the market on the holiday." - }, - "date": { - "type": "string", - "format": "date", - "description": "The date of the holiday." - }, - "open": { - "type": "string", - "format": "date-time", - "description": "The market open time on the holiday (if it's not closed)." }, - "close": { - "type": "string", - "format": "date-time", - "description": "The market close time on the holiday (if it's not closed)." - } - } - } - }, - "RatingSection": { - "type": "object", - "required": [ - "month1", - "month2", - "month3", - "current" - ], - "properties": { - "current": { - "type": "number", - "example": 0, - "description": "Analyst Rating at current month" - }, - "month1": { - "type": "number", - "example": 1, - "description": "Analyst Ratings at 1 month in the future" - }, - "month2": { - "type": "number", - "example": 3, - "description": "Analyst Ratings at 2 month in the future" - }, - "month3": { - "type": "number", - "example": 4, - "description": "Analyst Ratings at 3 month in the future" - }, - "month4": { - "type": "number", - "example": 3, - "description": "Analyst Ratings at 4 month in the future" + "description": "Get the current gainers / losers of the day" }, - "month5": { - "type": "number", - "example": 2, - "description": "Analyst Ratings at 5 month in the future" + "default": { + "description": "Unexpected error" } - } - }, - "TradeDetailsMapItem": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Actual type of the trade detail item" + }, + "summary": "Gainers/Losers", + "tags": [ + "crypto:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "name": { - "type": "string", - "description": "Name of the trade detail item" + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" } - }, - "Company": { - "type": "object", - "properties": { - "logo": { - "type": "string", - "description": "The URL of the entity's logo." - }, - "exchange": { - "type": "string", - "description": "The symbol's primary exchange." - }, - "exchangeSymbol": { - "type": "string", - "description": "The exchange code (id) of the symbol's primary exchange." - }, - "type": { - "type": "string", - "description": "The type or class of the security. (Full List of Ticker Types)" - }, - "name": { - "type": "string", - "description": "The name of the company/entity." - }, - "symbol": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "listdate": { - "type": "string", - "format": "date", - "description": "The date that the symbol was listed on the exchange." - }, - "cik": { - "type": "string", - "description": "The official CIK guid used for SEC database/filings." - }, - "bloomberg": { - "type": "string", - "description": "The Bloomberg guid for the symbol." - }, - "figi": { - "type": "string", - "description": "The OpenFigi project guid for the symbol. (https://openfigi.com/)" - }, - "lei": { - "type": "string", - "description": "The Legal Entity Identifier (LEI) guid for the symbol. (https://en.wikipedia.org/wiki/Legal_Entity_Identifier)" - }, - "sic": { - "type": "integer", - "description": "Standard Industrial Classification (SIC) id for the symbol. (https://en.wikipedia.org/wiki/Legal_Entity_Identifier)" - }, - "country": { - "type": "string", - "description": "The country in which the company is registered." - }, - "industry": { - "type": "string", - "description": "The industry in which the company operates." - }, - "sector": { - "type": "string", - "description": "The sector of the indsutry in which the symbol operates." - }, - "marketcap": { - "type": "integer", - "description": "The current market cap for the company." - }, - "employees": { - "type": "integer", - "description": "The approximate number of employees for the company." - }, - "phone": { - "type": "string", - "description": "The phone number for the company. This is usually a corporate contact number." - }, - "ceo": { - "type": "string", - "description": "The name of the company's current CEO." - }, - "url": { - "type": "string", - "description": "The URL of the company's website" - }, - "description": { - "type": "string", - "description": "A description of the company and what they do/offer." - }, - "hq_address": { - "type": "string", - "description": "The street address for the company's headquarters." - }, - "hq_state": { - "type": "string", - "description": "The state in which the company's headquarters is located." - }, - "hq_country": { - "type": "string", - "description": "The country in which the company's headquarters is located." - }, - "similar": { - "type": "array", - "description": "A list of ticker symbols for similar companies.", - "items": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - } - }, - "tags": { - "type": "array", - "items": { - "type": "string", - "description": "A list of words related to the company." + } + }, + "/v2/snapshot/locale/global/markets/forex/tickers": { + "get": { + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded forex symbols.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "parameters": [ + { + "description": "A comma separated list of tickers to get snapshots for.", + "in": "query", + "name": "tickers", + "schema": { + "items": { + "type": "string" + }, + "type": "array" } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.11778221, + "h": 0.11812263, + "l": 0.11766631, + "o": 0.11797149, + "v": 77794 + }, + "lastQuote": { + "a": 0.11780678, + "b": 0.11777952, + "t": 1605280919000, + "x": 48 + }, + "min": { + "c": 0.117769, + "h": 0.11779633, + "l": 0.11773698, + "o": 0.11778, + "v": 202 + }, + "prevDay": { + "c": 0.11797258, + "h": 0.11797258, + "l": 0.11797149, + "o": 0.11797149, + "v": 2, + "vw": 0 + }, + "ticker": "C:HKDCHF", + "todaysChange": -0.00019306, + "todaysChangePerc": -0.1636482, + "updated": 1605280919000 + } + ] + }, + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID on which this quote happened.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Get current state for all tickers" }, - "updated": { - "type": "string", - "format": "date", - "description": "The last time this company record was updated." - }, - "active": { - "type": "boolean", - "description": "Indicates if the security is actively listed. If false, this means the company is no longer listed and cannot be traded." + "default": { + "description": "Unexpected error" } - } - }, - "Adjusted": { - "type": "boolean", - "description": "Whether or not this response was adjusted for splits." - }, - "AskExchangeId": { - "allOf": [ + }, + "summary": "All Tickers", + "tags": [ + "fx:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + "description": "Real Time Data", + "name": "realtime" }, { - "description": "Ask Exchange Id" + "description": "15 minute delayed data", + "name": "delayed" } - ] - }, - "AskPrice": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "AskSize": { - "type": "integer", - "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." - }, - "BidExchangeId": { - "allOf": [ + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + } + }, + "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}": { + "get": { + "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded currency symbol.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "parameters": [ { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + "description": "The forex ticker.", + "example": "C:EURUSD", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "ad76e76ce183002c5937a7f02dfebde4", + "status": "OK", + "ticker": { + "day": { + "c": 1.18403, + "h": 1.1906, + "l": 1.18001, + "o": 1.18725, + "v": 83578 + }, + "lastQuote": { + "a": 1.18403, + "b": 1.18398, + "i": 0, + "t": 1606163759000, + "x": 48 + }, + "min": { + "c": 1.18396, + "h": 1.18423, + "l": 1.1838, + "o": 1.18404, + "v": 41 + }, + "prevDay": { + "c": 1.18724, + "h": 1.18727, + "l": 1.18725, + "o": 1.18725, + "v": 5, + "vw": 0 + }, + "ticker": "C:EURUSD", + "todaysChange": -0.00316, + "todaysChangePerc": -0.27458312, + "updated": 1606163759000 + } + }, + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "ticker": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID on which this quote happened.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Get current state for a ticker" }, - { - "description": "Bid Exchange Id" + "default": { + "description": "Unexpected error" } - ] - }, - "BidPrice": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "BidSize": { - "type": "integer", - "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." - }, - "Close": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "Conditions": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "Count": { - "type": "integer", - "description": "The total number of results for this request." - }, - "Date": { - "oneOf": [ + }, + "summary": "Ticker", + "tags": [ + "fx:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ { - "type": "string", - "format": "date-time" + "description": "Real Time Data", + "name": "realtime" }, { - "type": "string", - "format": "date" + "description": "15 minute delayed data", + "name": "delayed" } - ] - }, - "ExchangeId": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "ForexExchangeId": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "High": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "Indicators": { - "type": "array", - "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", - "items": { - "type": "integer", - "description": "The indicator code.\n" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" } - }, - "Low": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "Map": { - "type": "object", - "description": "A mapping of the keys returned in the results to their descriptive name and data types.", - "properties": { - "key": { - "type": "object", - "description": "A dynamic key from the results set", - "properties": { - "name": { - "type": "string", - "description": "The descriptive name of this results key" - }, - "type": { - "type": "string", - "description": "The data type of this results key", - "enum": [ - "string", - "int", - "int64", - "float64" - ] - } + } + }, + "/v2/snapshot/locale/global/markets/forex/{direction}": { + "get": { + "description": "Get the current top 20 gainers or losers of the day in forex markets.\n\u003cbr /\u003e\n\u003cbr /\u003e\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "parameters": [ + { + "description": "The direction of the snapshot results to return.\n", + "example": "gainers", + "in": "path", + "name": "direction", + "required": true, + "schema": { + "enum": [ + "gainers", + "losers" + ], + "type": "string" } } - } - }, - "MsLatency": { - "type": "integer", - "description": "The milliseconds of latency for the query results." - }, - "NumberOfItems": { - "type": "integer", - "description": "The number of transactions in the aggregate window." - }, - "OTC": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - }, - "Open": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "Price": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "QueryCount": { - "type": "integer", - "description": "The number of aggregates (minute or day) used to generate the response." - }, - "RequestID": { - "type": "string", - "description": "A request id assigned by the server." - }, - "Size": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "SequenceNumber": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - }, - "Status": { - "type": "string", - "description": "The status of this request's response." - }, - "StockSymbol": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "SymbolPair": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." - }, - "Timestamp": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "TimestampSIP": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "TimestampExchange": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "TimestampTRF": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "Tape": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - }, - "TodaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "TodaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "TradeExchange": { - "type": "integer", - "description": "The exchange that this trade happened on." - }, - "TradeId": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "Updated": { - "type": "integer", - "description": "The last updated timestamp." - }, - "Volume": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "VolumeWeight": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "TickerResults": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 0.886156, + "h": 0.887111, + "l": 0.8825327, + "o": 0.8844732, + "v": 1041 + }, + "lastQuote": { + "a": 0.8879606, + "b": 0.886156, + "t": 1605283204000, + "x": 48 + }, + "min": { + "c": 0.886156, + "h": 0.886156, + "l": 0.886156, + "o": 0.886156, + "v": 1 + }, + "prevDay": { + "c": 0.8428527, + "h": 0.889773, + "l": 0.8428527, + "o": 0.8848539, + "v": 1078, + "vw": 0 + }, + "ticker": "C:PLNILS", + "todaysChange": 0.0433033, + "todaysChangePerc": 5.13770674, + "updated": 1605330008999 + } + ] }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker.", + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID on which this quote happened.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] } } - } + }, + "description": "Get the current gainers / losers of the day" + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Gainers/Losers", + "tags": [ + "fx:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" + }, + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" } - }, - "StocksGroupedResults": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } + } + }, + "/v2/snapshot/locale/us/markets/stocks/tickers": { + "get": { + "description": "Get the most up-to-date market data for all traded stock symbols.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "parameters": [ + { + "description": "A comma separated list of tickers to get snapshots for.", + "in": "query", + "name": "tickers", + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + { + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "in": "query", + "name": "include_otc", + "schema": { + "type": "boolean" } } - } - }, - "StocksTickerResultsOTC": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "count": 1, + "status": "OK", + "tickers": [ + { + "day": { + "c": 20.506, + "h": 20.64, + "l": 20.506, + "o": 20.64, + "v": 37216, + "vw": 20.616 + }, + "lastQuote": { + "P": 20.6, + "S": 22, + "p": 20.5, + "s": 13, + "t": 1605192959994246100 + }, + "lastTrade": { + "c": [ + 14, + 41 + ], + "i": "71675577320245", + "p": 20.506, + "s": 2416, + "t": 1605192894630916600, + "x": 4 + }, + "min": { + "av": 37216, + "c": 20.506, + "h": 20.506, + "l": 20.506, + "o": 20.506, + "v": 5000, + "vw": 20.5105 + }, + "prevDay": { + "c": 20.63, + "h": 21, + "l": 20.5, + "o": 20.79, + "v": 292738, + "vw": 20.6939 + }, + "ticker": "BCAT", + "todaysChange": -0.124, + "todaysChangePerc": -0.601, + "updated": 1605192894630916600 + } + ] }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + "schema": { + "allOf": [ + { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size in lots.", + "type": "integer" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size in lots.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "av": { + "description": "The accumulated volume.", + "type": "integer" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] } } - } + }, + "description": "Get current state for all tickers" + }, + "default": { + "description": "Unexpected error" } - } - }, - "ForexGroupedResults": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." - } - } - } + }, + "summary": "All Tickers", + "tags": [ + "stocks:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" + }, + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" } - }, - "ForexTickerResults": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." - } - } + } + }, + "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}": { + "get": { + "description": "Get the most up-to-date market data for a single traded stock ticker.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "parameters": [ + { + "description": "The ticker symbol of the stock/equity.", + "example": "AAPL", + "in": "path", + "name": "stocksTicker", + "required": true, + "schema": { + "type": "string" } } - } - }, - "CryptoGroupedResults": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "657e430f1ae768891f018e08e03598d8", + "status": "OK", + "ticker": { + "day": { + "c": 120.4229, + "h": 120.53, + "l": 118.81, + "o": 119.62, + "v": 28727868, + "vw": 119.725 + }, + "lastQuote": { + "P": 120.47, + "S": 4, + "p": 120.46, + "s": 8, + "t": 1605195918507251700 + }, + "lastTrade": { + "c": [ + 14, + 41 + ], + "i": "4046", + "p": 120.47, + "s": 236, + "t": 1605195918306274000, + "x": 10 + }, + "min": { + "av": 28724441, + "c": 120.4201, + "h": 120.468, + "l": 120.37, + "o": 120.435, + "v": 270796, + "vw": 120.4129 + }, + "prevDay": { + "c": 119.49, + "h": 119.63, + "l": 116.44, + "o": 117.19, + "v": 110597265, + "vw": 118.4998 + }, + "ticker": "AAPL", + "todaysChange": 0.98, + "todaysChangePerc": 0.82, + "updated": 1605195918306274000 + } }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "ticker": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size in lots.", + "type": "integer" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size in lots.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "av": { + "description": "The accumulated volume.", + "type": "integer" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + } + ] } } - } - } - } - }, - "SnapshotLastTrade": { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - "SnapshotOHLCV": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + }, + "description": "Get current state for a ticker" }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + "default": { + "description": "Unexpected error" } - } - }, - "SnapshotOHLCVVW": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + }, + "summary": "Ticker", + "tags": [ + "stocks:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" } - }, - "SnapshotOHLCVVWOtc": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + } + }, + "/v2/snapshot/locale/us/markets/stocks/{direction}": { + "get": { + "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n\u003cbr /\u003e\n\u003cbr /\u003e\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges.\n", + "parameters": [ + { + "description": "The direction of the snapshot results to return.\n", + "example": "gainers", + "in": "path", + "name": "direction", + "required": true, + "schema": { + "enum": [ + "gainers", + "losers" + ], + "type": "string" + } }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + { + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "in": "query", + "name": "include_otc", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "status": "OK", + "tickers": [ + { + "day": { + "c": 14.2284, + "h": 15.09, + "l": 14.2, + "o": 14.33, + "v": 133963, + "vw": 14.5311 + }, + "lastQuote": { + "P": 14.44, + "S": 11, + "p": 14.2, + "s": 25, + "t": 1605195929997325600 + }, + "lastTrade": { + "c": [ + 63 + ], + "i": "79372124707124", + "p": 14.2284, + "s": 536, + "t": 1605195848258266000, + "x": 4 + }, + "min": { + "av": 133963, + "c": 14.2284, + "h": 14.325, + "l": 14.2, + "o": 14.28, + "v": 6108, + "vw": 14.2426 + }, + "prevDay": { + "c": 0.73, + "h": 0.799, + "l": 0.73, + "o": 0.75, + "v": 1568097, + "vw": 0.7721 + }, + "ticker": "PDS", + "todaysChange": 13.498, + "todaysChangePerc": 1849.096, + "updated": 1605195848258266000 + } + ] + }, + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "tickers": { + "items": { + "properties": { + "day": { + "description": "The most recent daily bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "lastQuote": { + "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size in lots.", + "type": "integer" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size in lots.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "type": "object" + }, + "lastTrade": { + "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", + "properties": { + "c": { + "description": "The trade conditions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size (volume) of the trade.", + "type": "integer" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "type": "object" + }, + "min": { + "description": "The most recent minute bar for this ticker.", + "properties": { + "av": { + "description": "The accumulated volume.", + "type": "integer" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "prevDay": { + "description": "The previous day's bar for this ticker.", + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "todaysChange": { + "description": "The value of the change the from previous day.", + "format": "double", + "type": "number" + }, + "todaysChangePerc": { + "description": "The percentage change since the previous day.", + "format": "double", + "type": "number" + }, + "updated": { + "description": "The last updated timestamp.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Get the current tickers of the day" }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + "default": { + "description": "Unexpected error" + } + }, + "summary": "Gainers/Losers", + "tags": [ + "stocks:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" } - }, - "StocksSnapshotLastQuote": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The bid price." + } + }, + "/v2/ticks/stocks/nbbo/{ticker}/{date}": { + "get": { + "description": "Get NBBO quotes for a given ticker symbol on a specified date.\n", + "parameters": [ + { + "description": "The ticker symbol we want quotes for.", + "example": "AAPL", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" + } }, - "s": { - "type": "integer", - "description": "The bid size in lots." + { + "description": "The date/day of the quotes to retrieve in the format YYYY-MM-DD.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, + "schema": { + "format": "date", + "type": "string" + } }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." + { + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "in": "query", + "name": "timestamp", + "schema": { + "type": "integer" + } }, - "S": { - "type": "integer", - "description": "The ask size in lots." + { + "description": "The maximum timestamp allowed in the results.\n", + "in": "query", + "name": "timestampLimit", + "schema": { + "type": "integer" + } + }, + { + "description": "Reverse the order of the results.\n", + "example": true, + "in": "query", + "name": "reverse", + "schema": { + "type": "boolean" + } + }, + { + "description": "Limit the size of the response, max 50000 and default 5000.", + "example": 10, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "db_latency": 43, + "map": { + "P": { + "name": "ask_price", + "type": "float64" + }, + "S": { + "name": "ask_size", + "type": "int" + }, + "X": { + "name": "ask_exchange", + "type": "int" + }, + "c": { + "name": "conditions", + "type": "int" + }, + "f": { + "name": "trf_timestamp", + "type": "int64" + }, + "i": { + "name": "indicators", + "type": "int" + }, + "p": { + "name": "bid_price", + "type": "float64" + }, + "q": { + "name": "sequence_number", + "type": "int" + }, + "s": { + "name": "bid_size", + "type": "int" + }, + "t": { + "name": "sip_timestamp", + "type": "int64" + }, + "x": { + "name": "bid_exchange", + "type": "int" + }, + "y": { + "name": "participant_timestamp", + "type": "int64" + }, + "z": { + "name": "tape", + "type": "int" + } + }, + "results": [ + { + "P": 0, + "S": 0, + "X": 0, + "c": [ + 1 + ], + "p": 102.7, + "q": 2060, + "s": 60, + "t": 1517562000065700400, + "x": 11, + "y": 1517562000065321200, + "z": 3 + }, + { + "P": 0, + "S": 0, + "X": 0, + "c": [ + 1 + ], + "p": 170, + "q": 2061, + "s": 2, + "t": 1517562000065791500, + "x": 11, + "y": 1517562000065408300, + "z": 3 + } + ], + "results_count": 2, + "success": true, + "ticker": "AAPL" + }, + "schema": { + "allOf": [ + { + "properties": { + "db_latency": { + "description": "Latency in milliseconds for the query results from the database.", + "type": "integer" + }, + "results_count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "success": { + "description": "Whether or not this query was executed successfully.", + "type": "boolean" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "results": { + "items": { + "allOf": [ + { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "P": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "S": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "type": "integer" + }, + "X": { + "allOf": [ + { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + { + "description": "Ask Exchange Id" + } + ] + }, + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "i": { + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", + "items": { + "description": "The indicator code.\n", + "type": "integer" + }, + "type": "array" + }, + "p": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "s": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "type": "integer" + }, + "x": { + "allOf": [ + { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + { + "description": "Bid Exchange Id" + } + ] + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n", + "type": "integer" + } + }, + "type": "object" + } + ] + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "A list of quotes." }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "default": { + "description": "Unexpected error" + } + }, + "summary": "Quotes (NBBO)", + "tags": [ + "stocks:quotes" + ], + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Quotes (NBBO) v3", + "path": "get_v3_quotes__stockticker" } + }, + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" } - }, - "StocksSnapshotMinute": { - "type": "object", - "properties": { - "av": { - "type": "integer", - "description": "The accumulated volume." + } + }, + "/v2/ticks/stocks/trades/{ticker}/{date}": { + "get": { + "description": "Get trades for a given ticker symbol on a specified date.\n", + "parameters": [ + { + "description": "The ticker symbol we want trades for.", + "example": "AAPL", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" + } }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." + { + "description": "The date/day of the trades to retrieve in the format YYYY-MM-DD.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, + "schema": { + "format": "date", + "type": "string" + } }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." + { + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "in": "query", + "name": "timestamp", + "schema": { + "type": "integer" + } }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." + { + "description": "The maximum timestamp allowed in the results.\n", + "in": "query", + "name": "timestampLimit", + "schema": { + "type": "integer" + } }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + { + "description": "Reverse the order of the results.\n", + "example": true, + "in": "query", + "name": "reverse", + "schema": { + "type": "boolean" + } }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + { + "description": "Limit the size of the response, max 50000 and default 5000.", + "example": 10, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "db_latency": 11, + "map": { + "I": { + "name": "orig_id", + "type": "string" + }, + "c": { + "name": "conditions", + "type": "int" + }, + "e": { + "name": "correction", + "type": "int" + }, + "f": { + "name": "trf_timestamp", + "type": "int64" + }, + "i": { + "name": "id", + "type": "string" + }, + "p": { + "name": "price", + "type": "float64" + }, + "q": { + "name": "sequence_number", + "type": "int64" + }, + "r": { + "name": "trf_id", + "type": "int" + }, + "s": { + "name": "size", + "type": "int" + }, + "t": { + "name": "sip_timestamp", + "type": "int64" + }, + "x": { + "name": "exchange", + "type": "int" + }, + "y": { + "name": "participant_timestamp", + "type": "int64" + }, + "z": { + "name": "tape", + "type": "int" + } + }, + "results": [ + { + "c": [ + 12, + 41 + ], + "i": "1", + "p": 171.55, + "q": 1063, + "s": 100, + "t": 1517562000016036600, + "x": 11, + "y": 1517562000015577000, + "z": 3 + }, + { + "c": [ + 12, + 41 + ], + "i": "2", + "p": 171.55, + "q": 1064, + "s": 100, + "t": 1517562000016038100, + "x": 11, + "y": 1517562000015577600, + "z": 3 + } + ], + "results_count": 2, + "success": true, + "ticker": "AAPL" + }, + "schema": { + "allOf": [ + { + "properties": { + "db_latency": { + "description": "Latency in milliseconds for the query results from the database.", + "type": "integer" + }, + "results_count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "success": { + "description": "Whether or not this query was executed successfully.", + "type": "boolean" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "results": { + "items": { + "allOf": [ + { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "f": { + "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message.", + "type": "integer" + }, + "q": { + "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n", + "format": "int64", + "type": "integer" + }, + "t": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", + "type": "integer" + }, + "y": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "type": "integer" + } + }, + "type": "object" + }, + { + "properties": { + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" + }, + "e": { + "description": "The trade correction indicator.\n", + "type": "integer" + }, + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "r": { + "description": "The ID for the Trade Reporting Facility where the trade took place.\n", + "type": "integer" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "x": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "z": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n", + "type": "integer" + } + }, + "type": "object" + } + ] + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "A list of trades." }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + "default": { + "description": "Unexpected error" + } + }, + "summary": "Trades", + "tags": [ + "stocks:trades" + ], + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Trades v3", + "path": "get_v3_trades__stockticker" } + }, + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" } - }, - "StocksSnapshotMinuteOTC": { - "type": "object", - "properties": { - "av": { - "type": "integer", - "description": "The accumulated volume." + } + }, + "/v3/quotes/{fxTicker}": { + "get": { + "description": "Get BBO quotes for a ticker symbol in a given time range.", + "operationId": "QuotesFx", + "parameters": [ + { + "description": "The ticker symbol to get quotes for.", + "example": "C:EUR-USD", + "in": "path", + "name": "fxTicker", + "required": true, + "schema": { + "type": "string" + } }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + { + "description": "Limit the number of results returned, default is 10 and max is 50000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 50000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "timestamp", + "enum": [ + "timestamp" + ], + "example": "timestamp", + "type": "string" + } } - } - }, - "StocksSnapshotTickers": { - "type": "object", - "properties": { - "tickers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/quotes/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": [ + { + "ask_exchange": 48, + "ask_price": 1.18565, + "bid_exchange": 48, + "bid_price": 1.18558, + "participant_timestamp": 1625097600000000000 }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + { + "ask_exchange": 48, + "ask_price": 1.18565, + "bid_exchange": 48, + "bid_price": 1.18559, + "participant_timestamp": 1625097600000000000 } - } + ], + "status": "OK" }, - "lastQuote": { - "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", - "type": "object", + "schema": { "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size in lots." - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size in lots." + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - }, - "lastTrade": { - "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", + "results": { "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "av": { - "type": "integer", - "description": "The accumulated volume." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + "properties": { + "ask_exchange": { + "description": "The ask exchange ID", + "type": "integer" + }, + "ask_price": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid_exchange": { + "description": "The bid exchange ID", + "type": "integer" + }, + "bid_price": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "participant_timestamp": { + "description": "The nanosecond Exchange Unix Timestamp. This is the timestamp of when the quote was generated at the exchange.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object" + }, + "type": "array" }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." + "status": { + "description": "The status of this request's response.", + "type": "string" } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." + }, + "type": "object" } } - } + }, + "description": "A list of quotes." + } + }, + "summary": "Quotes (BBO)", + "tags": [ + "fx:quotes" + ], + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + }, + "x-polygon-paginate": { + "limit": { + "max": 50000 + }, + "order": { + "default": "desc" + }, + "sort": { + "default": "timestamp", + "enum": [ + "timestamp" + ] + } + }, + "x-polygon-replaces": { + "date": 1654056060000, + "replaces": { + "name": "Historic Forex Ticks", + "path": "get_v1_historic_forex__from___to___date" } } }, - "StocksSnapshotTicker": { - "type": "object", - "properties": { - "ticker": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size in lots." - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size in lots." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } - }, - "lastTrade": { - "description": "The most recent trade for this ticker. This is only returned if your current plan includes trades.", - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" + "x-polygon-ignore": true + }, + "/v3/quotes/{optionsTicker}": { + "get": { + "description": "Get quotes for an options ticker symbol in a given time range.", + "operationId": "QuotesOptions", + "parameters": [ + { + "description": "The ticker symbol to get quotes for.", + "example": "O:SPY241220P00720000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 50000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 50000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "timestamp", + "enum": [ + "timestamp" + ], + "example": "timestamp", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/quotes/O:SPY241220P00720000?cursor=YXA9NzY5Nzg0NzAxJmFzPSZsaW1pdD0xMCZvcmRlcj1kZXNjJnNvcnQ9dGltZXN0YW1wJnRpbWVzdGFtcC5sdGU9MjAyMi0wMi0xN1QxNyUzQTI1JTNBMTMuMDA5MzU2MDMyWg", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": [ + { + "ask_exchange": 323, + "ask_price": 282, + "ask_size": 10, + "bid_exchange": 316, + "bid_price": 277.5, + "bid_size": 1, + "sequence_number": 789539218, + "sip_timestamp": 1645119125346243600 + }, + { + "ask_exchange": 301, + "ask_price": 282, + "ask_size": 1, + "bid_exchange": 323, + "bid_price": 277.5, + "bid_size": 10, + "sequence_number": 788994206, + "sip_timestamp": 1645119118474271000 + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "results": { + "items": { + "properties": { + "ask_exchange": { + "description": "The ask exchange ID", + "type": "integer" + }, + "ask_price": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "format": "double", + "type": "number" + }, + "bid_exchange": { + "description": "The bid exchange ID", + "type": "integer" + }, + "bid_price": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "format": "double", + "type": "number" + }, + "sequence_number": { + "description": "The sequence number represents the sequence in which quote events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).", + "format": "int64", + "type": "integer" + }, + "sip_timestamp": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this quote from the exchange which produced it.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "av": { - "type": "integer", - "description": "The accumulated volume." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - } + "type": "object" } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." } - } + }, + "description": "A list of quotes." } - } - }, - "ForexSnapshotLastQuote": { - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." + }, + "summary": "Quotes", + "tags": [ + "options:quotes" + ], + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + }, + "x-polygon-paginate": { + "limit": { + "max": 50000 }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "order": { + "default": "desc" }, - "x": { - "type": "integer", - "description": "The exchange ID on which this quote happened." + "sort": { + "default": "timestamp", + "enum": [ + "timestamp" + ] } } }, - "ForexSnapshotPrevDay": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." + "x-polygon-ignore": true + }, + "/v3/quotes/{stockTicker}": { + "get": { + "description": "Get NBBO quotes for a ticker symbol in a given time range.", + "operationId": "Quotes", + "parameters": [ + { + "description": "The ticker symbol to get quotes for.", + "example": "AAPL", + "in": "path", + "name": "stockTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 50000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 50000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "timestamp", + "enum": [ + "timestamp" + ], + "example": "timestamp", + "type": "string" + } } - } - }, - "ForexSnapshotTicker": { - "type": "object", - "properties": { - "ticker": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker.", - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID on which this quote happened." - } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/quotes/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": [ + { + "ask_exchange": 0, + "ask_price": 0, + "ask_size": 0, + "bid_exchange": 11, + "bid_price": 102.7, + "bid_size": 60, + "conditions": [ + 1 + ], + "participant_timestamp": 1517562000065321200, + "sequence_number": 2060, + "sip_timestamp": 1517562000065700400, + "tape": 3 + }, + { + "ask_exchange": 0, + "ask_price": 0, + "ask_size": 0, + "bid_exchange": 11, + "bid_price": 170, + "bid_size": 2, + "conditions": [ + 1 + ], + "participant_timestamp": 1517562000065408300, + "sequence_number": 2061, + "sip_timestamp": 1517562000065791500, + "tape": 3 + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "results": { + "items": { + "properties": { + "ask_exchange": { + "description": "The ask exchange ID", + "type": "integer" + }, + "ask_price": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "format": "double", + "type": "number" + }, + "bid_exchange": { + "description": "The bid exchange ID", + "type": "integer" + }, + "bid_price": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "format": "double", + "type": "number" + }, + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "indicators": { + "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).", + "items": { + "description": "The indicator code.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "participant_timestamp": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "sequence_number": { + "description": "The sequence number represents the sequence in which quote events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11). Values reset after each trading session/day.", + "format": "int64", + "type": "integer" + }, + "sip_timestamp": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this quote from the exchange which produced it.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "tape": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ", + "format": "int32", + "type": "integer" + }, + "trf_timestamp": { + "description": "The nanosecond accuracy TRF (Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this quote.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } + "type": "object" } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." } - } + }, + "description": "A list of quotes." + } + }, + "summary": "Quotes (NBBO)", + "tags": [ + "stocks:quotes" + ], + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + }, + "x-polygon-paginate": { + "limit": { + "max": 50000 + }, + "order": { + "default": "desc" + }, + "sort": { + "default": "timestamp", + "enum": [ + "timestamp" + ] + } + }, + "x-polygon-replaces": { + "date": 1654056060000, + "replaces": { + "name": "Quotes (NBBO)", + "path": "get_v2_ticks_stocks_nbbo__ticker___date" } } - }, - "ForexSnapshotTickers": { - "type": "object", - "properties": { - "tickers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", + } + }, + "/v3/reference/conditions": { + "get": { + "description": "List all conditions that Polygon.io uses.", + "operationId": "ListConditions", + "parameters": [ + { + "description": "Filter for conditions within a given asset class.", + "in": "query", + "name": "asset_class", + "schema": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + } + }, + { + "description": "Filter by data type.", + "in": "query", + "name": "data_type", + "schema": { + "description": "The type of financial data represented by a data model.", + "enum": [ + "trade", + "bbo", + "nbbo" + ], + "example": "trade", + "type": "string" + } + }, + { + "description": "Filter for conditions with a given ID.", + "in": "query", + "name": "id", + "schema": { + "description": "An identifier used by Polygon.io for this condition. Unique per data type.", + "example": 1, + "type": "integer" + } + }, + { + "description": "Filter by SIP. If the condition contains a mapping for that SIP, the condition will be returned.", + "in": "query", + "name": "sip", + "schema": { + "description": "One of the SIPs.", + "enum": [ + "CTA", + "UTP", + "OPRA" + ], + "example": "CTA", + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "asset_class", + "enum": [ + "asset_class", + "id", + "type", + "name", + "data_types", + "legacy" + ], + "example": "asset_class", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "example": { + "count": 1, + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "results": [ + { + "asset_class": "stocks", + "data_types": [ + "trade" + ], + "id": 2, + "name": "Average Price Trade", + "sip_mapping": { + "CTA": "B", + "UTP": "W" + }, + "type": "condition", + "update_rules": { + "consolidated": { + "updates_high_low": false, + "updates_open_close": false, + "updates_volume": true + }, + "market_center": { + "updates_high_low": false, + "updates_open_close": false, + "updates_volume": true + } + } + } + ], + "status": "OK" + }, "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - } - } - }, - "lastQuote": { - "description": "The most recent quote for this ticker.", - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + "results": { + "description": "An array of conditions that match your query.", + "items": { + "description": "A condition generally refers to any extra information passed in a trade or a quote. These conditions\nmay or may not affect the behavior of aggregates.", + "properties": { + "abbreviation": { + "description": "A commonly-used abbreviation for this condition.", + "type": "string" + }, + "asset_class": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + }, + "data_types": { + "description": "Data types that this condition applies to.", + "items": { + "description": "The type of financial data represented by a data model.", + "enum": [ + "trade", + "bbo", + "nbbo" + ], + "example": "trade", + "type": "string" + }, + "type": "array" + }, + "description": { + "description": "A short description of the semantics of this condition.", + "type": "string" + }, + "exchange": { + "description": "If present, mapping this condition from a Polygon.io code to a SIP symbol depends on this attribute.\nIn other words, data with this condition attached comes exclusively from the given exchange.", + "type": "integer" + }, + "id": { + "description": "An identifier used by Polygon.io for this condition. Unique per data type.", + "example": 1, + "type": "integer" + }, + "legacy": { + "description": "If true, this condition is from an old version of the SIPs' specs and no longer is used.\nOther conditions may or may not reuse the same symbol as this one.", + "type": "boolean" + }, + "name": { + "description": "The name of this condition.", + "example": "Acquisition", + "type": "string" + }, + "sip_mapping": { + "description": "A mapping to a symbol for each SIP that has this condition.", + "properties": { + "CTA": { + "type": "string" + }, + "OPRA": { + "type": "string" + }, + "UTP": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "description": "An identifier for a collection of related conditions.", + "enum": [ + "sale_condition", + "quote_condition", + "sip_generated_flag", + "financial_status_indicator", + "short_sale_restriction_indicator", + "settlement_condition", + "market_condition", + "trade_thru_exempt" + ], + "type": "string" + }, + "update_rules": { + "description": "A list of aggregation rules.", + "properties": { + "consolidated": { + "description": "Describes aggregation rules on a consolidated (all exchanges) basis.", + "properties": { + "updates_high_low": { + "description": "Whether or not trades with this condition update the high/low.", + "type": "boolean" + }, + "updates_open_close": { + "description": "Whether or not trades with this condition update the open/close.", + "type": "boolean" + }, + "updates_volume": { + "description": "Whether or not trades with this condition update the volume.", + "type": "boolean" + } + }, + "required": [ + "updates_high_low", + "updates_open_close", + "updates_volume" + ], + "type": "object" + }, + "market_center": { + "description": "Describes aggregation rules on a per-market-center basis.", + "properties": { + "updates_high_low": { + "description": "Whether or not trades with this condition update the high/low.", + "type": "boolean" + }, + "updates_open_close": { + "description": "Whether or not trades with this condition update the open/close.", + "type": "boolean" + }, + "updates_volume": { + "description": "Whether or not trades with this condition update the volume.", + "type": "boolean" + } + }, + "required": [ + "updates_high_low", + "updates_open_close", + "updates_volume" + ], + "type": "object" + } + }, + "required": [ + "consolidated", + "market_center" + ], + "type": "object" + } + }, + "required": [ + "id", + "type", + "name", + "asset_class", + "sip_mapping", + "data_types" + ], + "type": "object" + }, + "type": "array" }, - "x": { - "type": "integer", - "description": "The exchange ID on which this quote happened." + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" } - } - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", + }, + "required": [ + "status", + "request_id", + "count", + "results" + ], + "type": "object" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + "results": { + "description": "An array of conditions that match your query.", + "items": { + "description": "A condition generally refers to any extra information passed in a trade or a quote. These conditions\nmay or may not affect the behavior of aggregates.", + "properties": { + "abbreviation": { + "description": "A commonly-used abbreviation for this condition.", + "type": "string" + }, + "asset_class": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + }, + "data_types": { + "description": "Data types that this condition applies to.", + "items": { + "description": "The type of financial data represented by a data model.", + "enum": [ + "trade", + "bbo", + "nbbo" + ], + "example": "trade", + "type": "string" + }, + "type": "array" + }, + "description": { + "description": "A short description of the semantics of this condition.", + "type": "string" + }, + "exchange": { + "description": "If present, mapping this condition from a Polygon.io code to a SIP symbol depends on this attribute.\nIn other words, data with this condition attached comes exclusively from the given exchange.", + "type": "integer" + }, + "id": { + "description": "An identifier used by Polygon.io for this condition. Unique per data type.", + "example": 1, + "type": "integer" + }, + "legacy": { + "description": "If true, this condition is from an old version of the SIPs' specs and no longer is used.\nOther conditions may or may not reuse the same symbol as this one.", + "type": "boolean" + }, + "name": { + "description": "The name of this condition.", + "example": "Acquisition", + "type": "string" + }, + "sip_mapping": { + "description": "A mapping to a symbol for each SIP that has this condition.", + "properties": { + "CTA": { + "type": "string" + }, + "OPRA": { + "type": "string" + }, + "UTP": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "description": "An identifier for a collection of related conditions.", + "enum": [ + "sale_condition", + "quote_condition", + "sip_generated_flag", + "financial_status_indicator", + "short_sale_restriction_indicator", + "settlement_condition", + "market_condition", + "trade_thru_exempt" + ], + "type": "string" + }, + "update_rules": { + "description": "A list of aggregation rules.", + "properties": { + "consolidated": { + "description": "Describes aggregation rules on a consolidated (all exchanges) basis.", + "properties": { + "updates_high_low": { + "description": "Whether or not trades with this condition update the high/low.", + "type": "boolean" + }, + "updates_open_close": { + "description": "Whether or not trades with this condition update the open/close.", + "type": "boolean" + }, + "updates_volume": { + "description": "Whether or not trades with this condition update the volume.", + "type": "boolean" + } + }, + "required": [ + "updates_high_low", + "updates_open_close", + "updates_volume" + ], + "type": "object" + }, + "market_center": { + "description": "Describes aggregation rules on a per-market-center basis.", + "properties": { + "updates_high_low": { + "description": "Whether or not trades with this condition update the high/low.", + "type": "boolean" + }, + "updates_open_close": { + "description": "Whether or not trades with this condition update the open/close.", + "type": "boolean" + }, + "updates_volume": { + "description": "Whether or not trades with this condition update the volume.", + "type": "boolean" + } + }, + "required": [ + "updates_high_low", + "updates_open_close", + "updates_volume" + ], + "type": "object" + } + }, + "required": [ + "consolidated", + "market_center" + ], + "type": "object" + } + }, + "required": [ + "id", + "type", + "name", + "asset_class", + "sip_mapping", + "data_types" + ], + "type": "object" + }, + "type": "array" }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", + }, + "required": [ + "status", + "request_id", + "count", + "results" + ], + "type": "object" + } + } + }, + "description": "a query parameter was malformed" + }, + "default": { + "content": { + "application/json": { + "schema": { "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + "results": { + "description": "An array of conditions that match your query.", + "items": { + "description": "A condition generally refers to any extra information passed in a trade or a quote. These conditions\nmay or may not affect the behavior of aggregates.", + "properties": { + "abbreviation": { + "description": "A commonly-used abbreviation for this condition.", + "type": "string" + }, + "asset_class": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + }, + "data_types": { + "description": "Data types that this condition applies to.", + "items": { + "description": "The type of financial data represented by a data model.", + "enum": [ + "trade", + "bbo", + "nbbo" + ], + "example": "trade", + "type": "string" + }, + "type": "array" + }, + "description": { + "description": "A short description of the semantics of this condition.", + "type": "string" + }, + "exchange": { + "description": "If present, mapping this condition from a Polygon.io code to a SIP symbol depends on this attribute.\nIn other words, data with this condition attached comes exclusively from the given exchange.", + "type": "integer" + }, + "id": { + "description": "An identifier used by Polygon.io for this condition. Unique per data type.", + "example": 1, + "type": "integer" + }, + "legacy": { + "description": "If true, this condition is from an old version of the SIPs' specs and no longer is used.\nOther conditions may or may not reuse the same symbol as this one.", + "type": "boolean" + }, + "name": { + "description": "The name of this condition.", + "example": "Acquisition", + "type": "string" + }, + "sip_mapping": { + "description": "A mapping to a symbol for each SIP that has this condition.", + "properties": { + "CTA": { + "type": "string" + }, + "OPRA": { + "type": "string" + }, + "UTP": { + "type": "string" + } + }, + "type": "object" + }, + "type": { + "description": "An identifier for a collection of related conditions.", + "enum": [ + "sale_condition", + "quote_condition", + "sip_generated_flag", + "financial_status_indicator", + "short_sale_restriction_indicator", + "settlement_condition", + "market_condition", + "trade_thru_exempt" + ], + "type": "string" + }, + "update_rules": { + "description": "A list of aggregation rules.", + "properties": { + "consolidated": { + "description": "Describes aggregation rules on a consolidated (all exchanges) basis.", + "properties": { + "updates_high_low": { + "description": "Whether or not trades with this condition update the high/low.", + "type": "boolean" + }, + "updates_open_close": { + "description": "Whether or not trades with this condition update the open/close.", + "type": "boolean" + }, + "updates_volume": { + "description": "Whether or not trades with this condition update the volume.", + "type": "boolean" + } + }, + "required": [ + "updates_high_low", + "updates_open_close", + "updates_volume" + ], + "type": "object" + }, + "market_center": { + "description": "Describes aggregation rules on a per-market-center basis.", + "properties": { + "updates_high_low": { + "description": "Whether or not trades with this condition update the high/low.", + "type": "boolean" + }, + "updates_open_close": { + "description": "Whether or not trades with this condition update the open/close.", + "type": "boolean" + }, + "updates_volume": { + "description": "Whether or not trades with this condition update the volume.", + "type": "boolean" + } + }, + "required": [ + "updates_high_low", + "updates_open_close", + "updates_volume" + ], + "type": "object" + } + }, + "required": [ + "consolidated", + "market_center" + ], + "type": "object" + } + }, + "required": [ + "id", + "type", + "name", + "asset_class", + "sip_mapping", + "data_types" + ], + "type": "object" + }, + "type": "array" }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." + }, + "required": [ + "status", + "request_id", + "count", + "results" + ], + "type": "object" } } + }, + "description": "an unknown error occurred" + } + }, + "summary": "Conditions", + "tags": [ + "reference:conditions" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 1000 + }, + "sort": { + "default": "asset_class", + "enum": [ + "asset_class", + "id", + "type", + "name", + "data_types", + "legacy" + ] + } + } + } + }, + "/v3/reference/dividends": { + "get": { + "description": "Get a list of historical cash dividends, including the ticker symbol,\ndeclaration date, ex-dividend date, record date, pay date, frequency,\nand amount.", + "operationId": "ListDividends", + "parameters": [ + { + "description": "Return the dividends that contain this ticker.", + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } + }, + { + "description": "Query by ex-dividend date with the format YYYY-MM-DD.", + "in": "query", + "name": "ex_dividend_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } + }, + { + "description": "Query by record date with the format YYYY-MM-DD.", + "in": "query", + "name": "record_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } + }, + { + "description": "Query by declaration date with the format YYYY-MM-DD.", + "in": "query", + "name": "declaration_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } + }, + { + "description": "Query by pay date with the format YYYY-MM-DD.", + "in": "query", + "name": "pay_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } + }, + { + "description": "Query by the number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", + "in": "query", + "name": "frequency", + "schema": { + "enum": [ + 0, + 1, + 2, + 4, + 12 + ], + "type": "integer" + } + }, + { + "description": "Query by the cash amount of the dividend.", + "in": "query", + "name": "cash_amount", + "schema": { + "type": "number" + }, + "x-polygon-filter-field": { + "range": true, + "type": "number" + } + }, + { + "description": "Query by the type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.", + "in": "query", + "name": "dividend_type", + "schema": { + "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", + "enum": [ + "CD", + "SC", + "LT", + "ST" + ], + "type": "string" + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.gt", + "schema": { + "type": "string" } - } - } - }, - "CryptoSnapshotMinute": { - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lte", + "schema": { + "type": "string" + } }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lt", + "schema": { + "type": "string" + } }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + { + "description": "Search by ex_dividend_date.", + "in": "query", + "name": "ex_dividend_date.gte", + "schema": { + "format": "date", + "type": "string" + } }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + { + "description": "Search by ex_dividend_date.", + "in": "query", + "name": "ex_dividend_date.gt", + "schema": { + "format": "date", + "type": "string" + } }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "CryptoSnapshotTicker": { - "type": "object", - "properties": { - "ticker": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "lastTrade": { - "allOf": [ - { - "description": "The most recent trade for this ticker." - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - { - "properties": { - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - } - } - } - ] - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } + { + "description": "Search by ex_dividend_date.", + "in": "query", + "name": "ex_dividend_date.lte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by ex_dividend_date.", + "in": "query", + "name": "ex_dividend_date.lt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by record_date.", + "in": "query", + "name": "record_date.gte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by record_date.", + "in": "query", + "name": "record_date.gt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by record_date.", + "in": "query", + "name": "record_date.lte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by record_date.", + "in": "query", + "name": "record_date.lt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by declaration_date.", + "in": "query", + "name": "declaration_date.gte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by declaration_date.", + "in": "query", + "name": "declaration_date.gt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by declaration_date.", + "in": "query", + "name": "declaration_date.lte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by declaration_date.", + "in": "query", + "name": "declaration_date.lt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by pay_date.", + "in": "query", + "name": "pay_date.gte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by pay_date.", + "in": "query", + "name": "pay_date.gt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by pay_date.", + "in": "query", + "name": "pay_date.lte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by pay_date.", + "in": "query", + "name": "pay_date.lt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by cash_amount.", + "in": "query", + "name": "cash_amount.gte", + "schema": { + "type": "number" + } + }, + { + "description": "Search by cash_amount.", + "in": "query", + "name": "cash_amount.gt", + "schema": { + "type": "number" + } + }, + { + "description": "Search by cash_amount.", + "in": "query", + "name": "cash_amount.lte", + "schema": { + "type": "number" + } + }, + { + "description": "Search by cash_amount.", + "in": "query", + "name": "cash_amount.lt", + "schema": { + "type": "number" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ex_dividend_date", + "enum": [ + "ex_dividend_date", + "pay_date", + "declaration_date", + "record_date", + "cash_amount", + "ticker" + ], + "example": "ex_dividend_date", + "type": "string" } } - } - }, - "CryptoSnapshotTickers": { - "type": "object", - "properties": { - "tickers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "day": { - "description": "The most recent daily bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "lastTrade": { - "allOf": [ - { - "description": "The most recent trade for this ticker." - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "The trade conditions.", - "items": { - "type": "string" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "integer", - "description": "The size (volume) of the trade." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - } - } - }, - { - "properties": { - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "A list of dividends.", + "example": { + "next_url": "https://api.polygon.io/v3/reference/dividends/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "results": [ + { + "cash_amount": 0.22, + "declaration_date": "2021-10-28", + "dividend_type": "CD", + "ex_dividend_date": "2021-11-05", + "frequency": 4, + "pay_date": "2021-11-11", + "record_date": "2021-11-08", + "ticker": "AAPL" + }, + { + "cash_amount": 0.22, + "declaration_date": "2021-07-27", + "dividend_type": "CD", + "ex_dividend_date": "2021-08-06", + "frequency": 4, + "pay_date": "2021-08-12", + "record_date": "2021-08-09", + "ticker": "AAPL" } - } - ] - }, - "min": { - "description": "The most recent minute bar for this ticker.", - "type": "object", - "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "prevDay": { - "description": "The previous day's bar for this ticker.", - "type": "object", + ], + "status": "OK" + }, "properties": { - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." - } - } - }, - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "todaysChange": { - "type": "number", - "format": "double", - "description": "The value of the change the from previous day." - }, - "todaysChangePerc": { - "type": "number", - "format": "double", - "description": "The percentage change since the previous day." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." - } - } - } - } - } - }, - "CryptoSnapshotTickerFullBook": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "bids": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of this book level." + "request_id": { + "type": "string" }, - "x": { - "type": "object", - "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" - } - } - } - }, - "asks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of this book level." + "results": { + "items": { + "properties": { + "cash_amount": { + "description": "The cash amount of the dividend per share owned.", + "type": "number" + }, + "currency": { + "description": "The currency in which the dividend is paid.", + "type": "string" + }, + "declaration_date": { + "description": "The date that the dividend was announced.", + "type": "string" + }, + "dividend_type": { + "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", + "enum": [ + "CD", + "SC", + "LT", + "ST" + ], + "type": "string" + }, + "ex_dividend_date": { + "description": "The date that the stock first trades without the dividend, determined by the exchange.", + "type": "string" + }, + "frequency": { + "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", + "type": "integer" + }, + "pay_date": { + "description": "The date that the dividend is paid out.", + "type": "string" + }, + "record_date": { + "description": "The date that the stock must be held to receive the dividend, set by the company.", + "type": "string" + }, + "ticker": { + "description": "The ticker symbol of the dividend.", + "type": "string" + } + }, + "required": [ + "ticker", + "declaration_date", + "ex_dividend_date", + "record_date", + "pay_date", + "frequency", + "cash_amount", + "dividend_type" + ], + "type": "object", + "x-polygon-go-struct-tags": { + "tags": [ + "db" + ] + } + }, + "type": "array" }, - "x": { - "type": "object", - "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n" + "status": { + "type": "string" } - } + }, + "required": [ + "request_id" + ], + "type": "object" } - }, - "bidCount": { - "type": "number", - "format": "double", - "description": "The combined total number of bids in the book." - }, - "askCount": { - "type": "number", - "format": "double", - "description": "The combined total number of asks in the book." - }, - "spread": { - "type": "number", - "format": "double", - "description": "The difference between the best bid and the best ask price accross exchanges." - }, - "updated": { - "type": "integer", - "description": "The last updated timestamp." } - } + }, + "description": "OK" + } + }, + "summary": "Dividends v3", + "tags": [ + "reference:dividends" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 1000 + }, + "sort": { + "default": "ex_dividend_date", + "enum": [ + "ex_dividend_date", + "pay_date", + "declaration_date", + "record_date", + "cash_amount", + "ticker" + ] } } }, - "v3Tickers": { - "type": "object", - "properties": { - "results": { - "type": "array", - "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", - "items": { - "type": "object", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "name": { - "type": "string", - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" - }, - "market": { - "type": "string", - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ] - }, - "locale": { - "type": "string", - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ] - }, - "primary_exchange": { - "type": "string", - "description": "The ISO code of the primary listing exchange for this asset." - }, - "type": { - "type": "string", - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." - }, - "active": { - "type": "boolean", - "description": "Whether or not the asset is actively traded. False means the asset has been delisted." - }, - "currency_name": { - "type": "string", - "description": "The name of the currency that this asset is traded with." - }, - "cik": { - "type": "string", - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." - }, - "composite_figi": { - "type": "string", - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "share_class_figi": { - "type": "string", - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "last_updated_utc": { - "type": "string", - "format": "date-time", - "description": "The information is accurate up to this time." - }, - "delisted_utc": { - "type": "string", - "format": "date-time", - "description": "The last date that the asset was traded." - } - }, - "required": [ - "ticker", - "name", - "market", - "locale" - ] + "post": { + "description": "Manually add Polygon a dividend.", + "operationId": "CreateDividend", + "parameters": [ + { + "description": "If true don't trigger overlay", + "in": "query", + "name": "skip_overlay_trigger", + "schema": { + "type": "boolean" } } - } - }, - "v3TickerDetails": { - "type": "object", - "properties": { - "results": { - "type": "object", - "description": "Ticker with details.\n", - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "name": { - "type": "string", - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n" - }, - "market": { - "type": "string", - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ] - }, - "locale": { - "type": "string", - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ] - }, - "primary_exchange": { - "type": "string", - "description": "The ISO code of the primary listing exchange for this asset." - }, - "type": { - "type": "string", - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types)." - }, - "active": { - "type": "boolean", - "description": "Whether or not the asset is actively traded. False means the asset has been delisted." - }, - "currency_name": { - "type": "string", - "description": "The name of the currency that this asset is traded with." - }, - "cik": { - "type": "string", - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key)." - }, - "composite_figi": { - "type": "string", - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "share_class_figi": { - "type": "string", - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)" - }, - "delisted_utc": { - "type": "string", - "format": "date-time", - "description": "The last date that the asset was traded." - }, - "share_class_shares_outstanding": { - "type": "number", - "format": "double", - "description": "The recorded number of outstanding shares for this particular share class." - }, - "weighted_shares_outstanding": { - "type": "number", - "format": "double", - "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n" - }, - "market_cap": { - "type": "number", - "format": "double", - "description": "The most recent close price of the ticker multiplied by weighted outstanding shares." - }, - "phone_number": { - "type": "string", - "description": "The phone number for the company behind this ticker." - }, - "address": { - "type": "object", + ], + "requestBody": { + "content": { + "application/json": { + "schema": { "properties": { - "address1": { - "type": "string", - "description": "The first line of the company's headquarters address." + "cash_amount": { + "description": "The cash amount of the dividend per share owned.", + "type": "number" }, - "city": { - "type": "string", - "description": "The city of the company's headquarters address." + "currency": { + "description": "The currency in which the dividend is paid.", + "type": "string" }, - "state": { - "type": "string", - "description": "The state of the company's headquarters address." + "declaration_date": { + "description": "The date that the dividend was announced.", + "type": "string" }, - "postal_code": { - "type": "string", - "description": "The postal code of the company's headquarters address." + "dividend_type": { + "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", + "enum": [ + "CD", + "SC", + "LT", + "ST" + ], + "type": "string" + }, + "ex_dividend_date": { + "description": "The date that the stock first trades without the dividend, determined by the exchange.", + "type": "string" + }, + "frequency": { + "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", + "type": "integer" + }, + "pay_date": { + "description": "The date that the dividend is paid out.", + "type": "string" + }, + "record_date": { + "description": "The date that the stock must be held to receive the dividend, set by the company.", + "type": "string" + }, + "ticker": { + "description": "The ticker symbol of the dividend.", + "type": "string" } - } - }, - "sic_code": { - "type": "string", - "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n" - }, - "sic_description": { - "type": "string", - "description": "A description of this ticker's SIC code." - }, - "ticker_root": { - "type": "string", - "description": "The root of a specified ticker. For example, the root of BRK.A is BRK." - }, - "ticker_suffix": { - "type": "string", - "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A." - }, - "total_employees": { - "type": "number", - "description": "The approximate number of employees for the company." - }, - "list_date": { - "type": "string", - "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD." - }, - "homepage_url": { - "type": "string", - "description": "The URL of the company's website homepage." - }, - "description": { - "type": "string", - "description": "A description of the company and what they do/offer." - }, - "branding": { + }, + "required": [ + "ticker", + "declaration_date", + "ex_dividend_date", + "record_date", + "pay_date", + "frequency", + "cash_amount", + "dividend_type" + ], "type": "object", - "properties": { - "logo_url": { - "type": "string", - "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" + "x-polygon-go-struct-tags": { + "tags": [ + "db" + ] + } + } + } + }, + "description": "Pass the desired dividend in the request body.", + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "request_id": { + "type": "string" + }, + "results": { + "properties": { + "cash_amount": { + "description": "The cash amount of the dividend per share owned.", + "type": "number" + }, + "currency": { + "description": "The currency in which the dividend is paid.", + "type": "string" + }, + "declaration_date": { + "description": "The date that the dividend was announced.", + "type": "string" + }, + "dividend_type": { + "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", + "enum": [ + "CD", + "SC", + "LT", + "ST" + ], + "type": "string" + }, + "ex_dividend_date": { + "description": "The date that the stock first trades without the dividend, determined by the exchange.", + "type": "string" + }, + "frequency": { + "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", + "type": "integer" + }, + "pay_date": { + "description": "The date that the dividend is paid out.", + "type": "string" + }, + "record_date": { + "description": "The date that the stock must be held to receive the dividend, set by the company.", + "type": "string" + }, + "ticker": { + "description": "The ticker symbol of the dividend.", + "type": "string" + } + }, + "required": [ + "ticker", + "declaration_date", + "ex_dividend_date", + "record_date", + "pay_date", + "frequency", + "cash_amount", + "dividend_type" + ], + "type": "object", + "x-polygon-go-struct-tags": { + "tags": [ + "db" + ] + } + }, + "status": { + "type": "string" + } + }, + "required": [ + "request_id" + ], + "type": "object" + } + } + }, + "description": "OK" + }, + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "request_id", + "error" + ], + "type": "object" + } + } + }, + "description": "the requested update was unable to be performed due to an invalid request body" + }, + "409": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "status": { + "type": "string" + } }, - "icon_url": { - "type": "string", - "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n" - } + "required": [ + "request_id", + "error" + ], + "type": "object" } } }, - "required": [ - "ticker", - "name", - "market", - "locale", - "active", - "currency_name" - ] + "description": "a dividend already exists for this date and ticker" + }, + "default": { + "content": { + "application/json": { + "schema": { + "properties": { + "error": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "request_id", + "error" + ], + "type": "object" + } + } + }, + "description": "unknown error" } - } - }, - "TickerSymbol": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "Financials": { - "type": "object", - "description": "Financials", - "required": [ - "ticker", - "exDate", - "paymentDate", - "ratio", - "tofactor", - "forfactor" + }, + "summary": "Dividends v3", + "tags": [ + "reference:stocks" ], - "properties": { - "ticker": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "period": { - "type": "string", - "example": "Q", - "description": "Reporting period.", - "enum": [ - "Q", - "T", - "QA", - "TA", - "Y", - "YA" - ] - }, - "calendarDate": { - "type": "string", - "format": "date-time", - "example": "2019-03-31" - }, - "reportPeriod": { - "type": "string", - "format": "date-time", - "example": "2019-03-31" - }, - "updated": { - "type": "string", - "format": "date-time", - "example": "1999-03-28" - }, - "accumulatedOtherComprehensiveIncome": { - "type": "integer" - }, - "assets": { - "type": "integer" - }, - "assetsAverage": { - "type": "integer" - }, - "assetsCurrent": { - "type": "integer" - }, - "assetTurnover": { - "type": "integer" - }, - "assetsNonCurrent": { - "type": "integer" - }, - "bookValuePerShare": { - "type": "number", - "format": "double" - }, - "capitalExpenditure": { - "type": "integer" - }, - "cashAndEquivalents": { - "type": "integer" - }, - "cashAndEquivalentsUSD": { - "type": "integer" - }, - "costOfRevenue": { - "type": "integer" - }, - "consolidatedIncome": { - "type": "integer" - }, - "currentRatio": { - "type": "number", - "format": "double" - }, - "debtToEquityRatio": { - "type": "number", - "format": "double" - }, - "debt": { - "type": "integer" - }, - "debtCurrent": { - "type": "integer" - }, - "debtNonCurrent": { - "type": "integer" - }, - "debtUSD": { - "type": "integer" - }, - "deferredRevenue": { - "type": "integer" - }, - "depreciationAmortizationAndAccretion": { - "type": "integer" - }, - "deposits": { - "type": "integer" - }, - "dividendYield": { - "type": "integer" - }, - "dividendsPerBasicCommonShare": { - "type": "integer" - }, - "earningBeforeInterestTaxes": { - "type": "integer" - }, - "earningsBeforeInterestTaxesDepreciationAmortization": { - "type": "integer" - }, - "EBITDAMargin": { - "type": "number", - "format": "double" - }, - "earningsBeforeInterestTaxesDepreciationAmortizationUSD": { - "type": "integer" - }, - "earningBeforeInterestTaxesUSD": { - "type": "integer" - }, - "earningsBeforeTax": { - "type": "integer" - }, - "earningsPerBasicShare": { - "type": "number", - "format": "double" - }, - "earningsPerDilutedShare": { - "type": "number", - "format": "double" - }, - "earningsPerBasicShareUSD": { - "type": "number", - "format": "double" + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v3/reference/exchanges": { + "get": { + "description": "List all exchanges that Polygon.io knows about.", + "operationId": "ListExchanges", + "parameters": [ + { + "description": "Filter by asset class.", + "in": "query", + "name": "asset_class", + "schema": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + } }, - "shareholdersEquity": { - "type": "integer" + { + "description": "Filter by locale.", + "in": "query", + "name": "locale", + "schema": { + "description": "An identifier for a geographical location.", + "enum": [ + "us", + "global" + ], + "example": "us", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" + }, + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" + }, + "results": { + "items": { + "description": "An entity that reports trades.", + "properties": { + "acronym": { + "description": "A commonly used abbreviation for this exchange.", + "example": "AMEX", + "type": "string" + }, + "asset_class": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + }, + "id": { + "description": "A unique identifier used by Polygon.io for this exchange.", + "example": 1, + "type": "integer" + }, + "locale": { + "description": "An identifier for a geographical location.", + "enum": [ + "us", + "global" + ], + "example": "us", + "type": "string" + }, + "mic": { + "description": "The Market Identifer Code of this exchange (see ISO 10383).", + "example": "XASE", + "type": "string" + }, + "name": { + "description": "Name of this exchange.", + "example": "NYSE American, LLC", + "type": "string" + }, + "operating_mic": { + "description": "The MIC of the entity that operates this exchange.", + "example": "XNYS", + "type": "string" + }, + "participant_id": { + "description": "The ID used by SIP's to represent this exchange.", + "example": "A", + "type": "string" + }, + "type": { + "description": "Represents the type of exchange.", + "enum": [ + "exchange", + "TRF", + "SIP" + ], + "example": "exchange", + "type": "string" + }, + "url": { + "description": "A link to this exchange's website, if one exists.", + "example": "https://www.nyse.com/markets/nyse-american", + "type": "string" + } + }, + "required": [ + "id", + "type", + "asset_class", + "locale", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "OK" }, - "averageEquity": { - "type": "integer" + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" + }, + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "a query parameter was malformed" }, - "shareholdersEquityUSD": { - "type": "integer" + "default": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" + }, + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "an unknown error occurred" + } + }, + "summary": "Exchanges", + "tags": [ + "reference:exchanges" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v3/reference/options/contracts": { + "get": { + "description": "Query for historical options contracts. This provides both active and expired options contracts.", + "operationId": "ListOptionsContracts", + "parameters": [ + { + "description": "This parameter has been deprecated. To search by specific options ticker, use the Options Contract endpoint [here](https://polygon.io/docs/options/get_v3_reference_options_contracts__options_ticker).", + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + } }, - "enterpriseValue": { - "type": "integer" + { + "description": "Query for contracts relating to an underlying stock ticker.", + "in": "query", + "name": "underlying_ticker", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } }, - "enterpriseValueOverEBIT": { - "type": "integer" + { + "description": "Query by the type of contract.", + "in": "query", + "name": "contract_type", + "schema": { + "enum": [ + "call", + "put" + ], + "type": "string" + } }, - "enterpriseValueOverEBITDA": { - "type": "number", - "format": "double" + { + "description": "Query by contract expiration with date format YYYY-MM-DD.", + "in": "query", + "name": "expiration_date", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } }, - "freeCashFlow": { - "type": "integer" + { + "description": "Specify a point in time for contracts as of this date with format YYYY-MM-DD. Defaults to today's date.", + "in": "query", + "name": "as_of", + "schema": { + "type": "string" + } }, - "freeCashFlowPerShare": { - "type": "number", - "format": "double" + { + "description": "Query by strike price of a contract.", + "in": "query", + "name": "strike_price", + "schema": { + "type": "number" + }, + "x-polygon-filter-field": { + "range": true, + "type": "number" + } }, - "foreignCurrencyUSDExchangeRate": { - "type": "integer" + { + "description": "Query for expired contracts. Default is false.", + "in": "query", + "name": "expired", + "schema": { + "type": "boolean" + } }, - "grossProfit": { - "type": "integer" + { + "description": "Search by underlying_ticker.", + "in": "query", + "name": "underlying_ticker.gte", + "schema": { + "type": "string" + } }, - "grossMargin": { - "type": "number", - "format": "double" + { + "description": "Search by underlying_ticker.", + "in": "query", + "name": "underlying_ticker.gt", + "schema": { + "type": "string" + } }, - "goodwillAndIntangibleAssets": { - "type": "integer" + { + "description": "Search by underlying_ticker.", + "in": "query", + "name": "underlying_ticker.lte", + "schema": { + "type": "string" + } }, - "interestExpense": { - "type": "integer" + { + "description": "Search by underlying_ticker.", + "in": "query", + "name": "underlying_ticker.lt", + "schema": { + "type": "string" + } }, - "investedCapital": { - "type": "integer" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gte", + "schema": { + "type": "string" + } }, - "investedCapitalAverage": { - "type": "integer" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gt", + "schema": { + "type": "string" + } }, - "inventory": { - "type": "integer" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.lte", + "schema": { + "type": "string" + } }, - "investments": { - "type": "integer" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.lt", + "schema": { + "type": "string" + } }, - "investmentsCurrent": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gte", + "schema": { + "type": "number" + } }, - "investmentsNonCurrent": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gt", + "schema": { + "type": "number" + } }, - "totalLiabilities": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lte", + "schema": { + "type": "number" + } }, - "currentLiabilities": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lt", + "schema": { + "type": "number" + } }, - "liabilitiesNonCurrent": { - "type": "integer" + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } }, - "marketCapitalization": { - "type": "integer" + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } }, - "netCashFlow": { - "type": "integer" + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker", + "underlying_ticker", + "expiration_date", + "strike_price" + ], + "example": "ticker", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "603902c0-a5a5-406f-bd08-f030f92418fa", + "results": [ + { + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2021-11-19", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 85, + "ticker": "O:AAPL211119C00085000", + "underlying_ticker": "AAPL" + }, + { + "additional_underlyings": [ + { + "amount": 44, + "type": "equity", + "underlying": "VMW" + }, + { + "amount": 6.53, + "type": "currency", + "underlying": "USD" + } + ], + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2021-11-19", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 90, + "ticker": "O:AAPL211119C00090000", + "underlying_ticker": "AAPL" + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "additional_underlyings": { + "description": "If an option contract has additional underlyings or deliverables associated with it, they will appear here.\nSee \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.optionseducation.org/referencelibrary/faq/splits-mergers-spinoffs-bankruptcies\"\u003ehere\u003c/a\u003e for some examples of what might cause a contract to have additional underlyings.", + "items": { + "properties": { + "amount": { + "description": "The number of shares per contract of the additional underlying, or the cash-in-lieu amount of the currency.", + "type": "number" + }, + "type": { + "description": "The type of the additional underlying asset, either equity or currency.", + "type": "string" + }, + "underlying": { + "description": "The name of the additional underlying asset.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "AdditionalUnderlying" + } + }, + "type": "array", + "x-polygon-go-type": { + "name": "AdditionalUnderlyings" + } + }, + "cfi": { + "description": "The 6 letter CFI code of the contract (defined in \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/ISO_10962\"\u003eISO 10962\u003c/a\u003e)", + "type": "string" + }, + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "type": "string" + }, + "correction": { + "description": "The correction number for this option contract.", + "type": "integer" + }, + "exercise_style": { + "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "primary_exchange": { + "description": "The MIC code of the primarcy exchange that this contract is listed on.", + "type": "string" + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" + }, + "underlying_ticker": { + "description": "The underlying ticker that the option contract relates to.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "OptionsContract" + } + }, + "type": "array" + }, + "status": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "A list of options contracts" + } + }, + "summary": "Options Contracts", + "tags": [ + "reference:options:contracts:list" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 1000 }, - "netCashFlowBusinessAcquisitionsDisposals": { - "type": "integer" + "sort": { + "default": "ticker", + "enum": [ + "ticker", + "underlying_ticker", + "expiration_date", + "strike_price" + ] + } + } + } + }, + "/v3/reference/options/contracts/{options_ticker}": { + "get": { + "description": "Get an options contract", + "operationId": "GetOptionsContract", + "parameters": [ + { + "description": "Query for a contract by options ticker. You can learn more about the structure of options tickers [here](https://polygon.io/blog/how-to-read-a-stock-options-ticker/).", + "example": "O:EVRI240119C00002500", + "in": "path", + "name": "options_ticker", + "required": true, + "schema": { + "type": "string" + } }, - "issuanceEquityShares": { - "type": "integer" + { + "description": "Specify a point in time for the contract as of this date with format YYYY-MM-DD. Defaults to today's date.", + "in": "query", + "name": "as_of", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "603902c0-a5a5-406f-bd08-f030f92418fa", + "results": { + "additional_underlyings": [ + { + "amount": 44, + "type": "equity", + "underlying": "VMW" + }, + { + "amount": 6.53, + "type": "currency", + "underlying": "USD" + } + ], + "cfi": "OCASPS", + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2021-11-19", + "primary_exchange": "BATO", + "shares_per_contract": 100, + "strike_price": 85, + "ticker": "O:AAPL211119C00085000", + "underlying_ticker": "AAPL" + }, + "status": "OK" + }, + "schema": { + "properties": { + "request_id": { + "type": "string" + }, + "results": { + "properties": { + "additional_underlyings": { + "description": "If an option contract has additional underlyings or deliverables associated with it, they will appear here.\nSee \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.optionseducation.org/referencelibrary/faq/splits-mergers-spinoffs-bankruptcies\"\u003ehere\u003c/a\u003e for some examples of what might cause a contract to have additional underlyings.", + "items": { + "properties": { + "amount": { + "description": "The number of shares per contract of the additional underlying, or the cash-in-lieu amount of the currency.", + "type": "number" + }, + "type": { + "description": "The type of the additional underlying asset, either equity or currency.", + "type": "string" + }, + "underlying": { + "description": "The name of the additional underlying asset.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "AdditionalUnderlying" + } + }, + "type": "array", + "x-polygon-go-type": { + "name": "AdditionalUnderlyings" + } + }, + "cfi": { + "description": "The 6 letter CFI code of the contract (defined in \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/ISO_10962\"\u003eISO 10962\u003c/a\u003e)", + "type": "string" + }, + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "type": "string" + }, + "correction": { + "description": "The correction number for this option contract.", + "type": "integer" + }, + "exercise_style": { + "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "primary_exchange": { + "description": "The MIC code of the primarcy exchange that this contract is listed on.", + "type": "string" + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" + }, + "underlying_ticker": { + "description": "The underlying ticker that the option contract relates to.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "OptionsContract" + } + }, + "status": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "A specific options contract" + } + }, + "summary": "Options Contract", + "tags": [ + "reference:options:contract" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v3/reference/splits": { + "get": { + "description": "Get a list of historical stock splits, including the ticker symbol, the execution date, and the factors of the split ratio.", + "operationId": "ListStockSplits", + "parameters": [ + { + "description": "Return the stock splits that contain this ticker.", + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } }, - "issuanceDebtSecurities": { - "type": "integer" + { + "description": "Query by execution date with the format YYYY-MM-DD.", + "in": "query", + "name": "execution_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } }, - "paymentDividendsOtherCashDistributions": { - "type": "integer" + { + "description": "Query for reverse stock splits. A split ratio where split_from is greater than split_to represents a reverse split. By default this filter is not used.", + "in": "query", + "name": "reverse_split", + "schema": { + "nullable": true, + "type": "boolean" + } }, - "netCashFlowFromFinancing": { - "type": "integer" + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.gte", + "schema": { + "type": "string" + } }, - "netCashFlowFromInvesting": { - "type": "integer" + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.gt", + "schema": { + "type": "string" + } }, - "netCashFlowInvestmentAcquisitionsDisposals": { - "type": "integer" + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lte", + "schema": { + "type": "string" + } }, - "netCashFlowFromOperations": { - "type": "integer" + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lt", + "schema": { + "type": "string" + } }, - "effectOfExchangeRateChangesOnCash": { - "type": "integer" + { + "description": "Search by execution_date.", + "in": "query", + "name": "execution_date.gte", + "schema": { + "format": "date", + "type": "string" + } }, - "netIncome": { - "type": "integer" + { + "description": "Search by execution_date.", + "in": "query", + "name": "execution_date.gt", + "schema": { + "format": "date", + "type": "string" + } }, - "netIncomeCommonStock": { - "type": "integer" + { + "description": "Search by execution_date.", + "in": "query", + "name": "execution_date.lte", + "schema": { + "format": "date", + "type": "string" + } }, - "netIncomeCommonStockUSD": { - "type": "integer" + { + "description": "Search by execution_date.", + "in": "query", + "name": "execution_date.lt", + "schema": { + "format": "date", + "type": "string" + } }, - "netLossIncomeFromDiscontinuedOperations": { - "type": "integer" + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } }, - "netIncomeToNonControllingInterests": { - "type": "integer" + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } }, - "profitMargin": { - "type": "number", - "format": "double" + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "execution_date", + "enum": [ + "execution_date", + "ticker" + ], + "example": "execution_date", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/splits/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "results": [ + { + "execution_date": "2020-08-31", + "split_from": 1, + "split_to": 4, + "ticker": "AAPL" + }, + { + "execution_date": "2005-02-28", + "split_from": 1, + "split_to": 2, + "ticker": "AAPL" + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "execution_date": { + "description": "The execution date of the stock split. On this date the stock split was applied.", + "type": "string" + }, + "split_from": { + "description": "The second number in the split ratio.\n\nFor example: In a 2-for-1 split, split_from would be 1.", + "format": "float", + "type": "number" + }, + "split_to": { + "description": "The first number in the split ratio.\n\nFor example: In a 2-for-1 split, split_to would be 2.", + "format": "float", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol of the stock split.", + "type": "string" + } + }, + "required": [ + "split_from", + "split_to" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "A list of stock splits." + } + }, + "summary": "Stock Splits v3", + "tags": [ + "reference:stocks" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 1000 }, - "operatingExpenses": { - "type": "integer" + "sort": { + "default": "execution_date", + "enum": [ + "execution_date", + "ticker" + ] + } + } + } + }, + "/v3/reference/tickers": { + "get": { + "description": "Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex.\n", + "parameters": [ + { + "description": "Specify a ticker symbol.\nDefaults to empty string which queries all tickers.\n", + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } }, - "operatingIncome": { - "type": "integer" + { + "description": "Specify the type of the tickers. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).\nDefaults to empty string which queries all types.\n", + "in": "query", + "name": "type", + "schema": { + "enum": [ + "CS", + "ADRC", + "ADRP", + "ADRR", + "UNIT", + "RIGHT", + "PFD", + "FUND", + "SP", + "WARRANT", + "INDEX", + "ETF", + "ETN", + "OS", + "GDR", + "OTHER", + "NYRS", + "AGEN", + "EQLK", + "BOND", + "ADRW", + "BASKET", + "LT" + ], + "type": "string" + } }, - "tradeAndNonTradePayables": { - "type": "integer" + { + "description": "Filter by market type. By default all markets are included.\n", + "in": "query", + "name": "market", + "schema": { + "enum": [ + "stocks", + "crypto", + "fx", + "otc" + ], + "type": "string" + } }, - "payoutRatio": { - "type": "integer" + { + "description": "Specify the primary exchange of the asset in the ISO code format. Find more information about the ISO codes [at the ISO org website](https://www.iso20022.org/market-identifier-codes).\nDefaults to empty string which queries all exchanges.\n", + "in": "query", + "name": "exchange", + "schema": { + "type": "string" + } }, - "priceToBookValue": { - "type": "number", - "format": "double" + { + "description": "Specify the CUSIP code of the asset you want to search for. Find more information about CUSIP codes [at their website](https://www.cusip.com/identifiers.html#/CUSIP).\nDefaults to empty string which queries all CUSIPs.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", + "in": "query", + "name": "cusip", + "schema": { + "type": "string" + } }, - "priceEarnings": { - "type": "number", - "format": "double" + { + "description": "Specify the CIK of the asset you want to search for. Find more information about CIK codes [at their website](https://www.sec.gov/edgar/searchedgar/cik.htm).\nDefaults to empty string which queries all CIKs.\n", + "in": "query", + "name": "cik", + "schema": { + "type": "string" + } }, - "priceToEarningsRatio": { - "type": "number", - "format": "double" + { + "description": "Specify a point in time to retrieve tickers available on that date.\nDefaults to the most recent available date.\n", + "in": "query", + "name": "date", + "schema": { + "oneOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ] + } }, - "propertyPlantEquipmentNet": { - "type": "integer" + { + "description": "Search for terms within the ticker and/or company name.\n", + "in": "query", + "name": "search", + "schema": { + "type": "string" + } }, - "preferredDividendsIncomeStatementImpact": { - "type": "integer" + { + "description": "Specify if the tickers returned should be actively traded on the queried date. Default is true.\n", + "example": true, + "in": "query", + "name": "active", + "schema": { + "type": "boolean" + } }, - "sharePriceAdjustedClose": { - "type": "number", - "format": "double" + { + "description": "The field to sort the results on. Default is ticker.\nIf the `search` query parameter is present, `sort` is ignored and results are ordered by relevance.\n", + "example": "ticker", + "in": "query", + "name": "sort", + "schema": { + "enum": [ + "ticker", + "name", + "market", + "locale", + "primary_exchange", + "type", + "currency_symbol", + "currency_name", + "base_currency_symbol", + "base_currency_name", + "cik", + "composite_figi", + "share_class_figi", + "last_updated_utc", + "delisted_utc" + ], + "type": "string" + } }, - "priceSales": { - "type": "number", - "format": "double" + { + "description": "The order to sort the results on. Default is asc (ascending).\n", + "example": "asc", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } }, - "priceToSalesRatio": { - "type": "number", - "format": "double" + { + "description": "Limit the size of the response, default is 100 and max is 1000.\n\nIf your query returns more than the max limit and you want to retrieve the next page of results,\nsee the `next_url` response attribute.\n", + "example": 10, + "in": "query", + "name": "limit", + "schema": { + "default": 100, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "count": 1, + "next_url": "https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "e70013d92930de90e089dc8fa098888e", + "results": [ + { + "active": true, + "cik": "0001090872", + "composite_figi": "BBG000BWQYZ5", + "currency_name": "usd", + "last_updated_utc": "2021-04-25T00:00:00Z", + "locale": "us", + "market": "stocks", + "name": "Agilent Technologies Inc.", + "primary_exchange": "XNYS", + "share_class_figi": "BBG001SCTQY4", + "ticker": "A", + "type": "CS" + } + ], + "status": "OK" + }, + "schema": { + "allOf": [ + { + "properties": { + "results": { + "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", + "items": { + "properties": { + "active": { + "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", + "type": "boolean" + }, + "cik": { + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", + "type": "string" + }, + "composite_figi": { + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "currency_name": { + "description": "The name of the currency that this asset is traded with.", + "type": "string" + }, + "delisted_utc": { + "description": "The last date that the asset was traded.", + "format": "date-time", + "type": "string" + }, + "last_updated_utc": { + "description": "The information is accurate up to this time.", + "format": "date-time", + "type": "string" + }, + "locale": { + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ], + "type": "string" + }, + "market": { + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx", + "otc" + ], + "type": "string" + }, + "name": { + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", + "type": "string" + }, + "primary_exchange": { + "description": "The ISO code of the primary listing exchange for this asset.", + "type": "string" + }, + "share_class_figi": { + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "type": { + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", + "type": "string" + } + }, + "required": [ + "ticker", + "name", + "market", + "locale" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Reference Tickers." }, - "tradeAndNonTradeReceivables": { - "type": "integer" + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "summary": "Tickers", + "tags": [ + "reference:tickers:list" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v3/reference/tickers/types": { + "get": { + "description": "List all ticker types that Polygon.io has.", + "operationId": "ListTickerTypes", + "parameters": [ + { + "description": "Filter by asset class.", + "in": "query", + "name": "asset_class", + "schema": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + } }, - "accumulatedRetainedEarningsDeficit": { - "type": "integer" + { + "description": "Filter by locale.", + "in": "query", + "name": "locale", + "schema": { + "description": "An identifier for a geographical location.", + "enum": [ + "us", + "global" + ], + "example": "us", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" + }, + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" + }, + "results": { + "items": { + "description": "Describes the type of financial instrument represented by a ticker.", + "properties": { + "asset_class": { + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + }, + "code": { + "description": "A code used by Polygon.io to refer to this ticker type.", + "example": "CS", + "type": "string" + }, + "description": { + "description": "A short description of this ticker type.", + "example": "Common Stock", + "type": "string" + }, + "locale": { + "description": "An identifier for a geographical location.", + "enum": [ + "us", + "global" + ], + "example": "us", + "type": "string" + } + }, + "required": [ + "code", + "description", + "asset_class", + "locale" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "OK" }, - "revenues": { - "type": "integer" + "400": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" + }, + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "a query parameter was malformed" }, - "revenuesUSD": { - "type": "integer" + "default": { + "content": { + "application/json": { + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" + }, + "request_id": { + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "example": "OK", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "an unknown error occurred" + } + }, + "summary": "Ticker Types", + "tags": [ + "reference:tickers:types" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v3/reference/tickers/{ticker}": { + "get": { + "description": "Get a single ticker supported by Polygon.io. This response will have detailed information about the ticker and the company behind it.\n", + "parameters": [ + { + "description": "The ticker symbol of the asset.", + "example": "AAPL", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" + } }, - "researchAndDevelopmentExpense": { - "type": "integer" + { + "description": "Specify a point in time to get information about the ticker available on that date.\nWhen retrieving information from SEC filings, we compare this date with the period of report date on the SEC filing.\n\nFor example, consider an SEC filing submitted by AAPL on 2019-07-31, with a period of report date ending on 2019-06-29.\nThat means that the filing was submitted on 2019-07-31, but the filing was created based on information from 2019-06-29.\nIf you were to query for AAPL details on 2019-06-29, the ticker details would include information from the SEC filing.\n\nDefaults to the most recent available date.\n", + "in": "query", + "name": "date", + "schema": { + "oneOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } + ] + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "results": { + "active": true, + "address": { + "address1": "One Apple Park Way", + "city": "Cupertino", + "postal_code": "95014", + "state": "CA" + }, + "branding": { + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png", + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg" + }, + "cik": "0000320193", + "composite_figi": "BBG000B9XRY4", + "currency_name": "usd", + "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", + "homepage_url": "https://www.apple.com", + "list_date": "1980-12-12", + "locale": "us", + "market": "stocks", + "market_cap": 2771126040150, + "name": "Apple Inc.", + "phone_number": "(408) 996-1010", + "primary_exchange": "XNAS", + "share_class_figi": "BBG001S5N8V8", + "share_class_shares_outstanding": 16406400000, + "sic_code": "3571", + "sic_description": "ELECTRONIC COMPUTERS", + "ticker": "AAPL", + "ticker_root": "AAPL", + "total_employees": 154000, + "type": "CS", + "weighted_shares_outstanding": 16334371000 + }, + "status": "OK" + }, + "schema": { + "allOf": [ + { + "properties": { + "results": { + "description": "Ticker with details.\n", + "properties": { + "active": { + "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", + "type": "boolean" + }, + "address": { + "properties": { + "address1": { + "description": "The first line of the company's headquarters address.", + "type": "string" + }, + "city": { + "description": "The city of the company's headquarters address.", + "type": "string" + }, + "postal_code": { + "description": "The postal code of the company's headquarters address.", + "type": "string" + }, + "state": { + "description": "The state of the company's headquarters address.", + "type": "string" + } + }, + "type": "object" + }, + "branding": { + "properties": { + "icon_url": { + "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", + "type": "string" + }, + "logo_url": { + "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", + "type": "string" + } + }, + "type": "object" + }, + "cik": { + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", + "type": "string" + }, + "composite_figi": { + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "currency_name": { + "description": "The name of the currency that this asset is traded with.", + "type": "string" + }, + "delisted_utc": { + "description": "The last date that the asset was traded.", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the company and what they do/offer.", + "type": "string" + }, + "homepage_url": { + "description": "The URL of the company's website homepage.", + "type": "string" + }, + "list_date": { + "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD.", + "type": "string" + }, + "locale": { + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ], + "type": "string" + }, + "market": { + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx", + "otc" + ], + "type": "string" + }, + "market_cap": { + "description": "The most recent close price of the ticker multiplied by weighted outstanding shares.", + "format": "double", + "type": "number" + }, + "name": { + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", + "type": "string" + }, + "phone_number": { + "description": "The phone number for the company behind this ticker.", + "type": "string" + }, + "primary_exchange": { + "description": "The ISO code of the primary listing exchange for this asset.", + "type": "string" + }, + "share_class_figi": { + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "share_class_shares_outstanding": { + "description": "The recorded number of outstanding shares for this particular share class.", + "format": "double", + "type": "number" + }, + "sic_code": { + "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://www.sec.gov/info/edgar/siccodes.htm\"\u003eSIC Code List\u003c/a\u003e.\n", + "type": "string" + }, + "sic_description": { + "description": "A description of this ticker's SIC code.", + "type": "string" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "ticker_root": { + "description": "The root of a specified ticker. For example, the root of BRK.A is BRK.", + "type": "string" + }, + "ticker_suffix": { + "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A.", + "type": "string" + }, + "total_employees": { + "description": "The approximate number of employees for the company.", + "type": "number" + }, + "type": { + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", + "type": "string" + }, + "weighted_shares_outstanding": { + "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n", + "format": "double", + "type": "number" + } + }, + "required": [ + "ticker", + "name", + "market", + "locale", + "active", + "currency_name" + ], + "type": "object" + } + }, + "type": "object" + }, + { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "description": "Reference Tickers." }, - "returnOnAverageAssets": { - "type": "integer" + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "summary": "Ticker Details v3", + "tags": [ + "reference:tickers:get" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v3/snapshot/options/{underlyingAsset}": { + "get": { + "description": "Get the snapshot of all options contracts for an underlying ticker.", + "operationId": "OptionsChain", + "parameters": [ + { + "description": "The underlying ticker symbol of the option contract.", + "example": "AAPL", + "in": "path", + "name": "underlyingAsset", + "required": true, + "schema": { + "type": "string" + } }, - "returnOnAverageEquity": { - "type": "integer" + { + "description": "Query by strike price of a contract.", + "in": "query", + "name": "strike_price", + "schema": { + "type": "number" + }, + "x-polygon-filter-field": { + "range": true, + "type": "number" + } }, - "returnOnInvestedCapital": { - "type": "integer" + { + "description": "Query by contract expiration with date format YYYY-MM-DD.", + "in": "query", + "name": "expiration_date", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } }, - "returnOnSales": { - "type": "number", - "format": "double" + { + "description": "Query by the type of contract.", + "in": "query", + "name": "contract_type", + "schema": { + "enum": [ + "call", + "put" + ], + "type": "string" + } }, - "shareBasedCompensation": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gte", + "schema": { + "type": "number" + } }, - "sellingGeneralAndAdministrativeExpense": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gt", + "schema": { + "type": "number" + } }, - "shareFactor": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lte", + "schema": { + "type": "number" + } }, - "shares": { - "type": "integer" + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lt", + "schema": { + "type": "number" + } }, - "weightedAverageShares": { - "type": "integer" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gte", + "schema": { + "type": "string" + } }, - "weightedAverageSharesDiluted": { - "type": "integer" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gt", + "schema": { + "type": "string" + } }, - "salesPerShare": { - "type": "number", - "format": "double" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.lte", + "schema": { + "type": "string" + } }, - "tangibleAssetValue": { - "type": "integer" + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.lt", + "schema": { + "type": "string" + } }, - "taxAssets": { - "type": "integer" + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } }, - "incomeTaxExpense": { - "type": "integer" + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } }, - "taxLiabilities": { - "type": "integer" + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker", + "expiration_date", + "strike_price" + ], + "example": "ticker", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "6a7e466379af0a71039d60cc78e72282", + "results": [ + { + "break_even_price": 151.2, + "day": { + "change": 4.5, + "change_percent": 6.76, + "close": 120.73, + "high": 120.81, + "last_updated": 1605195918507251700, + "low": 118.9, + "open": 119.32, + "previous_close": 119.12, + "volume": 868, + "vwap": 119.31 + }, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-01-21", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "AAPL211022C000150000" + }, + "greeks": { + "delta": 1, + "gamma": 0, + "implied_volatility": 5, + "theta": 0.00229, + "vega": 0 + }, + "last_quote": { + "ask": 120.3, + "ask_size": 4, + "bid": 120.28, + "bid_size": 8, + "last_updated": 1605195918507251700, + "midpoint": 120.29 + }, + "open_interest": 1543, + "underlying_asset": { + "change_to_break_even": 4.2, + "last_updated": 1605195918507251700, + "price": 147, + "ticker": "AAPL", + "timeframe": "DELAYED" + } + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "break_even_price": { + "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "format": "double", + "type": "number" + }, + "day": { + "description": "The most recent daily bar for this contract.", + "properties": { + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price for the contract of the day.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "low": { + "description": "The lowest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the contract of the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price for the contract of previous trading day.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the contract of the day.", + "format": "double", + "type": "number" + }, + "vwap": { + "description": "The trading volume weighted average price for the contract of the day.", + "format": "double", + "type": "number", + "x-polygon-go-id": "VWAP" + } + }, + "type": "object" + }, + "details": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" + } + }, + "type": "object" + }, + "greeks": { + "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "properties": { + "delta": { + "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "gamma": { + "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "theta": { + "description": "The change in the option's price per day.", + "format": "double", + "type": "number" + }, + "vega": { + "description": "The change in the option's price per 1% increment in volatility.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "implied_volatility": { + "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", + "format": "double", + "type": "number" + }, + "last_quote": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "midpoint": { + "description": "The average of the bid and ask price.", + "format": "double", + "type": "number" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "type": "object" + }, + "open_interest": { + "description": "The quantity of this contract held at the end of the last trading day.", + "format": "double", + "type": "number" + }, + "underlying_asset": { + "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", + "properties": { + "change_to_break_even": { + "description": "The change in price for the contract to break even.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol for the contract's underlying asset.", + "type": "string" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Snapshots for options contracts of the underlying ticker" + } + }, + "summary": "Options Chain", + "tags": [ + "options:snapshot" + ], + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "tangibleAssetsBookValuePerShare": { - "type": "number", - "format": "double" + { + "description": "15 minute delayed data", + "name": "delayed" + } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 1000 }, - "workingCapital": { - "type": "integer" + "sort": { + "default": "ticker", + "enum": [ + "ticker", + "expiration_date", + "strike_price" + ] } } }, - "Markets": { - "type": "object", - "properties": { - "results": { - "type": "array", - "description": "A list of supported markets.", - "items": { - "type": "object", - "properties": { - "market": { - "type": "string", - "description": "The name of the market." - }, - "desc": { - "type": "string", - "description": "A description of the market." - } - } + "x-polygon-draft": true + }, + "/v3/snapshot/options/{underlyingAsset}/{optionContract}": { + "get": { + "description": "Get the snapshot of an option contract for a stock equity.", + "operationId": "OptionContract", + "parameters": [ + { + "description": "The underlying ticker symbol of the option contract.", + "example": "AAPL", + "in": "path", + "name": "underlyingAsset", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The option contract identifier.", + "example": "O:AAPL230616C00150000", + "in": "path", + "name": "optionContract", + "required": true, + "schema": { + "type": "string" } } - } - }, - "Locales": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "locale": { - "type": "string", - "description": "An abbreviated country name." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "d9ff18dac69f55c218f69e4753706acd", + "results": { + "break_even_price": 171.075, + "day": { + "change": -1.05, + "change_percent": -4.67, + "close": 21.4, + "high": 22.49, + "last_updated": 1636520400000000000, + "low": 21.35, + "open": 22.49, + "previous_close": 22.45, + "volume": 37, + "vwap": 21.6741 + }, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2023-06-16", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:AAPL230616C00150000" + }, + "greeks": { + "delta": 0.5520187372272933, + "gamma": 0.00706756515659829, + "theta": -0.018532772783847958, + "vega": 0.7274811132998142 + }, + "implied_volatility": 0.3048997097864957, + "last_quote": { + "ask": 21.25, + "ask_size": 110, + "bid": 20.9, + "bid_size": 172, + "last_updated": 1636573458756383500, + "midpoint": 21.075, + "timeframe": "REAL-TIME" + }, + "open_interest": 8921, + "underlying_asset": { + "change_to_break_even": 23.123999999999995, + "last_updated": 1636573459862384600, + "price": 147.951, + "ticker": "AAPL", + "timeframe": "REAL-TIME" + } + }, + "status": "OK" }, - "name": { - "type": "string", - "description": "The name of the country." + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "properties": { + "break_even_price": { + "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "format": "double", + "type": "number" + }, + "day": { + "description": "The most recent daily bar for this contract.", + "properties": { + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price for the contract of the day.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "low": { + "description": "The lowest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the contract of the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price for the contract of previous trading day.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the contract of the day.", + "format": "double", + "type": "number" + }, + "vwap": { + "description": "The trading volume weighted average price for the contract of the day.", + "format": "double", + "type": "number", + "x-polygon-go-id": "VWAP" + } + }, + "type": "object" + }, + "details": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" + } + }, + "type": "object" + }, + "greeks": { + "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "properties": { + "delta": { + "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "gamma": { + "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "theta": { + "description": "The change in the option's price per day.", + "format": "double", + "type": "number" + }, + "vega": { + "description": "The change in the option's price per 1% increment in volatility.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "implied_volatility": { + "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", + "format": "double", + "type": "number" + }, + "last_quote": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "midpoint": { + "description": "The average of the bid and ask price.", + "format": "double", + "type": "number" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "type": "object" + }, + "open_interest": { + "description": "The quantity of this contract held at the end of the last trading day.", + "format": "double", + "type": "number" + }, + "underlying_asset": { + "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", + "properties": { + "change_to_break_even": { + "description": "The change in price for the contract to break even.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol for the contract's underlying asset.", + "type": "string" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" } } - } + }, + "description": "Snapshot of the option contract." } - } - }, - "V2News": { - "type": "object", - "required": [ - "id", - "publisher", - "title", - "author", - "published_utc", - "article_url", - "tickers" + }, + "summary": "Option Contract", + "tags": [ + "options:snapshot" ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the article.\n" + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "publisher": { - "type": "object", - "required": [ - "name", - "logo_url", - "homepage_url" - ], - "properties": { - "name": { - "type": "string", - "description": "The publisher's name.\n" - }, - "logo_url": { - "type": "string", - "format": "url", - "description": "The publisher's logo URL.\n" - }, - "homepage_url": { - "type": "string", - "format": "url", - "description": "The publisher's homepage URL.\n" - }, - "favicon_url": { - "type": "string", - "format": "url", - "description": "The publisher's homepage favicon URL.\n" - } + { + "description": "15 minute delayed data", + "name": "delayed" + } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + } + }, + "/v3/trades/{cryptoTicker}": { + "get": { + "description": "Get trades for a crypto ticker symbol in a given time range.", + "operationId": "TradesCrypto", + "parameters": [ + { + "description": "The ticker symbol to get trades for.", + "example": "X:BTC-USD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" } }, - "title": { - "type": "string", - "description": "The title of the news article.\n" - }, - "author": { - "type": "string", - "description": "The article's author.\n" - }, - "published_utc": { - "type": "string", - "format": "date-time", - "description": "The date the article was published on.\n" - }, - "article_url": { - "type": "string", - "format": "url", - "description": "A link to the news article.\n" - }, - "tickers": { - "type": "array", - "description": "The ticker symbols associated with the article.\n", - "items": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + { + "description": "Query by trade timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true } }, - "amp_url": { - "type": "string", - "format": "url", - "description": "The mobile friendly Accelerated Mobile Page (AMP) URL.\n" - }, - "image_url": { - "type": "string", - "format": "url", - "description": "The article's image URL.\n" - }, - "description": { - "type": "string", - "description": "A description of the article.\n" - }, - "keywords": { - "type": "array", - "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).\n", - "items": { + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { "type": "string" } - } - } - }, - "StocksOpenClose": { - "type": "object", - "properties": { - "status": { - "type": "string", - "description": "The status of this request's response." - }, - "from": { - "type": "string", - "format": "date", - "description": "The requested date." - }, - "symbol": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "open": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "high": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "low": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." }, - "close": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "volume": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "otc": { - "type": "boolean", - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false." - }, - "preMarket": { - "type": "integer", - "description": "The open price of the ticker symbol in pre-market trading." - }, - "afterHours": { - "type": "number", - "format": "double", - "description": "The close price of the ticker symbol in after hours trading." - } - } - }, - "StocksV2Base": { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } - } - }, - "StocksV2Trade": { - "allOf": [ { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } + "description": "Limit the number of results returned, default is 10 and max is 50000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 50000, + "minimum": 1, + "type": "integer" } }, { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "e": { - "type": "integer", - "description": "The trade correction indicator.\n" - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "r": { - "type": "integer", - "description": "The ID for the Trade Reporting Facility where the trade took place.\n" - }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - } + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "timestamp", + "enum": [ + "timestamp" + ], + "example": "timestamp", + "type": "string" } } - ] - }, - "StocksV2Trades": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "allOf": [ - { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/trades/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": [ + { + "conditions": [ + 1 + ], + "exchange": 1, + "id": "191450340", + "participant_timestamp": 1625097600103000000, + "price": 35060, + "size": 1.0434526 }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + { + "conditions": [ + 2 + ], + "exchange": 1, + "id": "191450341", + "participant_timestamp": 1625097600368000000, + "price": 35059.99, + "size": 0.0058883 } - } + ], + "status": "OK" }, - { - "type": "object", + "schema": { "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - }, - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "e": { - "type": "integer", - "description": "The trade correction indicator.\n" - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "r": { - "type": "integer", - "description": "The ID for the Trade Reporting Facility where the trade took place.\n" + "results": { + "items": { + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "exchange": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "id": { + "description": "The Trade ID which uniquely identifies a trade on the exchange that the trade happened on.", + "type": "string" + }, + "participant_timestamp": { + "description": "The nanosecond Exchange Unix Timestamp. This is the timestamp of when the trade was generated at the exchange.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade in the base currency of the crypto pair.", + "format": "double", + "type": "number" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" } - ] - } + } + }, + "description": "A list of trades." + } + }, + "summary": "Trades", + "tags": [ + "crypto:trades" + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + }, + "x-polygon-paginate": { + "limit": { + "max": 50000 + }, + "order": { + "default": "desc" + }, + "sort": { + "default": "timestamp", + "enum": [ + "timestamp" + ] + } + }, + "x-polygon-replaces": { + "date": 1654056060000, + "replaces": { + "name": "Historic Crypto Trades", + "path": "get_v1_historic_crypto__from___to___date" } } }, - "StocksV2NBBO": { - "allOf": [ + "x-polygon-ignore": true + }, + "/v3/trades/{optionsTicker}": { + "get": { + "description": "Get trades for an options ticker symbol in a given time range.", + "operationId": "TradesOptions", + "parameters": [ { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } + "description": "The options ticker symbol to get trades for.", + "example": "O:TSLA210903C00700000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by trade timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true } }, { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "array", - "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", - "items": { - "type": "integer", - "description": "The indicator code.\n" - } - }, - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." - }, - "x": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - { - "description": "Bid Exchange Id" - } - ] - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "S": { - "type": "integer", - "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." - }, - "X": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - { - "description": "Ask Exchange Id" - } - ] - }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" - } + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 50000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 50000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "timestamp", + "enum": [ + "timestamp" + ], + "example": "timestamp", + "type": "string" } } - ] - }, - "StocksV2NBBOs": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "allOf": [ - { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "t": { - "type": "integer", - "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it." - }, - "y": { - "type": "integer", - "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange." - }, - "f": { - "type": "integer", - "description": "The nanosecond accuracy TRF(Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this message." - }, - "q": { - "type": "integer", - "format": "int64", - "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" - } - } - }, - { - "type": "object", - "properties": { - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "i": { - "type": "array", - "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", - "items": { - "type": "integer", - "description": "The indicator code.\n" - } - }, - "p": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "s": { - "type": "integer", - "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price." - }, - "x": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - { - "description": "Bid Exchange Id" - } - ] - }, - "P": { - "type": "number", - "format": "double", - "description": "The ask price." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/trades/O:AZO140621P00530000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": [ + { + "exchange": 46, + "participant_timestamp": 1401715883806000000, + "price": 6.91, + "sip_timestamp": 1401715883806000000, + "size": 1 }, - "S": { - "type": "integer", - "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price." + { + "conditions": [ + 209 + ], + "exchange": 67, + "participant_timestamp": 1401716547786000000, + "price": 7.2, + "sip_timestamp": 1401716547786000000, + "size": 1 + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "X": { - "allOf": [ - { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + "results": { + "items": { + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "correction": { + "description": "The trade correction indicator.", + "type": "integer" + }, + "exchange": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/options/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "participant_timestamp": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the trade was actually generated at the exchange.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "sip_timestamp": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this trade from the exchange which produced it.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + } }, - { - "description": "Ask Exchange Id" - } - ] + "type": "object" + }, + "type": "array" }, - "z": { - "type": "integer", - "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ\n" + "status": { + "description": "The status of this request's response.", + "type": "string" } - } + }, + "type": "object" } - ] - } - } - } - }, - "ForexConversion": { - "type": "object", - "properties": { - "last": { - "type": "object", - "properties": { - "ask": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "bid": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "exchange": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "timestamp": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." } - } - }, - "from": { - "type": "string", - "description": "The \"from\" currency symbol." - }, - "to": { - "type": "string", - "description": "The \"to\" currency symbol." + }, + "description": "A list of trades." + } + }, + "summary": "Trades", + "tags": [ + "options:trades" + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + }, + "x-polygon-paginate": { + "limit": { + "max": 50000 }, - "initialAmount": { - "type": "number", - "format": "double", - "description": "The amount to convert." + "order": { + "default": "desc" }, - "converted": { - "type": "number", - "format": "double", - "description": "The result of the conversion." + "sort": { + "default": "timestamp", + "enum": [ + "timestamp" + ] } } }, - "ForexHistoricTrades": { - "type": "object", - "properties": { - "day": { - "type": "string", - "format": "date", - "description": "The date that was evaluated from the request." + "x-polygon-ignore": true + }, + "/v3/trades/{stockTicker}": { + "get": { + "description": "Get trades for a ticker symbol in a given time range.", + "operationId": "Trades", + "parameters": [ + { + "description": "The ticker symbol to get trades for.", + "example": "AAPL", + "in": "path", + "name": "stockTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" }, - "map": { - "type": "object", - "description": "A map for shortened result keys." + { + "description": "Query by trade timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } }, - "msLatency": { - "type": "integer", - "description": "The milliseconds of latency for the query results." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } }, - "pair": { - "type": "string", - "description": "The currency pair that was evaluated from the request." + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } }, - "ticks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } - } + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" } - } - } - }, - "ForexPairLastQuote": { - "type": "object", - "properties": { - "last": { - "type": "object", - "properties": { - "ask": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "bid": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "exchange": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "timestamp": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" } }, - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 50000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 50000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "timestamp", + "enum": [ + "timestamp" + ], + "example": "timestamp", + "type": "string" + } } - } - }, - "ForexPreviousClose": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "T": { - "type": "string", - "description": "The exchange symbol that this item is traded under." - }, - "v": { - "type": "number", - "format": "double", - "description": "The trading volume of the symbol in the given time period." - }, - "o": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." - }, - "c": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." - }, - "h": { - "type": "number", - "format": "double", - "description": "The highest price for the symbol in the given time period." - }, - "l": { - "type": "number", - "format": "double", - "description": "The lowest price for the symbol in the given time period." - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "vw": { - "type": "number", - "format": "double", - "description": "The volume weighted average price." + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/trades/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": [ + { + "conditions": [ + 12, + 41 + ], + "exchange": 11, + "id": "1", + "participant_timestamp": 1517562000015577000, + "price": 171.55, + "sequence_number": 1063, + "sip_timestamp": 1517562000016036600, + "size": 100, + "tape": 3 + }, + { + "conditions": [ + 12, + 41 + ], + "exchange": 11, + "id": "2", + "participant_timestamp": 1517562000015577600, + "price": 171.55, + "sequence_number": 1064, + "sip_timestamp": 1517562000016038100, + "size": 100, + "tape": 3 + } + ], + "status": "OK" }, - "n": { - "type": "integer", - "description": "The number of transactions in the aggregate window." + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "results": { + "items": { + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "correction": { + "description": "The trade correction indicator.", + "type": "integer" + }, + "exchange": { + "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "id": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.", + "type": "string" + }, + "participant_timestamp": { + "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the trade was actually generated at the exchange.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "sequence_number": { + "description": "The sequence number represents the sequence in which trade events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11). Values reset after each trading session/day.", + "format": "int64", + "type": "integer" + }, + "sip_timestamp": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this trade from the exchange which produced it.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + }, + "tape": { + "description": "There are 3 tapes which define which exchange the ticker is listed on. These are integers in our objects which represent the letter of the alphabet. Eg: 1 = A, 2 = B, 3 = C.\n* Tape A is NYSE listed securities\n* Tape B is NYSE ARCA / NYSE American\n* Tape C is NASDAQ", + "format": "int32", + "type": "integer" + }, + "trf_id": { + "description": "The ID for the Trade Reporting Facility where the trade took place.", + "type": "integer" + }, + "trf_timestamp": { + "description": "The nanosecond accuracy TRF (Trade Reporting Facility) Unix Timestamp. This is the timestamp of when the trade reporting facility received this trade.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" } } - } - } - } - }, - "CryptoExchange": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "type": { - "type": "string", - "description": "Type of exchange feed" - }, - "market": { - "type": "string", - "description": "Market data type this exchange contains ( crypto only currently )" - }, - "name": { - "type": "string", - "description": "Name of the exchange" }, - "url": { - "type": "string", - "description": "URL of this exchange" - } + "description": "A list of trades." + } + }, + "summary": "Trades", + "tags": [ + "stocks:trades" + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + }, + "x-polygon-paginate": { + "limit": { + "max": 50000 + }, + "order": { + "default": "desc" + }, + "sort": { + "default": "timestamp", + "enum": [ + "timestamp" + ] + } + }, + "x-polygon-replaces": { + "date": 1654056060000, + "replaces": { + "name": "Trades", + "path": "get_v2_ticks_stocks_trades__ticker___date" } } - }, - "CryptoTradeExchange": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "CryptoHistoricTrades": { - "type": "object", - "properties": { - "day": { - "type": "string", - "format": "date", - "description": "The date that was evaluated from the request." + } + }, + "/vX/reference/financials": { + "get": { + "description": "Get historical financial data for a stock ticker.\nThe financials data is extracted from XBRL from company SEC filings using the methodology outlined \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://xbrl.squarespace.com/understanding-sec-xbrl-financi/\"\u003ehere\u003c/a\u003e.", + "operationId": "ListFinancials", + "parameters": [ + { + "description": "Query by company ticker.", + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + } }, - "map": { - "type": "object", - "description": "A map for shortened result keys." + { + "description": "Query by central index key (\u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.sec.gov/edgar/searchedgar/cik.htm\"\u003eCIK\u003c/a\u003e) Number", + "in": "query", + "name": "cik", + "schema": { + "type": "string" + } }, - "msLatency": { - "type": "integer", - "description": "The milliseconds of latency for the query results." + { + "description": "Query by company name.", + "in": "query", + "name": "company_name", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "search": true + } }, - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." + { + "description": "Query by standard industrial classification (\u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.sec.gov/corpfin/division-of-corporation-finance-standard-industrial-classification-sic-code-list\"\u003eSIC\u003c/a\u003e)", + "in": "query", + "name": "sic", + "schema": { + "type": "string" + } }, - "ticks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - } - } + { + "description": "Query by the date when the filing with financials data was filed in YYYY-MM-DD format.\n\nBest used when querying over date ranges to find financials based on filings that happen in a time period.\n\nExamples:\n\nTo get financials based on filings that have happened after January 1, 2009 use the query param filing_date.gte=2009-01-01\n\nTo get financials based on filings that happened in the year 2009 use the query params filing_date.gte=2009-01-01\u0026filing_date.lt=2010-01-01", + "in": "query", + "name": "filing_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true } - } - } - }, - "CryptoLastTrade": { - "type": "object", - "properties": { - "last": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "exchange": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "price": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "size": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "timestamp": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - } + }, + { + "description": "The period of report for the filing with financials data in YYYY-MM-DD format.", + "in": "query", + "name": "period_of_report_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true } }, - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." - } - } - }, - "CryptoOpenClose": { - "type": "object", - "properties": { - "symbol": { - "type": "string", - "description": "The symbol pair that was evaluated from the request." + { + "description": "Query by timeframe. Annual financials originate from 10-K filings, and quarterly financials originate from 10-Q filings. Note: Most companies do not file quarterly reports for Q4 and instead include those financials in their annual report, so some companies my not return quarterly financials for Q4", + "in": "query", + "name": "timeframe", + "schema": { + "enum": [ + "annual", + "quarterly" + ], + "type": "string" + } }, - "isUTC": { - "type": "boolean", - "description": "Whether or not the timestamps are in UTC timezone." + { + "description": "Whether or not to include the `xpath` and `formula` attributes for each financial data point.\nSee the `xpath` and `formula` response attributes for more info. False by default.", + "in": "query", + "name": "include_sources", + "schema": { + "default": false, + "type": "boolean" + } }, - "day": { - "type": "string", - "format": "date", - "description": "The date requested." + { + "description": "Search by company_name.", + "in": "query", + "name": "company_name.search", + "schema": { + "type": "string" + } }, - "open": { - "type": "number", - "format": "double", - "description": "The open price for the symbol in the given time period." + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.gte", + "schema": { + "format": "date", + "type": "string" + } }, - "close": { - "type": "number", - "format": "double", - "description": "The close price for the symbol in the given time period." + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.gt", + "schema": { + "format": "date", + "type": "string" + } }, - "openTrades": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - } - } + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.lte", + "schema": { + "format": "date", + "type": "string" } }, - "closingTrades": { - "type": "array", - "items": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" - }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" - }, - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" - }, - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" - } - }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." - }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" - } - } + { + "description": "Search by filing_date.", + "in": "query", + "name": "filing_date.lt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.gte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.gt", + "schema": { + "format": "date", + "type": "string" } - } - } - }, - "CryptoTick": { - "type": "object", - "properties": { - "p": { - "type": "number", - "format": "double", - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n" }, - "s": { - "type": "number", - "format": "double", - "description": "The size of a trade (also known as volume).\n" + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.lte", + "schema": { + "format": "date", + "type": "string" + } }, - "x": { - "type": "integer", - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n" + { + "description": "Search by period_of_report_date.", + "in": "query", + "name": "period_of_report_date.lt", + "schema": { + "format": "date", + "type": "string" + } }, - "c": { - "type": "array", - "description": "A list of condition codes.\n", - "items": { - "type": "integer", - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n" + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" } }, - "t": { - "type": "integer", - "description": "The Unix Msec timestamp for the start of the aggregate window." + { + "description": "Limit the number of results returned, default is 1 and max is 100.", + "in": "query", + "name": "limit", + "schema": { + "default": 1, + "example": 1, + "maximum": 100, + "minimum": 1, + "type": "integer" + } }, - "i": { - "type": "string", - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n" + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "period_of_report_date", + "enum": [ + "filing_date", + "period_of_report_date" + ], + "example": "filing_date", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "count": 1, + "description": "FIXME", + "example": { + "cik": "0000789019", + "company_name": "MICROSOFT CORPORATION", + "end_date": "2020-12-31", + "financials": { + "balance_sheet": { + "assets": { + "label": "Assets", + "order": 100, + "unit": "USD", + "value": 304137000000, + "xpath": "//*[local-name()='Assets' and @id='F_000165']" + }, + "equity": { + "formula": "BS-Impute-07", + "label": "Equity", + "order": 1400, + "unit": "USD", + "value": 130236000000 + }, + "liabilities": { + "label": "Liabilities", + "order": 600, + "unit": "USD", + "value": 173901000000, + "xpath": "//*[local-name()='Liabilities' and @id='F_000193']" + } + }, + "cash_flow_statement": { + "exchange_gains_losses": { + "label": "Exchange Gains/Losses", + "order": 1000, + "unit": "USD", + "value": 14000000, + "xpath": "//*[local-name()='EffectOfExchangeRateOnCashAndCashEquivalents' and @id='F_000327']" + }, + "net_cash_flow": { + "formula": "CF-Impute-20", + "label": "Net Cash Flow", + "order": 1100, + "unit": "USD", + "value": -2773000000 + }, + "net_cash_flow_from_financing_activities": { + "label": "Net Cash Flow From Financing Activities", + "order": 700, + "unit": "USD", + "value": -13634000000, + "xpath": "//*[local-name()='NetCashProvidedByUsedInFinancingActivities' and @id='F_000295']" + } + }, + "comprehensive_income": { + "comprehensive_income_loss": { + "formula": "CI-Impute-04", + "label": "Comprehensive Income/Loss", + "order": 100, + "unit": "USD", + "value": 15720000000 + }, + "comprehensive_income_loss_attributable_to_parent": { + "label": "Comprehensive Income/Loss Attributable To Parent", + "order": 300, + "unit": "USD", + "value": 15720000000, + "xpath": "//*[local-name()='ComprehensiveIncomeNetOfTax' and @id='F_000135']" + }, + "other_comprehensive_income_loss": { + "formula": "CI-Impute-07", + "label": "Other Comprehensive Income/Loss", + "order": 400, + "unit": "USD", + "value": 15720000000 + } + }, + "income_statement": { + "basic_earnings_per_share": { + "label": "Basic Earnings Per Share", + "order": 4200, + "unit": "USD / shares", + "value": 2.05, + "xpath": "//*[local-name()='EarningsPerShareBasic' and @id='F_000099']" + }, + "cost_of_revenue": { + "label": "Cost Of Revenue", + "order": 300, + "unit": "USD", + "value": 14194000000, + "xpath": "//*[local-name()='CostOfGoodsAndServicesSold' and @id='F_000059']" + }, + "gross_profit": { + "label": "Gross Profit", + "order": 800, + "unit": "USD", + "value": 28882000000, + "xpath": "//*[local-name()='GrossProfit' and @id='F_000063']" + }, + "operating_expenses": { + "formula": "IS-Impute-22", + "label": "Operating Expenses", + "order": 1000, + "unit": "USD", + "value": 10985000000 + }, + "revenues": { + "label": "Revenues", + "order": 100, + "unit": "USD", + "value": 43076000000, + "xpath": "//*[local-name()='RevenueFromContractWithCustomerExcludingAssessedTax' and @id='F_000047']" + } + } + }, + "fiscal_period": "Q2", + "fiscal_year": "2021", + "source_filing_file_url": "https:/api.polygon.io/v1/reference/sec/filings/0001564590-21-002316/files/0001564590-21-002316:12:msft-10q_20201231_htm.xml", + "source_filing_url": "https://api.polygon.io/v1/reference/sec/filings/0001564590-21-002316", + "start_date": "2020-10-01" + }, + "next_url": "https:/api.polygon.io/vX/reference/financials?", + "request_id": "28173f20a0751f3479afd9e2cc9246ea", + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "items": { + "properties": { + "cik": { + "description": "The CIK number for the company.", + "type": "string" + }, + "company_name": { + "description": "The company name.", + "type": "string" + }, + "end_date": { + "description": "The end date of the period that these financials cover in YYYYMMDD format.", + "type": "string" + }, + "filing_date": { + "description": "The date that the SEC filing which these financials were derived from was made available. Note that this is not necessarily the date when this information became public, as some companies may publish a press release before filing with the SEC." + }, + "financials": { + "properties": { + "balance_sheet": { + "description": "Balance sheet.\nNote that the keys in this object can be any of the balance sheet concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.", + "properties": { + "*": { + "description": "An individual financial data point.", + "properties": { + "formula": { + "description": "The name of the formula used to derive this data point from other financial data points.\nInformation about the formulas can be found \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://xbrlsite.azurewebsites.net/2020/reporting-scheme/us-gaap/fac/documentation/ImputeRulesList.html\"\u003ehere\u003c/a\u003e.\nThis value is only returned for data points that are not explicitly expressed within the XBRL source file when the `include_sources` query parameter is `true`." + }, + "label": { + "description": "A human readable label for the financial data point.", + "type": "string" + }, + "order": { + "description": "An indicator of what order within the statement that you would find this data point.", + "type": "integer" + }, + "unit": { + "description": "The unit of the financial data point.", + "type": "string" + }, + "value": { + "description": "The value of the financial data point.", + "type": "number" + }, + "xpath": { + "description": "The \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/XPath\"\u003eXPath 1.0\u003c/a\u003e query that identifies the fact from within the XBRL source file.\nThis value is only returned for data points taken directly from XBRL when the `include_sources` query parameter is `true`." + } + }, + "required": [ + "label", + "order", + "value", + "unit" + ], + "type": "object" + } + }, + "type": "object" + }, + "cash_flow_statement": { + "description": "Cash flow statement.\nNote that the keys in this object can be any of the cash flow statement concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "type": "object" + }, + "comprehensive_income": { + "description": "Comprehensive income.\nNote that the keys in this object can be any of the comprehensive income statement concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "type": "object" + }, + "income_statement": { + "description": "Income statement.\nNote that the keys in this object can be any of the income statement concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "type": "object" + } + }, + "type": "object" + }, + "fiscal_period": { + "description": "Fiscal period of the report according to the company (Q1, Q2, Q3, Q4, or FY).", + "type": "string" + }, + "fiscal_year": { + "description": "Fiscal year of the report according to the company.", + "type": "string" + }, + "source_filing_file_url": { + "description": "The URL of the specific XBRL instance document within the SEC filing that these financials were derived from." + }, + "source_filing_url": { + "description": "The URL of the SEC filing that these financials were derived from.", + "type": "string" + }, + "start_date": { + "description": "The start date of the period that these financials cover in YYYYMMDD format.", + "type": "string" + } + }, + "required": [ + "reporting_period", + "cik", + "company_name", + "financials", + "fiscal_period", + "fiscal_year", + "filing_type", + "source_filing_url", + "source_filing_file_url" + ], + "type": "object", + "x-polygon-go-type": { + "name": "ResolvedFinancials", + "path": "github.com/polygon-io/go-app-api-financials/extract" + } + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status", + "request_id", + "count", + "results" + ], + "type": "object" + }, + "status": "OK" + } + }, + "description": "FIXME" + } + }, + "summary": "Stock Financials vX", + "tags": [ + "reference:stocks" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-experimental": {}, + "x-polygon-paginate": { + "limit": { + "default": 1, + "max": 100 + }, + "sort": { + "default": "period_of_report_date", + "enum": [ + "filing_date", + "period_of_report_date" + ] } } - } + } + } + }, + "security": [ + { + "apiKey": [] + } + ], + "servers": [ + { + "description": "Polygon Platform API", + "url": "https://api.polygon.io" + }, + { + "description": "Polygon Platform API (Staging)", + "url": "https://api.staging.polygon.io" + } + ], + "tags": [ + { + "description": "Reference API", + "name": "reference", + "x-polygon-sub-tags": [ + "tickers:list", + "tickers:types", + "tickers:get", + "options:contracts:list", + "news", + "tickers", + "stocks", + "sec:filings", + "sec:filing", + "sec:filing:files", + "sec:filing:file", + "stocks:market", + "conditions", + "stocks:meta:exchanges", + "crypto", + "exchanges" + ] + }, + { + "description": "Stocks API", + "name": "stocks", + "x-polygon-sub-tags": [ + "trades", + "quotes", + "last:trade", + "last:quote", + "open-close", + "aggregates", + "snapshot" + ] + }, + { + "description": "Options API", + "name": "options", + "x-polygon-sub-tags": [ + "trades", + "quotes", + "last:trade", + "last:quote", + "open-close", + "aggregates", + "snapshot" + ] + }, + { + "description": "Forex API", + "name": "fx", + "x-polygon-sub-tags": [ + "trades", + "quotes", + "conversion", + "last:trade", + "last:quote", + "aggregates", + "snapshot" + ] + }, + { + "description": "Crypto API", + "name": "crypto", + "x-polygon-sub-tags": [ + "trades", + "last:trade", + "open-close", + "aggregates", + "snapshot" + ] + } + ], + "x-polygon-order": { + "crypto": { + "market": [ + { + "paths": [ + "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/aggs/grouped/locale/global/market/crypto/{date}" + ] + }, + { + "paths": [ + "/v1/open-close/crypto/{from}/{to}/{date}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{cryptoTicker}/prev" + ] + }, + { + "paths": [ + "/v3/trades/{cryptoTicker}" + ] + }, + { + "paths": [ + "/v1/historic/crypto/{from}/{to}/{date}" + ] + }, + { + "paths": [ + "/v1/last/crypto/{from}/{to}" + ] + }, + { + "group": "Snapshots", + "paths": [ + "/v2/snapshot/locale/global/markets/crypto/tickers", + "/v2/snapshot/locale/global/markets/crypto/{direction}", + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}", + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" + ] + } + ], + "reference": [ + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } + ] }, - "responses": { - "NotFound": { - "description": "The specified resource was not found" - }, - "Conflict": { - "description": "Parameter is invalid or incorrect." - }, - "Unauthorized": { - "description": "Unauthorized - Check our API Key and account status" - }, - "DefaultError": { - "description": "Unexpected error" - } + "fx": { + "market": [ + { + "paths": [ + "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/aggs/grouped/locale/global/market/fx/{date}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{forexTicker}/prev" + ] + }, + { + "paths": [ + "/v3/quotes/{fxTicker}" + ] + }, + { + "paths": [ + "/v1/historic/forex/{from}/{to}/{date}" + ] + }, + { + "paths": [ + "/v1/last_quote/currencies/{from}/{to}" + ] + }, + { + "paths": [ + "/v1/conversion/{from}/{to}" + ] + }, + { + "group": "Snapshots", + "paths": [ + "/v2/snapshot/locale/global/markets/forex/tickers", + "/v2/snapshot/locale/global/markets/forex/{direction}", + "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" + ] + } + ], + "reference": [ + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } + ] }, - "parameters": { - "TickersQueryParam": { - "name": "tickers", - "in": "query", - "description": "A comma separated list of tickers to get snapshots for.", - "schema": { - "type": "array", - "items": { - "type": "string" - } + "options": { + "market": [ + { + "paths": [ + "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v1/open-close/{optionsTicker}/{date}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{optionsTicker}/prev" + ] + }, + { + "paths": [ + "/v3/trades/{optionsTicker}" + ] + }, + { + "paths": [ + "/v2/last/trade/{optionsTicker}" + ] + }, + { + "paths": [ + "/v3/quotes/{optionsTicker}" + ] + }, + { + "group": "Snapshots", + "paths": [ + "/v3/snapshot/options/{underlyingAsset}/{optionContract}", + "/v3/snapshot/options/{underlyingAsset}" + ] } - }, - "GeneralTickerPathParam": { - "name": "ticker", - "in": "path", - "description": "The ticker symbol of the asset.", - "required": true, - "schema": { - "type": "string" + ], + "reference": [ + { + "paths": [ + "/v3/reference/options/contracts/{options_ticker}" + ] + }, + { + "paths": [ + "/v3/reference/options/contracts" + ] + }, + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v1/meta/symbols/{stocksTicker}/company" + ] + }, + { + "paths": [ + "/v3/reference/tickers/{ticker}" + ] + }, + { + "paths": [ + "/v2/reference/news" + ] + }, + { + "paths": [ + "/v3/reference/tickers/types" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } + ] + }, + "stocks": { + "market": [ + { + "paths": [ + "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/aggs/grouped/locale/us/market/stocks/{date}" + ] }, - "example": "AAPL" - }, - "StocksTickerPathParam": { - "name": "stocksTicker", - "in": "path", - "description": "The ticker symbol of the stock/equity.", - "required": true, - "schema": { - "type": "string" + { + "paths": [ + "/v1/open-close/{stocksTicker}/{date}" + ] }, - "example": "AAPL" - }, - "OptionsTickerPathParam": { - "name": "optionsTicker", - "in": "path", - "description": "The ticker symbol of the options contract.", - "required": true, - "schema": { - "type": "string" + { + "paths": [ + "/v2/aggs/ticker/{stocksTicker}/prev" + ] }, - "example": "O:TSLA210903C00700000" - }, - "ForexTickerPathParam": { - "name": "forexTicker", - "in": "path", - "description": "The ticker symbol of the currency pair.", - "required": true, - "schema": { - "type": "string" + { + "paths": [ + "/v3/trades/{stockTicker}" + ] }, - "example": "C:EURUSD" - }, - "CryptoTickerPathParam": { - "name": "cryptoTicker", - "in": "path", - "description": "The ticker symbol of the currency pair.", - "required": true, - "schema": { - "type": "string" + { + "paths": [ + "/v2/ticks/stocks/trades/{ticker}/{date}" + ] }, - "example": "X:BTCUSD" - }, - "AggregateMultiplier": { - "name": "multiplier", - "in": "path", - "description": "The size of the timespan multiplier.", - "required": true, - "schema": { - "type": "integer" + { + "paths": [ + "/v2/last/trade/{stocksTicker}" + ] }, - "example": 1 - }, - "AggregateTimespan": { - "name": "timespan", - "in": "path", - "description": "The size of the time window.", - "required": true, - "schema": { - "type": "string", - "enum": [ - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" + { + "paths": [ + "/v3/quotes/{stockTicker}" ] }, - "example": "day" - }, - "AggregateTimeFrom": { - "name": "from", - "in": "path", - "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "required": true, - "schema": { - "type": "string" + { + "paths": [ + "/v2/ticks/stocks/nbbo/{ticker}/{date}" + ] }, - "example": "2021-07-22" - }, - "AggregateTimeTo": { - "name": "to", - "in": "path", - "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "required": true, - "schema": { - "type": "string" + { + "paths": [ + "/v2/last/nbbo/{stocksTicker}" + ] }, - "example": "2021-07-22" - }, - "AggregateAdjusted": { - "name": "adjusted", - "in": "query", - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "required": false, - "schema": { - "type": "boolean" + { + "group": "Snapshots", + "paths": [ + "/v2/snapshot/locale/us/markets/stocks/tickers", + "/v2/snapshot/locale/us/markets/stocks/{direction}", + "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}" + ] + } + ], + "reference": [ + { + "paths": [ + "/v3/reference/tickers" + ] }, - "example": true - }, - "AggregateSort": { - "name": "sort", - "schema": { - "enum": [ - "asc", - "desc" + { + "paths": [ + "/v1/meta/symbols/{stocksTicker}/company" ] }, - "in": "query", - "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", - "example": "asc" - }, - "AggregateDate": { - "name": "date", - "in": "path", - "description": "The beginning date for the aggregate window.", - "required": true, - "schema": { - "type": "string" + { + "paths": [ + "/v3/reference/tickers/{ticker}" + ] }, - "example": "2020-10-14" - }, - "ReverseOrder": { - "name": "reverse", - "in": "query", - "description": "Reverse the order of the results.\n", - "required": false, - "schema": { - "type": "boolean" + { + "paths": [ + "/v2/reference/news" + ] }, - "example": true - }, - "SnapshotDirection": { - "name": "direction", - "in": "path", - "description": "The direction of the snapshot results to return.\n", - "required": true, - "schema": { - "type": "string", - "enum": [ - "gainers", - "losers" + { + "paths": [ + "/v3/reference/tickers/types" ] }, - "example": "gainers" - }, - "IncludeOTC": { - "name": "include_otc", - "in": "query", - "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", - "required": false, - "schema": { - "type": "boolean" - } - }, - "LimitMax50000": { - "name": "limit", - "in": "query", - "description": "Limit the size of the response, max 50000 and default 5000.", - "required": false, - "schema": { - "type": "integer" + { + "paths": [ + "/v1/marketstatus/upcoming" + ] }, - "example": 10 - }, - "AggregateLimitMax50000": { - "name": "limit", - "in": "query", - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", - "required": false, - "schema": { - "type": "integer" + { + "paths": [ + "/v1/marketstatus/now" + ] }, - "example": 120 - }, - "LimitMax10000": { - "name": "limit", - "in": "query", - "description": "Limit the size of the response, max 10000.", - "required": false, - "schema": { - "type": "integer" + { + "group": "SEC Filings", + "paths": [ + "/v1/reference/sec/filings", + "/v1/reference/sec/filings/{filing_id}", + "/v1/reference/sec/filings/{filing_id}/files", + "/v1/reference/sec/filings/{filing_id}/files/{file_id}" + ] }, - "example": 100 - }, - "LimitNoMax": { - "name": "limit", - "in": "query", - "description": "Limit the number of results.\n", - "required": false, - "schema": { - "type": "integer" + { + "paths": [ + "/v3/reference/splits" + ] }, - "example": 5 - } - }, - "securitySchemes": { - "apiKey": { - "type": "apiKey", - "name": "apiKey", - "in": "query" - } - } - }, - "security": [ - { - "apiKey": [] + { + "paths": [ + "/v3/reference/dividends" + ] + }, + { + "paths": [ + "/vX/reference/financials" + ] + }, + { + "paths": [ + "/v3/reference/conditions" + ] + }, + { + "paths": [ + "/v3/reference/exchanges" + ] + } + ] } - ] -} + } +} \ No newline at end of file From d8753bfb4a8fd61b36cfdafc8ed7b85c6c14da65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:17:00 -0400 Subject: [PATCH 152/448] Bump types-setuptools from 63.2.2 to 63.4.0 (#276) Bumps [types-setuptools](https://github.com/python/typeshed) from 63.2.2 to 63.4.0. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5d57d048..eab003ca 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "63.2.2" +version = "63.4.0" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "090a4f12c5c0dd76557b7c7d55095098b802b0e5be87cf56a64a38ab0ab20a4f" +content-hash = "feb87a1c9279d58846a67b5ad41c2fc2b26b10e735988b45faa544ab5a0580c0" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-63.2.2.tar.gz", hash = "sha256:a9aa0c01d5f3443cd544026d5ffc97b95ddadf731dab13419c393d43fd8617c0"}, - {file = "types_setuptools-63.2.2-py3-none-any.whl", hash = "sha256:a370df7a1e0dc856af9d998234f6e2ab04f30f25b8e1410f6db65910979f6252"}, + {file = "types-setuptools-63.4.0.tar.gz", hash = "sha256:f954044034066cd3d8ceccc87e2d5cebe7a96c9f87996f61c3c6a92cd56cc8a4"}, + {file = "types_setuptools-63.4.0-py3-none-any.whl", hash = "sha256:f568830d82b48783a0df00646bc84effeddb4886bf0f19708fbbadeb552b6ece"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.20.tar.gz", hash = "sha256:1fb6e2af519a7216a19dd6be8cd2ee787b402a754ccb4a13ca1c0e5b202aea5a"}, diff --git a/pyproject.toml b/pyproject.toml index 0b19e8a8..dd079d29 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.1" types-certifi = "^2021.10.8" -types-setuptools = "^63.2.2" +types-setuptools = "^63.4.0" pook = "^1.0.2" [build-system] From 3e744980f405c4fbdef776d07347f278c550128e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:23:18 -0400 Subject: [PATCH 153/448] Bump sphinx-autodoc-typehints from 1.19.1 to 1.19.2 (#277) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.19.1 to 1.19.2. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.19.1...1.19.2) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 14 +++++++------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index eab003ca..13730211 100644 --- a/poetry.lock +++ b/poetry.lock @@ -381,18 +381,18 @@ test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.19.1" +version = "1.19.2" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -Sphinx = ">=4.5" +Sphinx = ">=5.1.1" [package.extras] -testing = ["covdefaults (>=2.2)", "coverage (>=6.3)", "diff-cover (>=6.4)", "nptyping (>=2.1.2)", "pytest (>=7.1)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=4.1)"] -type_comments = ["typed-ast (>=1.5.2)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "diff-cover (>=6.5.1)", "nptyping (>=2.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] +type_comments = ["typed-ast (>=1.5.4)"] [[package]] name = "sphinx-rtd-theme" @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "feb87a1c9279d58846a67b5ad41c2fc2b26b10e735988b45faa544ab5a0580c0" +content-hash = "3f3469651a1616bbe7bf50385a28b3434ff2d8f1be3e74971a3293098888b3c8" [metadata.files] alabaster = [ @@ -796,8 +796,8 @@ sphinx = [ {file = "Sphinx-5.1.1.tar.gz", hash = "sha256:ba3224a4e206e1fbdecf98a4fae4992ef9b24b85ebf7b584bb340156eaf08d89"}, ] sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.19.1-py3-none-any.whl", hash = "sha256:9be46aeeb1b315eb5df1f3a7cb262149895d16c7d7dcd77b92513c3c3a1e85e6"}, - {file = "sphinx_autodoc_typehints-1.19.1.tar.gz", hash = "sha256:6c841db55e0e9be0483ff3962a2152b60e79306f4288d8c4e7e86ac84486a5ea"}, + {file = "sphinx_autodoc_typehints-1.19.2-py3-none-any.whl", hash = "sha256:3d761de928d5a86901331133d6d4a2552afa2e798ebcfc0886791792aeb4dd9a"}, + {file = "sphinx_autodoc_typehints-1.19.2.tar.gz", hash = "sha256:872fb2d7b3d794826c28e36edf6739e93549491447dcabeb07c58855e9f914de"}, ] sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, diff --git a/pyproject.toml b/pyproject.toml index dd079d29..c8c2c85c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.20" Sphinx = "^5.1.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.19.1" +sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" types-setuptools = "^63.4.0" pook = "^1.0.2" From a96e602d7f0a688766d5053341aaf893f9b20c17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:32:02 -0400 Subject: [PATCH 154/448] Bump types-urllib3 from 1.26.20 to 1.26.22 (#278) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.20 to 1.26.22. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 13730211..38174146 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.20" +version = "1.26.22" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "3f3469651a1616bbe7bf50385a28b3434ff2d8f1be3e74971a3293098888b3c8" +content-hash = "cc6148779f04549f650c9f2b5dc01357865357281fc8d338c424344651a976ef" [metadata.files] alabaster = [ @@ -840,8 +840,8 @@ types-setuptools = [ {file = "types_setuptools-63.4.0-py3-none-any.whl", hash = "sha256:f568830d82b48783a0df00646bc84effeddb4886bf0f19708fbbadeb552b6ece"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.20.tar.gz", hash = "sha256:1fb6e2af519a7216a19dd6be8cd2ee787b402a754ccb4a13ca1c0e5b202aea5a"}, - {file = "types_urllib3-1.26.20-py3-none-any.whl", hash = "sha256:6249b6223226cb2012db3b4ff6945c9cb0e12ece9b24f5e29787c4f05028a979"}, + {file = "types-urllib3-1.26.22.tar.gz", hash = "sha256:b05af90e73889e688094008a97ca95788db8bf3736e2776fd43fb6b171485d94"}, + {file = "types_urllib3-1.26.22-py3-none-any.whl", hash = "sha256:09a8783e1002472e8d1e1f3792d4c5cca1fffebb9b48ee1512aae6d16fe186bc"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, diff --git a/pyproject.toml b/pyproject.toml index c8c2c85c..67ee0175 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.6.0" mypy = "^0.971" -types-urllib3 = "^1.26.20" +types-urllib3 = "^1.26.22" Sphinx = "^5.1.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org From 640631a17c56454e7da366e03f676cdc308b7599 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 13:06:19 -0400 Subject: [PATCH 155/448] Bump types-setuptools from 63.4.0 to 64.0.1 (#281) Bumps [types-setuptools](https://github.com/python/typeshed) from 63.4.0 to 64.0.1. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 30 +++++++++++++++--------------- pyproject.toml | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/poetry.lock b/poetry.lock index 38174146..702d4976 100644 --- a/poetry.lock +++ b/poetry.lock @@ -48,10 +48,10 @@ tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +jupyter = ["tokenize-rt (>=3.2.0)", "ipython (>=7.8.0)"] +d = ["aiohttp (>=3.7.4)"] +colorama = ["colorama (>=0.4.3)"] [[package]] name = "certifi" @@ -155,8 +155,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +testing = ["pytest-mypy (>=0.9.1)", "pytest-black (>=0.3.7)", "pytest-enabler (>=1.0.1)", "pytest-cov", "pytest-flake8", "pytest-checkdocs (>=2.4)", "pytest (>=6)"] +docs = ["rst.linker (>=1.9)", "jaraco.packaging (>=9)", "sphinx"] [[package]] name = "jinja2" @@ -186,8 +186,8 @@ importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\"" pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" [package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format_nongpl = ["webcolors (>=1.11)", "uri-template", "rfc3986-validator (>0.1.0)", "rfc3339-validator", "jsonpointer (>1.13)", "isoduration", "idna", "fqdn"] +format = ["webcolors (>=1.11)", "uri-template", "rfc3987", "rfc3339-validator", "jsonpointer (>1.13)", "isoduration", "idna", "fqdn"] [[package]] name = "markupsafe" @@ -375,9 +375,9 @@ sphinxcontrib-qthelp = "*" sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] +test = ["typed-ast", "cython", "html5lib", "pytest (>=4.6)"] +lint = ["types-requests", "types-typed-ast", "docutils-stubs", "sphinx-lint", "mypy (>=0.971)", "isort", "flake8-bugbear", "flake8-comprehensions", "flake8 (>=3.5.0)"] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "isort", "mypy (>=0.971)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" @@ -391,8 +391,8 @@ python-versions = ">=3.7" Sphinx = ">=5.1.1" [package.extras] -testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "diff-cover (>=6.5.1)", "nptyping (>=2.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] type_comments = ["typed-ast (>=1.5.4)"] +testing = ["typing-extensions (>=4.3)", "sphobjinv (>=2.2.2)", "pytest-cov (>=3)", "pytest (>=7.1.2)", "nptyping (>=2.2)", "diff-cover (>=6.5.1)", "coverage (>=6.4.2)", "covdefaults (>=2.2)"] [[package]] name = "sphinx-rtd-theme" @@ -477,8 +477,8 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "tomli" @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "63.4.0" +version = "64.0.1" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "cc6148779f04549f650c9f2b5dc01357865357281fc8d338c424344651a976ef" +content-hash = "c368b791c075db4166cf24c5b5d0e4bb26298cff3cefeab1183a6b93a8eb4174" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-63.4.0.tar.gz", hash = "sha256:f954044034066cd3d8ceccc87e2d5cebe7a96c9f87996f61c3c6a92cd56cc8a4"}, - {file = "types_setuptools-63.4.0-py3-none-any.whl", hash = "sha256:f568830d82b48783a0df00646bc84effeddb4886bf0f19708fbbadeb552b6ece"}, + {file = "types-setuptools-64.0.1.tar.gz", hash = "sha256:8290b6bf1d916e6b007784d5cbcd112a1af9a2d76343231fcce0a55185343702"}, + {file = "types_setuptools-64.0.1-py3-none-any.whl", hash = "sha256:005ccb8a1a7d0dce61cd63081dad0ddc599af4413bb49ce1333119a78a7bb2e1"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.22.tar.gz", hash = "sha256:b05af90e73889e688094008a97ca95788db8bf3736e2776fd43fb6b171485d94"}, diff --git a/pyproject.toml b/pyproject.toml index 67ee0175..174badf2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" -types-setuptools = "^63.4.0" +types-setuptools = "^64.0.1" pook = "^1.0.2" [build-system] From 2a6fb22def462064c7ce69654d309bc144a8add0 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Thu, 18 Aug 2022 11:40:43 -0400 Subject: [PATCH 156/448] Parse crypto aggs (#283) * fix crypto agg and forex agg swap * fix typo * fix lint --- examples/websocket/crypto.py | 2 +- polygon/websocket/__init__.py | 2 +- polygon/websocket/models/__init__.py | 4 +--- polygon/websocket/models/common.py | 4 ++-- polygon/websocket/models/models.py | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/examples/websocket/crypto.py b/examples/websocket/crypto.py index 21ed72f7..37160e81 100644 --- a/examples/websocket/crypto.py +++ b/examples/websocket/crypto.py @@ -2,7 +2,7 @@ from polygon.websocket.models import WebSocketMessage, Market from typing import List -c = WebSocketClient(market=Market.Crypto, subscriptions=["XT.*"]) +c = WebSocketClient(market=Market.Crypto, subscriptions=["XA.*"]) def handle_msg(msgs: List[WebSocketMessage]): diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index b8ed4775..21f6bfcb 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -33,7 +33,7 @@ def __init__( """ Initialize a Polygon WebSocketClient. - :param api_key: Your API keYour API key. + :param api_key: Your API key. :param feed: The feed to subscribe to. :param raw: Whether to pass raw Union[str, bytes] to user callback. :param verbose: Whether to log client and server status messages. diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py index 67c60adc..184acba9 100644 --- a/polygon/websocket/models/__init__.py +++ b/polygon/websocket/models/__init__.py @@ -8,9 +8,7 @@ def parse_single(data: Dict[str, Any]): event_type = data["ev"] if event_type in [EventType.EquityAgg.value, EventType.EquityAggMin.value]: return EquityAgg.from_dict(data) - elif event_type == EventType.CryptoAgg.value: - return CurrencyAgg.from_dict(data) - elif event_type == EventType.CryptoQuote.value: + elif event_type in [EventType.CryptoAgg.value, EventType.ForexAgg.value]: return CurrencyAgg.from_dict(data) elif event_type == EventType.EquityTrade.value: return EquityTrade.from_dict(data) diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index ee02cc1f..b37573f7 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -20,8 +20,8 @@ class Market(Enum): class EventType(Enum): EquityAgg = "A" EquityAggMin = "AM" - CryptoAgg = "CA" - ForexAgg = "XA" + CryptoAgg = "XA" + ForexAgg = "CA" EquityTrade = "T" CryptoTrade = "XT" EquityQuote = "Q" diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 41d85bdc..ec1cb14a 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -56,7 +56,7 @@ class CurrencyAgg: vwap: Optional[float] = None start_timestamp: Optional[int] = None end_timestamp: Optional[int] = None - avg_trade_size: Optional[int] = None + avg_trade_size: Optional[float] = None @staticmethod def from_dict(d): From 1805b118fbf26dcabc75aff104a70478b7755d52 Mon Sep 17 00:00:00 2001 From: Darcy Linde <47221647+Darcy-Linde@users.noreply.github.com> Date: Mon, 22 Aug 2022 11:33:17 -0400 Subject: [PATCH 157/448] improve limit description (#286) Co-authored-by: Darcy Linde <{47221647+Darcy-Linde@users.noreply.github.com}> --- polygon/rest/quotes.py | 2 +- polygon/rest/reference.py | 12 ++++++------ polygon/rest/trades.py | 2 +- polygon/rest/vX.py | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index 0169321f..ba7ca684 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -37,7 +37,7 @@ def list_quotes( :param timestamp_lte: Timestamp less than or equal to :param timestamp_gt: Timestamp greater than :param timestamp_gte: Timestamp greater than or equal to - :param limit: Limit the number of results returned, default is 10 and max is 50000. + :param limit: Limit the number of results returned per-page, default is 10 and max is 50000. :param sort: Sort field used for ordering. :param order: Order results based on the sort field. :param params: Any additional query params. diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 0b5bf0d5..e6f5c4f3 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -101,7 +101,7 @@ def list_tickers( :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 limit: Limit the size of the response per-page, 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. @@ -166,7 +166,7 @@ def list_ticker_news( :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 limit: Limit the number of results returned per-page, 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. @@ -243,7 +243,7 @@ def list_splits( :param execution_date_gt: Execution date greater than. :param execution_date_gte: Execution date greater than or equal to. :param reverse_split: Query for reverse stock splits. A split ratio where split_from is greater than split_to represents a reverse split. By default this filter is not used. - :param limit: Limit the number of results returned, default is 10 and max is 1000. + :param limit: Limit the number of results returned per-page, 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. @@ -332,7 +332,7 @@ def list_dividends( :param frequency: Query by the number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly). :param cash_amount: Query by the cash amount of the dividend. :param dividend_type: Query by the type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD. Special Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC. - :param limit: Limit the number of results returned, default is 10 and max is 1000. + :param limit: Limit the number of results returned per-page, 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. @@ -369,7 +369,7 @@ def list_conditions( :param data_type: Data types that this condition applies to. :param id: Filter for conditions with a given ID. :param sip: Filter by SIP. If the condition contains a mapping for that SIP, the condition will be returned. - :param limit: Limit the number of results returned, default is 10 and max is 1000. + :param limit: Limit the number of results returned per-page, 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. @@ -476,7 +476,7 @@ def list_options_contracts( :param as_of: Specify a point in time for contracts as of this date with format YYYY-MM-DD. :param strike_price: Query by strike price of a contract. :param expired: Query for expired contracts. - :param limit: Limit the number of results returned, default is 10 and max is 1000. + :param limit: Limit the number of results returned per-page, 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. diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 96eb0148..4b3fb287 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -29,7 +29,7 @@ def list_trades( :param timestamp_lte: Timestamp less than or equal to :param timestamp_gt: Timestamp greater than :param timestamp_gte: Timestamp greater than or equal to - :param limit: Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements. + :param limit: Limits the number of base aggregates queried per-page to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements. :param sort: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window. :param order: Order results based on the sort field :param params: Any additional query params diff --git a/polygon/rest/vX.py b/polygon/rest/vX.py index a910c641..350b0b83 100644 --- a/polygon/rest/vX.py +++ b/polygon/rest/vX.py @@ -51,7 +51,7 @@ def list_stock_financials( :param period_of_report_date_gte: period_of_report_date greater than or equal to. :param timeframe: Query by timeframe. :param include_sources: Whether or not to include the xpath and formula attributes for each financial data point. - :param limit: Limit the number of results returned, default is 1 and max is 100. + :param limit: Limit the number of results returned per-page, default is 1 and max is 100. :param sort: Sort field used for ordering. :param order: Order results based on the sort field. :param params: Any additional query params From 2ce84a25e18e5d39023cf846e4368148f385f4d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 12:29:23 -0400 Subject: [PATCH 158/448] Bump types-setuptools from 64.0.1 to 65.1.0 (#287) Bumps [types-setuptools](https://github.com/python/typeshed) from 64.0.1 to 65.1.0. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 28 ++++++++++++++-------------- pyproject.toml | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/poetry.lock b/poetry.lock index 702d4976..bac8f7c5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -48,10 +48,10 @@ tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] -uvloop = ["uvloop (>=0.15.2)"] -jupyter = ["tokenize-rt (>=3.2.0)", "ipython (>=7.8.0)"] -d = ["aiohttp (>=3.7.4)"] colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" @@ -155,8 +155,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -testing = ["pytest-mypy (>=0.9.1)", "pytest-black (>=0.3.7)", "pytest-enabler (>=1.0.1)", "pytest-cov", "pytest-flake8", "pytest-checkdocs (>=2.4)", "pytest (>=6)"] -docs = ["rst.linker (>=1.9)", "jaraco.packaging (>=9)", "sphinx"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "jinja2" @@ -186,8 +186,8 @@ importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\"" pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" [package.extras] -format_nongpl = ["webcolors (>=1.11)", "uri-template", "rfc3986-validator (>0.1.0)", "rfc3339-validator", "jsonpointer (>1.13)", "isoduration", "idna", "fqdn"] -format = ["webcolors (>=1.11)", "uri-template", "rfc3987", "rfc3339-validator", "jsonpointer (>1.13)", "isoduration", "idna", "fqdn"] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] [[package]] name = "markupsafe" @@ -375,9 +375,9 @@ sphinxcontrib-qthelp = "*" sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] -test = ["typed-ast", "cython", "html5lib", "pytest (>=4.6)"] -lint = ["types-requests", "types-typed-ast", "docutils-stubs", "sphinx-lint", "mypy (>=0.971)", "isort", "flake8-bugbear", "flake8-comprehensions", "flake8 (>=3.5.0)"] docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "isort", "mypy (>=0.971)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" @@ -391,8 +391,8 @@ python-versions = ">=3.7" Sphinx = ">=5.1.1" [package.extras] +testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "diff-cover (>=6.5.1)", "nptyping (>=2.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] type_comments = ["typed-ast (>=1.5.4)"] -testing = ["typing-extensions (>=4.3)", "sphobjinv (>=2.2.2)", "pytest-cov (>=3)", "pytest (>=7.1.2)", "nptyping (>=2.2)", "diff-cover (>=6.5.1)", "coverage (>=6.4.2)", "covdefaults (>=2.2)"] [[package]] name = "sphinx-rtd-theme" @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "64.0.1" +version = "65.1.0" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "c368b791c075db4166cf24c5b5d0e4bb26298cff3cefeab1183a6b93a8eb4174" +content-hash = "7a2277dd466fcec6a2db444b6a55c275565e43fda845bfeb0a77361b0fb29b43" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-64.0.1.tar.gz", hash = "sha256:8290b6bf1d916e6b007784d5cbcd112a1af9a2d76343231fcce0a55185343702"}, - {file = "types_setuptools-64.0.1-py3-none-any.whl", hash = "sha256:005ccb8a1a7d0dce61cd63081dad0ddc599af4413bb49ce1333119a78a7bb2e1"}, + {file = "types-setuptools-65.1.0.tar.gz", hash = "sha256:57f7d89eaa52a40ccb97f2cbe6178c6ad90f843afb67680933f8ef1472da53f8"}, + {file = "types_setuptools-65.1.0-py3-none-any.whl", hash = "sha256:050ccaff1d0fecc1b1269168fe4da396c2a0743f0d287af391a9312c18a8b095"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.22.tar.gz", hash = "sha256:b05af90e73889e688094008a97ca95788db8bf3736e2776fd43fb6b171485d94"}, diff --git a/pyproject.toml b/pyproject.toml index 174badf2..c4b3dbc2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" -types-setuptools = "^64.0.1" +types-setuptools = "^65.1.0" pook = "^1.0.2" [build-system] From 8c168ff3eecc4527d64a7def79cc2d400c30332a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 12:36:58 -0400 Subject: [PATCH 159/448] Bump types-urllib3 from 1.26.22 to 1.26.23 (#289) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.22 to 1.26.23. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index bac8f7c5..bedaa691 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.22" +version = "1.26.23" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "7a2277dd466fcec6a2db444b6a55c275565e43fda845bfeb0a77361b0fb29b43" +content-hash = "153672ed6b62a1b12aeede22533449822e209a52086d276e16b1c62979fe2d83" [metadata.files] alabaster = [ @@ -840,8 +840,8 @@ types-setuptools = [ {file = "types_setuptools-65.1.0-py3-none-any.whl", hash = "sha256:050ccaff1d0fecc1b1269168fe4da396c2a0743f0d287af391a9312c18a8b095"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.22.tar.gz", hash = "sha256:b05af90e73889e688094008a97ca95788db8bf3736e2776fd43fb6b171485d94"}, - {file = "types_urllib3-1.26.22-py3-none-any.whl", hash = "sha256:09a8783e1002472e8d1e1f3792d4c5cca1fffebb9b48ee1512aae6d16fe186bc"}, + {file = "types-urllib3-1.26.23.tar.gz", hash = "sha256:b78e819f0e350221d0689a5666162e467ba3910737bafda14b5c2c85e9bb1e56"}, + {file = "types_urllib3-1.26.23-py3-none-any.whl", hash = "sha256:333e675b188a1c1fd980b4b352f9e40572413a4c1ac689c23cd546e96310070a"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, diff --git a/pyproject.toml b/pyproject.toml index c4b3dbc2..f0aee66e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.6.0" mypy = "^0.971" -types-urllib3 = "^1.26.22" +types-urllib3 = "^1.26.23" Sphinx = "^5.1.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org From c6e3ac057c7e80a78a78d39d2e10b5055111fba2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Aug 2022 13:32:37 -0400 Subject: [PATCH 160/448] Bump urllib3 from 1.26.11 to 1.26.12 (#288) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.11 to 1.26.12. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.11...1.26.12) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index bedaa691..35dbde7a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -522,7 +522,7 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.11" +version = "1.26.12" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false @@ -530,7 +530,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -848,8 +848,8 @@ typing-extensions = [ {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, ] urllib3 = [ - {file = "urllib3-1.26.11-py2.py3-none-any.whl", hash = "sha256:c33ccba33c819596124764c23a97d25f32b28433ba0dedeb77d873a38722c9bc"}, - {file = "urllib3-1.26.11.tar.gz", hash = "sha256:ea6e8fb210b19d950fab93b60c9009226c63a28808bc8386e05301e25883ac0a"}, + {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, + {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, ] websockets = [ {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, From ecd8c8d463628a3ac5fd9b78ebea68684901c8b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 12:59:05 -0400 Subject: [PATCH 161/448] Bump types-setuptools from 65.1.0 to 65.3.0 (#291) Bumps [types-setuptools](https://github.com/python/typeshed) from 65.1.0 to 65.3.0. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 54 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 35dbde7a..6000c3b5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -15,10 +15,10 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "zope.interface"] +tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] [[package]] name = "babel" @@ -139,9 +139,9 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] [[package]] name = "importlib-resources" @@ -155,8 +155,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [[package]] name = "jinja2" @@ -262,8 +262,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] [[package]] name = "pook" @@ -295,7 +295,7 @@ optional = false python-versions = ">=3.6.8" [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrsistent" @@ -376,8 +376,8 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "isort", "mypy (>=0.971)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "isort", "mypy (>=0.971)", "sphinx-lint", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest (>=4.6)", "typed-ast"] [[package]] name = "sphinx-autodoc-typehints" @@ -418,8 +418,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-devhelp" @@ -430,8 +430,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" @@ -442,8 +442,8 @@ optional = false python-versions = ">=3.6" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-jsmath" @@ -454,7 +454,7 @@ optional = false python-versions = ">=3.5" [package.extras] -test = ["mypy", "flake8", "pytest"] +test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" @@ -465,8 +465,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-serializinghtml" @@ -477,8 +477,8 @@ optional = false python-versions = ">=3.5" [package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "tomli" @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "65.1.0" +version = "65.3.0" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -529,8 +529,8 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -558,13 +558,13 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "153672ed6b62a1b12aeede22533449822e209a52086d276e16b1c62979fe2d83" +content-hash = "da664f389611bedc071d84d954ec30e8ca699c8ebc51a68e6a227054622de645" [metadata.files] alabaster = [ @@ -836,8 +836,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-65.1.0.tar.gz", hash = "sha256:57f7d89eaa52a40ccb97f2cbe6178c6ad90f843afb67680933f8ef1472da53f8"}, - {file = "types_setuptools-65.1.0-py3-none-any.whl", hash = "sha256:050ccaff1d0fecc1b1269168fe4da396c2a0743f0d287af391a9312c18a8b095"}, + {file = "types-setuptools-65.3.0.tar.gz", hash = "sha256:c26779cbba3947823c260354adaab4e91ca8c18888aa2b740f503844b88f1813"}, + {file = "types_setuptools-65.3.0-py3-none-any.whl", hash = "sha256:f69210049580939c70386252b776eb75ff4b6de488e7d766b9398669b7de68af"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.23.tar.gz", hash = "sha256:b78e819f0e350221d0689a5666162e467ba3910737bafda14b5c2c85e9bb1e56"}, diff --git a/pyproject.toml b/pyproject.toml index f0aee66e..b11e157a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" -types-setuptools = "^65.1.0" +types-setuptools = "^65.3.0" pook = "^1.0.2" [build-system] From a5b266bf128038b92bfa5a11cbbf50850bdc0a56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Sep 2022 10:14:40 -0400 Subject: [PATCH 162/448] Bump black from 22.6.0 to 22.8.0 (#295) Bumps [black](https://github.com/psf/black) from 22.6.0 to 22.8.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/22.6.0...22.8.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 50 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6000c3b5..18755efa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,7 +33,7 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "22.6.0" +version = "22.8.0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "da664f389611bedc071d84d954ec30e8ca699c8ebc51a68e6a227054622de645" +content-hash = "3d3968e8b23c5c0ff8a9a7764fa5a1eacbfeece90a8fb3e6e044a6f50295bc25" [metadata.files] alabaster = [ @@ -580,29 +580,29 @@ babel = [ {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, ] black = [ - {file = "black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, - {file = "black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, - {file = "black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, - {file = "black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, - {file = "black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, - {file = "black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, - {file = "black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, - {file = "black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, - {file = "black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, - {file = "black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, - {file = "black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, - {file = "black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, - {file = "black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, - {file = "black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, - {file = "black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, - {file = "black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, - {file = "black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, - {file = "black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, - {file = "black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, - {file = "black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, - {file = "black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, + {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, + {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, + {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, + {file = "black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, + {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, + {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, + {file = "black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, + {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, + {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, + {file = "black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, + {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, + {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, + {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, + {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, + {file = "black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, + {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, + {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, + {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, + {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, + {file = "black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, + {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, + {file = "black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, + {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, ] certifi = [ {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, diff --git a/pyproject.toml b/pyproject.toml index b11e157a..bdb56adf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = "^10.3" certifi = "^2022.5.18" [tool.poetry.dev-dependencies] -black = "^22.6.0" +black = "^22.8.0" mypy = "^0.971" types-urllib3 = "^1.26.23" Sphinx = "^5.1.1" From cadd01f946ae6f9289560d9da49c4a2f3df330de Mon Sep 17 00:00:00 2001 From: Aaron Itzkovitz <19159499+aitzkovitz@users.noreply.github.com> Date: Thu, 8 Sep 2022 12:08:05 -0400 Subject: [PATCH 163/448] Add Technical Indicator Endpoints (#284) * initial models * wip * restore websocket files * restore examples to master * touch up from_dict methods, add tests * individual result types * lint * remove multiplier per spec change * rename mock to account for spec change in test * fix typos in method descriptions * rename the base instead of re-export * update rest spec Co-authored-by: danielatpolygonio <93154633+danielatpolygonio@users.noreply.github.com> Co-authored-by: Vera Harless <53271741+morningvera@users.noreply.github.com> --- .polygon/rest.json | 5528 ++++++++++++++++- polygon/rest/__init__.py | 2 + polygon/rest/indicators.py | 221 + polygon/rest/models/__init__.py | 19 +- polygon/rest/models/common.py | 7 + polygon/rest/models/indicators.py | 83 + ...393873000×tamp.gte=1477972800000.json | 27 + ...ong_window=20×tamp.gt=2022-08-09.json | 59 + ...adjusted=True×tamp.gt=2022-08-18.json | 159 + ...amp=1483958600&expand_underlying=True.json | 46 + test_rest/test_indicators.py | 206 + 11 files changed, 6320 insertions(+), 37 deletions(-) create mode 100644 polygon/rest/indicators.py create mode 100644 polygon/rest/models/indicators.py create mode 100644 test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=False×tamp.lte=1478393873000×tamp.gte=1477972800000.json create mode 100644 test_rest/mocks/v1/indicators/macd/SPY&signal_window=10&long_window=20×tamp.gt=2022-08-09.json create mode 100644 test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=True×tamp.gt=2022-08-18.json create mode 100644 test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=True.json create mode 100644 test_rest/test_indicators.py diff --git a/.polygon/rest.json b/.polygon/rest.json index 952f2e95..51c5c10d 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -5100,6 +5100,5218 @@ } } }, + "/v1/indicators/ema/{cryptoTicker}": { + "get": { + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "CryptoEMA", + "parameters": [ + { + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "X:BTC-USD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/ema/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "EMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Exponential Moving Average (EMA) data for each period." + } + }, + "summary": "Exponential Moving Average (EMA)", + "tags": [ + "crpyto:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/ema/{fxTicker}": { + "get": { + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "ForexEMA", + "parameters": [ + { + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "C:EUR-USD", + "in": "path", + "name": "fxTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/ema/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "EMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Exponential Moving Average (EMA) data for each period." + } + }, + "summary": "Exponential Moving Average (EMA)", + "tags": [ + "fx:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/ema/{optionsTicker}": { + "get": { + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "OptionsEMA", + "parameters": [ + { + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "O:SPY241220P00720000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/ema/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "EMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Exponential Moving Average (EMA) data for each period." + } + }, + "summary": "Exponential Moving Average (EMA)", + "tags": [ + "options:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/ema/{stockTicker}": { + "get": { + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "EMA", + "parameters": [ + { + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "AAPL", + "in": "path", + "name": "stockTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/ema/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "EMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Exponential Moving Average (EMA) data for each period." + } + }, + "summary": "Exponential Moving Average (EMA)", + "tags": [ + "stocks:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, + "/v1/indicators/macd/{cryptoTicker}": { + "get": { + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "CryptoMACD", + "parameters": [ + { + "description": "The ticker symbol for which to get MACD data.", + "example": "X:BTC-USD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "The short window size used to calculate MACD data.", + "example": 12, + "in": "query", + "name": "short_window", + "schema": { + "default": 12, + "type": "integer" + } + }, + { + "description": "The long window size used to calculate MACD data.", + "example": 26, + "in": "query", + "name": "long_window", + "schema": { + "default": 26, + "type": "integer" + } + }, + { + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate MACD data. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "histogram": 38.3801666667, + "signal": 106.9811666667, + "timestamp": 1517562000016, + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "MACDResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Moving Average Convergence/Divergence (MACD) data for each period." + } + }, + "summary": "Moving Average Convergence/Divergence (MACD)", + "tags": [ + "crypto:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/macd/{fxTicker}": { + "get": { + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "ForexMACD", + "parameters": [ + { + "description": "The ticker symbol for which to get MACD data.", + "example": "C:EUR-USD", + "in": "path", + "name": "fxTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The short window size used to calculate MACD data.", + "example": 12, + "in": "query", + "name": "short_window", + "schema": { + "default": 12, + "type": "integer" + } + }, + { + "description": "The long window size used to calculate MACD data.", + "example": 26, + "in": "query", + "name": "long_window", + "schema": { + "default": 26, + "type": "integer" + } + }, + { + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/macd/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "histogram": 38.3801666667, + "signal": 106.9811666667, + "timestamp": 1517562000016, + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "MACDResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Moving Average Convergence/Divergence (MACD) data for each period." + } + }, + "summary": "Moving Average Convergence/Divergence (MACD)", + "tags": [ + "fx:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/macd/{optionsTicker}": { + "get": { + "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", + "operationId": "OptionsMACD", + "parameters": [ + { + "description": "The ticker symbol for which to get MACD data.", + "example": "O:SPY241220P00720000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The short window size used to calculate MACD data.", + "example": 12, + "in": "query", + "name": "short_window", + "schema": { + "default": 12, + "type": "integer" + } + }, + { + "description": "The long window size used to calculate MACD data.", + "example": 26, + "in": "query", + "name": "long_window", + "schema": { + "default": 26, + "type": "integer" + } + }, + { + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/macd/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "histogram": 38.3801666667, + "signal": 106.9811666667, + "timestamp": 1517562000016, + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "MACDResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Moving Average Convergence/Divergence (MACD) data for each period." + } + }, + "summary": "Moving Average Convergence/Divergence (MACD)", + "tags": [ + "options:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/macd/{stockTicker}": { + "get": { + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "MACD", + "parameters": [ + { + "description": "The ticker symbol for which to get MACD data.", + "example": "AAPL", + "in": "path", + "name": "stockTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The short window size used to calculate MACD data.", + "example": 12, + "in": "query", + "name": "short_window", + "schema": { + "default": 12, + "type": "integer" + } + }, + { + "description": "The long window size used to calculate MACD data.", + "example": 26, + "in": "query", + "name": "long_window", + "schema": { + "default": 26, + "type": "integer" + } + }, + { + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/macd/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "histogram": 38.3801666667, + "signal": 106.9811666667, + "timestamp": 1517562000016, + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "MACDResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Moving Average Convergence/Divergence (MACD) data for each period." + } + }, + "summary": "Moving Average Convergence/Divergence (MACD)", + "tags": [ + "stocks:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, + "/v1/indicators/rsi/{cryptoTicker}": { + "get": { + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "CryptoRSI", + "parameters": [ + { + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "X:BTC-USD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "The window size used to calculate the relative strength index (RSI). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 14, + "in": "query", + "name": "window", + "schema": { + "default": 14, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "RSIResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Relative strength index data for each period." + } + }, + "summary": "Relative Strength Index (RSI)", + "tags": [ + "crpyto:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/rsi/{fxTicker}": { + "get": { + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "ForexRSI", + "parameters": [ + { + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "C:EUR-USD", + "in": "path", + "name": "fxTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the relative strength index (RSI).", + "example": 14, + "in": "query", + "name": "window", + "schema": { + "default": 14, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/rsi/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "RSIResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Relative strength index data for each period." + } + }, + "summary": "Relative Strength Index (RSI)", + "tags": [ + "fx:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/rsi/{optionsTicker}": { + "get": { + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "OptionsRSI", + "parameters": [ + { + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "O:SPY241220P00720000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the relative strength index (RSI).", + "example": 14, + "in": "query", + "name": "window", + "schema": { + "default": 14, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/rsi/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "RSIResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Relative Strength Index (RSI) data for each period." + } + }, + "summary": "Relative Strength Index (RSI)", + "tags": [ + "options:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/rsi/{stockTicker}": { + "get": { + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "RSI", + "parameters": [ + { + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "AAPL", + "in": "path", + "name": "stockTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the relative strength index (RSI).", + "example": 14, + "in": "query", + "name": "window", + "schema": { + "default": 14, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/rsi/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "RSIResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Relative strength Index data for each period." + } + }, + "summary": "Relative Strength Index (RSI)", + "tags": [ + "stocks:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, + "/v1/indicators/sma/{cryptoTicker}": { + "get": { + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "CryptoSMA", + "parameters": [ + { + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "X:BTC-USD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "crpyto:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/sma/{fxTicker}": { + "get": { + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "ForexSMA", + "parameters": [ + { + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "C:EUR-USD", + "in": "path", + "name": "fxTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/sma/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "fx:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/sma/{optionsTicker}": { + "get": { + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "OptionsSMA", + "parameters": [ + { + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "O:SPY241220P00720000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/sma/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "options:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/sma/{stockTicker}": { + "get": { + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "SMA", + "parameters": [ + { + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "AAPL", + "in": "path", + "name": "stockTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "stocks:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, "/v1/last/crypto/{from}/{to}": { "get": { "description": "Get the last trade tick for a cryptocurrency pair.", @@ -14981,7 +20193,15 @@ "LT", "ST" ], - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } } }, { @@ -15281,15 +20501,39 @@ "properties": { "cash_amount": { "description": "The cash amount of the dividend per share owned.", - "type": "number" + "type": "number", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "currency": { "description": "The currency in which the dividend is paid.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "declaration_date": { "description": "The date that the dividend was announced.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "dividend_type": { "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", @@ -15299,27 +20543,75 @@ "LT", "ST" ], - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "ex_dividend_date": { "description": "The date that the stock first trades without the dividend, determined by the exchange.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "frequency": { "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", - "type": "integer" + "type": "integer", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "pay_date": { "description": "The date that the dividend is paid out.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "record_date": { "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "ticker": { "description": "The ticker symbol of the dividend.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } } }, "required": [ @@ -15401,15 +20693,39 @@ "properties": { "cash_amount": { "description": "The cash amount of the dividend per share owned.", - "type": "number" + "type": "number", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "currency": { "description": "The currency in which the dividend is paid.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "declaration_date": { "description": "The date that the dividend was announced.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "dividend_type": { "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", @@ -15419,27 +20735,75 @@ "LT", "ST" ], - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "ex_dividend_date": { "description": "The date that the stock first trades without the dividend, determined by the exchange.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "frequency": { "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", - "type": "integer" + "type": "integer", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "pay_date": { "description": "The date that the dividend is paid out.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "record_date": { "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "ticker": { "description": "The ticker symbol of the dividend.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } } }, "required": [ @@ -15477,15 +20841,39 @@ "properties": { "cash_amount": { "description": "The cash amount of the dividend per share owned.", - "type": "number" + "type": "number", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "currency": { "description": "The currency in which the dividend is paid.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "declaration_date": { "description": "The date that the dividend was announced.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "dividend_type": { "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", @@ -15495,27 +20883,75 @@ "LT", "ST" ], - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "ex_dividend_date": { "description": "The date that the stock first trades without the dividend, determined by the exchange.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "frequency": { "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", - "type": "integer" + "type": "integer", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "pay_date": { "description": "The date that the dividend is paid out.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "record_date": { "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } }, "ticker": { "description": "The ticker symbol of the dividend.", - "type": "string" + "type": "string", + "x-polygon-go-field-tags": { + "tags": [ + { + "key": "binding", + "value": "required" + } + ] + } } }, "required": [ @@ -19693,6 +25129,15 @@ "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}", "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" ] + }, + { + "group": "Technical Indicators", + "paths": [ + "/v1/indicators/sma/{cryptoTicker}", + "/v1/indicators/ema/{cryptoTicker}", + "/v1/indicators/macd/{cryptoTicker}", + "/v1/indicators/rsi/{cryptoTicker}" + ] } ], "reference": [ @@ -19767,6 +25212,15 @@ "/v2/snapshot/locale/global/markets/forex/{direction}", "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" ] + }, + { + "group": "Technical Indicators", + "paths": [ + "/v1/indicators/sma/{fxTicker}", + "/v1/indicators/ema/{fxTicker}", + "/v1/indicators/macd/{fxTicker}", + "/v1/indicators/rsi/{fxTicker}" + ] } ], "reference": [ @@ -19835,6 +25289,15 @@ "/v3/snapshot/options/{underlyingAsset}/{optionContract}", "/v3/snapshot/options/{underlyingAsset}" ] + }, + { + "group": "Technical Indicators", + "paths": [ + "/v1/indicators/sma/{optionsTicker}", + "/v1/indicators/ema/{optionsTicker}", + "/v1/indicators/macd/{optionsTicker}", + "/v1/indicators/rsi/{optionsTicker}" + ] } ], "reference": [ @@ -19954,6 +25417,15 @@ "/v2/snapshot/locale/us/markets/stocks/{direction}", "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}" ] + }, + { + "group": "Technical Indicators", + "paths": [ + "/v1/indicators/sma/{stockTicker}", + "/v1/indicators/ema/{stockTicker}", + "/v1/indicators/macd/{stockTicker}", + "/v1/indicators/rsi/{stockTicker}" + ] } ], "reference": [ diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 13a29d6d..a7cdbf95 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -2,6 +2,7 @@ from .trades import TradesClient from .quotes import QuotesClient from .snapshot import SnapshotClient +from .indicators import IndicatorsClient from .reference import ( MarketsClient, TickersClient, @@ -32,6 +33,7 @@ class RESTClient( ConditionsClient, ExchangesClient, ContractsClient, + IndicatorsClient, ): def __init__( self, diff --git a/polygon/rest/indicators.py b/polygon/rest/indicators.py new file mode 100644 index 00000000..601eda71 --- /dev/null +++ b/polygon/rest/indicators.py @@ -0,0 +1,221 @@ +from polygon.rest.models.common import SeriesType +from polygon.rest.models.indicators import ( + SMAIndicatorResults, + EMAIndicatorResults, + RSIIndicatorResults, + MACDIndicatorResults, +) +from .base import BaseClient +from typing import Optional, Any, Dict, List, Union +from .models import Order +from urllib3 import HTTPResponse +from datetime import datetime, date + + +class IndicatorsClient(BaseClient): + def get_sma( + self, + ticker: str, + timestamp: Optional[Union[str, int, datetime, date]] = None, + timestamp_lt: Optional[Union[str, int, datetime, date]] = None, + timestamp_lte: Optional[Union[str, int, datetime, date]] = None, + timestamp_gt: Optional[Union[str, int, datetime, date]] = None, + timestamp_gte: Optional[Union[str, int, datetime, date]] = None, + timespan: Optional[str] = None, + window: Optional[int] = None, + adjusted: Optional[bool] = None, + expand_underlying: Optional[bool] = None, + order: Optional[Union[str, Order]] = None, + params: Optional[Dict[str, Any]] = None, + series_type: Optional[Union[str, SeriesType]] = None, + raw: bool = False, + ) -> Union[SMAIndicatorResults, HTTPResponse]: + """ + Get SMA values for a given ticker over a given range with the specified parameters + + :param ticker: The ticker symbol + :param timespan: The size of the underlying aggregate time window + :param window: The window size used to calculate the simple moving average. i.e. a window size of 10 with daily + aggregates would result in a 10-day moving average + :param timestamp: Either a date with the format YYYY-MM-DD or a millisecond timestamp. + :param timestamp_lt: Timestamp less than + :param timestamp_lte: Timestamp less than or equal to + :param timestamp_gt: Timestamp greater than + :param timestamp_gte: Timestamp greater than or equal to + :param adjusted: Whether the underlying aggregates are adjusted for splits. By default, the aggregates used to + calculate this indicator are adjusted. Set this as false to get results that are NOT adjusted for splits + :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response + :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), + desc will return results in descending order (newest at the top).The end of the aggregate time window + :param params: Any additional query params + :param series_type: The price in the aggregate which will be used to calculate the simple moving average + i.e. 'close' will result in using close prices to calculate the simple moving average + :param raw: Return raw object instead of results object + :return: SingleIndicatorResults + """ + + url = f"/v1/indicators/sma/{ticker}" + + return self._get( + path=url, + params=self._get_params(self.get_sma, locals()), + result_key="results", + deserializer=SMAIndicatorResults.from_dict, + raw=raw, + ) + + def get_ema( + self, + ticker: str, + timestamp: Optional[Union[str, int, datetime, date]] = None, + timestamp_lt: Optional[Union[str, int, datetime, date]] = None, + timestamp_lte: Optional[Union[str, int, datetime, date]] = None, + timestamp_gt: Optional[Union[str, int, datetime, date]] = None, + timestamp_gte: Optional[Union[str, int, datetime, date]] = None, + timespan: Optional[str] = None, + window: Optional[int] = None, + adjusted: Optional[bool] = None, + expand_underlying: Optional[bool] = None, + order: Optional[Union[str, Order]] = None, + params: Optional[Dict[str, Any]] = None, + series_type: Optional[Union[str, SeriesType]] = None, + raw: bool = False, + ) -> Union[EMAIndicatorResults, HTTPResponse]: + """ + Get EMA values for a given ticker over a given range with the specified parameters + + :param ticker: The ticker symbol + :param timespan: The size of the underlying aggregate time window + :param window: The window size used to calculate the exponential moving average. i.e. a window size of 10 with daily + aggregates would result in a 10-day moving average + :param timestamp: Either a date with the format YYYY-MM-DD or a millisecond timestamp. + :param timestamp_lt: Timestamp less than + :param timestamp_lte: Timestamp less than or equal to + :param timestamp_gt: Timestamp greater than + :param timestamp_gte: Timestamp greater than or equal to + :param adjusted: Whether the underlying aggregates are adjusted for splits. By default, the aggregates used to + calculate this indicator are adjusted. Set this as false to get results that are NOT adjusted for splits + :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response + :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), + desc will return results in descending order (newest at the top).The end of the aggregate time window + :param params: Any additional query params + :param series_type: The price in the aggregate which will be used to calculate the simple moving average + i.e. 'close' will result in using close prices to calculate the simple moving average + :param raw: Return raw object instead of results object + :return: SingleIndicatorResults + """ + + url = f"/v1/indicators/ema/{ticker}" + + return self._get( + path=url, + params=self._get_params(self.get_ema, locals()), + result_key="results", + deserializer=EMAIndicatorResults.from_dict, + raw=raw, + ) + + def get_rsi( + self, + ticker: str, + timestamp: Optional[Union[str, int, datetime, date]] = None, + timestamp_lt: Optional[Union[str, int, datetime, date]] = None, + timestamp_lte: Optional[Union[str, int, datetime, date]] = None, + timestamp_gt: Optional[Union[str, int, datetime, date]] = None, + timestamp_gte: Optional[Union[str, int, datetime, date]] = None, + timespan: Optional[str] = None, + window: Optional[int] = None, + adjusted: Optional[bool] = None, + expand_underlying: Optional[bool] = None, + order: Optional[Union[str, Order]] = None, + params: Optional[Dict[str, Any]] = None, + series_type: Optional[Union[str, SeriesType]] = None, + raw: bool = False, + ) -> Union[RSIIndicatorResults, HTTPResponse]: + """ + Get RSI values for a given ticker over a given range with the specified parameters + + :param ticker: The ticker symbol + :param timespan: The size of the underlying aggregate time window + :param window: The window size used to calculate the simple moving average. i.e. a window size of 10 with daily + aggregates would result in a 10-day moving average + :param timestamp: Either a date with the format YYYY-MM-DD or a millisecond timestamp. + :param timestamp_lt: Timestamp less than + :param timestamp_lte: Timestamp less than or equal to + :param timestamp_gt: Timestamp greater than + :param timestamp_gte: Timestamp greater than or equal to + :param adjusted: Whether the underlying aggregates are adjusted for splits. By default, the aggregates used to + calculate this indicator are adjusted. Set this as false to get results that are NOT adjusted for splits + :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response + :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), + desc will return results in descending order (newest at the top).The end of the aggregate time window + :param params: Any additional query params + :param series_type: The price in the aggregate which will be used to calculate the simple moving average + i.e. 'close' will result in using close prices to calculate the simple moving average + :param raw: Return raw object instead of results object + :return: SingleIndicatorResults + """ + + url = f"/v1/indicators/rsi/{ticker}" + + return self._get( + path=url, + params=self._get_params(self.get_rsi, locals()), + result_key="results", + deserializer=RSIIndicatorResults.from_dict, + raw=raw, + ) + + def get_macd( + self, + ticker: str, + timestamp: Optional[Union[str, int, datetime, date]] = None, + timestamp_lt: Optional[Union[str, int, datetime, date]] = None, + timestamp_lte: Optional[Union[str, int, datetime, date]] = None, + timestamp_gt: Optional[Union[str, int, datetime, date]] = None, + timestamp_gte: Optional[Union[str, int, datetime, date]] = None, + timespan: Optional[str] = None, + short_window: Optional[int] = None, + long_window: Optional[int] = None, + signal_window: Optional[int] = None, + adjusted: Optional[bool] = None, + expand_underlying: Optional[bool] = None, + order: Optional[Union[str, Order]] = None, + params: Optional[Dict[str, Any]] = None, + series_type: Optional[Union[str, SeriesType]] = None, + raw: bool = False, + ) -> Union[MACDIndicatorResults, HTTPResponse]: + """ + Get MACD values for a given ticker over a given range with the specified parameters + + :param ticker: The ticker symbol + :param timespan: The size of the underlying aggregate time window + :param short_window: The short window size used to calculate the MACD data + :param long_window: The long window size used to calculate the MACD data + :param signal_window: The window size used to calculate the MACD signal line + :param timestamp: Either a date with the format YYYY-MM-DD or a millisecond timestamp. + :param timestamp_lt: Timestamp less than + :param timestamp_lte: Timestamp less than or equal to + :param timestamp_gt: Timestamp greater than + :param timestamp_gte: Timestamp greater than or equal to + :param adjusted: Whether the underlying aggregates are adjusted for splits. By default, the aggregates used to + calculate this indicator are adjusted. Set this as false to get results that are NOT adjusted for splits + :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response + :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), + desc will return results in descending order (newest at the top).The end of the aggregate time window + :param params: Any additional query params + :param series_type: The price in the aggregate which will be used to calculate the simple moving average + i.e. 'close' will result in using close prices to calculate the simple moving average + :param raw: Return raw object instead of results object + :return: MACDIndicatorResults + """ + + url = f"/v1/indicators/macd/{ticker}" + + return self._get( + path=url, + params=self._get_params(self.get_macd, locals()), + result_key="results", + deserializer=MACDIndicatorResults.from_dict, + raw=raw, + ) diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index 8fca108c..c76311bb 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -1,13 +1,14 @@ -from .common import * from .aggs import * -from .trades import * -from .quotes import * -from .markets import * -from .tickers import * -from .splits import * -from .dividends import * +from .common import * from .conditions import * +from .contracts import * +from .dividends import * from .exchanges import * -from .snapshot import * from .financials import * -from .contracts import * +from .indicators import * +from .markets import * +from .quotes import * +from .snapshot import * +from .splits import * +from .tickers import * +from .trades import * diff --git a/polygon/rest/models/common.py b/polygon/rest/models/common.py index b4613e1b..b371c1de 100644 --- a/polygon/rest/models/common.py +++ b/polygon/rest/models/common.py @@ -85,3 +85,10 @@ class Precision(Enum): TWO = 2 THREE = 3 FOUR = 4 + + +class SeriesType(Enum): + OPEN = "open" + CLOSE = "close" + HIGH = "high" + LOW = "low" diff --git a/polygon/rest/models/indicators.py b/polygon/rest/models/indicators.py new file mode 100644 index 00000000..81252477 --- /dev/null +++ b/polygon/rest/models/indicators.py @@ -0,0 +1,83 @@ +from sqlite3 import Timestamp +from typing import Optional, Any, Dict, List, Union +from ...modelclass import modelclass +from .aggs import Agg + + +@modelclass +class IndicatorValue: + "Contains one datum for indicators with a single value." + timestamp: Optional[int] = None + value: Optional[float] = None + + @staticmethod + def from_dict(d): + return IndicatorValue( + timestamp=d.get("timestamp", None), + value=d.get("value", None), + ) + + +@modelclass +class MACDIndicatorValue: + "Contains one datum for all MACD values." + timestamp: Optional[int] = None + value: Optional[float] = None + signal: Optional[float] = None + histogram: Optional[float] = None + + @staticmethod + def from_dict(d): + return MACDIndicatorValue( + timestamp=d.get("timestamp", None), + value=d.get("value", None), + signal=d.get("histogram", None), + histogram=d.get("signal", None), + ) + + +@modelclass +class IndicatorUnderlying: + "Contains the URL to call to get the aggs used for building the indicator." + url: Optional[str] = None + aggregates: Optional[List[Agg]] = None + + @staticmethod + def from_dict(d): + return IndicatorUnderlying( + url=d.get("url", None), + aggregates=[Agg.from_dict(a) for a in d.get("aggregates", [])], + ) + + +@modelclass +class SingleIndicatorResults: + "Contains indicator values and Underlying." + values: Optional[List[IndicatorValue]] = None + underlying: Optional[IndicatorUnderlying] = None + + @staticmethod + def from_dict(d): + return SingleIndicatorResults( + values=[IndicatorValue.from_dict(v) for v in (d.get("values", []))], + underlying=IndicatorUnderlying.from_dict(d.get("underlying", None)), + ) + + +SMAIndicatorResults = SingleIndicatorResults +EMAIndicatorResults = SingleIndicatorResults +RSIIndicatorResults = SingleIndicatorResults + + +@modelclass +class MACDIndicatorResults: + "Contains indicator values and Underlying." + values: Optional[List[MACDIndicatorValue]] = None + underlying: Optional[IndicatorUnderlying] = None + + @staticmethod + def from_dict(d): + return MACDIndicatorResults( + values=[MACDIndicatorValue.from_dict(v) for v in (d.get("values", []))], + underlying=IndicatorUnderlying.from_dict(d.get("underlying", None)), + ) diff --git a/test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=False×tamp.lte=1478393873000×tamp.gte=1477972800000.json b/test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=False×tamp.lte=1478393873000×tamp.gte=1477972800000.json new file mode 100644 index 00000000..333016cb --- /dev/null +++ b/test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=False×tamp.lte=1478393873000×tamp.gte=1477972800000.json @@ -0,0 +1,27 @@ +{ + "results": { + "underlying": { + "url": "http://localhost:8081/v2/aggs/ticker/AAPL/range/1/day/1477368000000/1478393873000?adjusted=false\u0026limit=50000\u0026sort=desc" + }, + "values": [ + { + "timestamp": 1478232000000, + "value": 110.96883950617286 + }, + { + "timestamp": 1478145600000, + "value": 112.03325925925927 + }, + { + "timestamp": 1478059200000, + "value": 113.1348888888889 + }, + { + "timestamp": 1477972800000, + "value": 113.90733333333334 + } + ] + }, + "status": "OK", + "request_id": "aaa162ba-e0b6-4c4a-aa05-dcac472aea71" +} \ No newline at end of file diff --git a/test_rest/mocks/v1/indicators/macd/SPY&signal_window=10&long_window=20×tamp.gt=2022-08-09.json b/test_rest/mocks/v1/indicators/macd/SPY&signal_window=10&long_window=20×tamp.gt=2022-08-09.json new file mode 100644 index 00000000..8c44e7ca --- /dev/null +++ b/test_rest/mocks/v1/indicators/macd/SPY&signal_window=10&long_window=20×tamp.gt=2022-08-09.json @@ -0,0 +1,59 @@ +{ + "results": { + "underlying": { + "url": "http://localhost:8081/v2/aggs/ticker/SPY/range/1/day/1657670400000/1660926503659?limit=50000&sort=desc" + }, + "values": [ + { + "timestamp": 1660881600000, + "value": 6.912856964275647, + "signal": 49.504484615884834, + "histogram": -42.59162765160919 + }, + { + "timestamp": 1660795200000, + "value": 7.509881940545313, + "signal": 58.96929076068688, + "histogram": -51.45940882014157 + }, + { + "timestamp": 1660708800000, + "value": 7.734132135566654, + "signal": 70.40471494294057, + "histogram": -62.67058280737392 + }, + { + "timestamp": 1660622400000, + "value": 7.973958808765531, + "signal": 84.331511122357, + "histogram": -76.35755231359147 + }, + { + "timestamp": 1660536000000, + "value": 7.90112075397235, + "signal": 101.2998560809329, + "histogram": -93.39873532696055 + }, + { + "timestamp": 1660276800000, + "value": 7.719066821080332, + "signal": 122.05513059803525, + "histogram": -114.33606377695492 + }, + { + "timestamp": 1660190400000, + "value": 7.468267821253335, + "signal": 147.4631447706919, + "histogram": -139.99487694943858 + }, + { + "timestamp": 1660104000000, + "value": 7.542041992364375, + "signal": 178.5731174261227, + "histogram": -171.03107543375833 + } + ] + }, + "status": "OK", + "request_id": "b5163e30-64c6-4298-8217-aab3152ea79f" +} diff --git a/test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=True×tamp.gt=2022-08-18.json b/test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=True×tamp.gt=2022-08-18.json new file mode 100644 index 00000000..5d434057 --- /dev/null +++ b/test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=True×tamp.gt=2022-08-18.json @@ -0,0 +1,159 @@ +{ + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/15/minute/1660521600000/1660928746001?limit=50000&sort=desc" + }, + "values": [ + { + "timestamp": 1660928400000, + "value": 172.46568754351864 + }, + { + "timestamp": 1660927500000, + "value": 172.43049675862588 + }, + { + "timestamp": 1660926600000, + "value": 172.39791747006018 + }, + { + "timestamp": 1660925700000, + "value": 172.37032983532967 + }, + { + "timestamp": 1660924800000, + "value": 172.39246981799596 + }, + { + "timestamp": 1660923900000, + "value": 172.4199719041008 + }, + { + "timestamp": 1660923000000, + "value": 172.4462847361114 + }, + { + "timestamp": 1660922100000, + "value": 172.48168312938628 + }, + { + "timestamp": 1660921200000, + "value": 172.5318603009006 + }, + { + "timestamp": 1660920300000, + "value": 172.60100349046908 + }, + { + "timestamp": 1660919400000, + "value": 172.68216175262373 + }, + { + "timestamp": 1660918500000, + "value": 172.7343682528999 + }, + { + "timestamp": 1660917600000, + "value": 172.7937754374157 + }, + { + "timestamp": 1660916700000, + "value": 172.8239623255647 + }, + { + "timestamp": 1660915800000, + "value": 172.82964257036102 + }, + { + "timestamp": 1660914900000, + "value": 172.8215102093464 + }, + { + "timestamp": 1660914000000, + "value": 172.7816691787513 + }, + { + "timestamp": 1660913100000, + "value": 172.79237119756723 + }, + { + "timestamp": 1660912200000, + "value": 172.8094629025743 + }, + { + "timestamp": 1660911300000, + "value": 172.82942741863474 + }, + { + "timestamp": 1660910400000, + "value": 172.85463030480682 + }, + { + "timestamp": 1660909500000, + "value": 172.88038086320753 + }, + { + "timestamp": 1660908600000, + "value": 172.91094726986097 + }, + { + "timestamp": 1660907700000, + "value": 172.95420487721478 + }, + { + "timestamp": 1660906800000, + "value": 172.99148960113214 + }, + { + "timestamp": 1660905900000, + "value": 173.03796219072498 + }, + { + "timestamp": 1660905000000, + "value": 173.0998529476434 + }, + { + "timestamp": 1660904100000, + "value": 173.17457431055323 + }, + { + "timestamp": 1660903200000, + "value": 173.23505581692726 + }, + { + "timestamp": 1660902300000, + "value": 173.3166406397617 + }, + { + "timestamp": 1660901400000, + "value": 173.3920764965787 + }, + { + "timestamp": 1660900500000, + "value": 173.4628213909554 + }, + { + "timestamp": 1660899600000, + "value": 173.5494341689507 + }, + { + "timestamp": 1660898700000, + "value": 173.63884829199816 + }, + { + "timestamp": 1660897800000, + "value": 173.73872705957692 + }, + { + "timestamp": 1660896900000, + "value": 173.8480667500587 + }, + { + "timestamp": 1660896000000, + "value": 173.97207377638065 + } + ] + }, + "status": "OK", + "request_id": "e0ee044f-88e9-4b18-a44e-a64923ac1c39" +} diff --git a/test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=True.json b/test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=True.json new file mode 100644 index 00000000..79a7e788 --- /dev/null +++ b/test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=True.json @@ -0,0 +1,46 @@ +{ + "status": "OK", + "request_id": "6a7e466379af0a71039d60cc78e72282", + "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZ", + "results": { + "values":[ + { + "timestamp": 1578027600, + "value": 141.34 + }, + { + "timestamp": 1578035600, + "value": 139.33 + }, + { + "timestamp": 1578049600, + "value": 138.22 + } + ], + "underlying": { + "aggregates": [ + { + "v": 135647456, + "vw": 74.6099, + "o": 74.06, + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "t": 1577941200000, + "n": 1 + }, + { + "v": 146535512, + "vw": 74.7026, + "o": 74.2875, + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "t": 1578027600000, + "n": 1 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/1626912000000/1629590400000?adjusted=true&limit=50000&sort=desc" + } + } +} \ No newline at end of file diff --git a/test_rest/test_indicators.py b/test_rest/test_indicators.py new file mode 100644 index 00000000..ce477fbf --- /dev/null +++ b/test_rest/test_indicators.py @@ -0,0 +1,206 @@ +from base import BaseTest +from polygon.rest.models.aggs import Agg +from polygon.rest.models.indicators import ( + SingleIndicatorResults, + SMAIndicatorResults, + EMAIndicatorResults, + RSIIndicatorResults, + MACDIndicatorResults, + IndicatorValue, + MACDIndicatorValue, + IndicatorUnderlying, +) + + +class IndicatorsTest(BaseTest): + def test_get_sma_indicators(self): + indicators = self.c.get_sma( + ticker="AAPL", + window=30, + timespan="quarter", + timestamp="1483958600", + expand_underlying=True, + ) + expected = SMAIndicatorResults( + values=[ + IndicatorValue(timestamp=1578027600, value=141.34), + IndicatorValue(timestamp=1578035600, value=139.33), + IndicatorValue(timestamp=1578049600, value=138.22), + ], + underlying=IndicatorUnderlying( + url="https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/1626912000000/1629590400000?adjusted=true&limit=50000&sort=desc", + aggregates=[ + Agg( + open=74.06, + high=75.15, + low=73.7975, + close=75.0875, + volume=135647456, + vwap=74.6099, + timestamp=1577941200000, + transactions=1, + otc=None, + ), + Agg( + open=74.2875, + high=75.145, + low=74.125, + close=74.3575, + volume=146535512, + vwap=74.7026, + timestamp=1578027600000, + transactions=1, + otc=None, + ), + ], + ), + ) + self.assertEqual(indicators, expected) + + def test_get_ema_indicators(self): + indicators = self.c.get_ema( + ticker="AAPL", + timestamp_lte="1478393873000", + window=5, + adjusted=False, + timestamp_gte="1477972800000", + ) + + expected = EMAIndicatorResults( + values=[ + IndicatorValue(timestamp=1478232000000, value=110.96883950617286), + IndicatorValue(timestamp=1478145600000, value=112.03325925925927), + IndicatorValue(timestamp=1478059200000, value=113.1348888888889), + IndicatorValue(timestamp=1477972800000, value=113.90733333333334), + ], + underlying=IndicatorUnderlying( + url="http://localhost:8081/v2/aggs/ticker/AAPL/range/1/day/1477368000000/1478393873000?adjusted=false&limit=50000&sort=desc", + aggregates=[], + ), + ) + + self.assertEqual(indicators, expected) + + def test_get_macd_indicators(self): + indicators = self.c.get_macd( + ticker="SPY", + signal_window=10, + long_window=20, + timestamp_gt="2022-08-09", + ) + + expected = MACDIndicatorResults( + values=[ + MACDIndicatorValue( + timestamp=1660881600000, + value=6.912856964275647, + signal=-42.59162765160919, + histogram=49.504484615884834, + ), + MACDIndicatorValue( + timestamp=1660795200000, + value=7.509881940545313, + signal=-51.45940882014157, + histogram=58.96929076068688, + ), + MACDIndicatorValue( + timestamp=1660708800000, + value=7.734132135566654, + signal=-62.67058280737392, + histogram=70.40471494294057, + ), + MACDIndicatorValue( + timestamp=1660622400000, + value=7.973958808765531, + signal=-76.35755231359147, + histogram=84.331511122357, + ), + MACDIndicatorValue( + timestamp=1660536000000, + value=7.90112075397235, + signal=-93.39873532696055, + histogram=101.2998560809329, + ), + MACDIndicatorValue( + timestamp=1660276800000, + value=7.719066821080332, + signal=-114.33606377695492, + histogram=122.05513059803525, + ), + MACDIndicatorValue( + timestamp=1660190400000, + value=7.468267821253335, + signal=-139.99487694943858, + histogram=147.4631447706919, + ), + MACDIndicatorValue( + timestamp=1660104000000, + value=7.542041992364375, + signal=-171.03107543375833, + histogram=178.5731174261227, + ), + ], + underlying=IndicatorUnderlying( + url="http://localhost:8081/v2/aggs/ticker/SPY/range/1/day/1657670400000/1660926503659?limit=50000&sort=desc", + aggregates=[], + ), + ) + + self.assertEqual(indicators, expected) + + def test_get_rsi_indicators(self): + indicators = self.c.get_rsi( + ticker="AAPL", + window=20, + timespan="minute", + adjusted=True, + timestamp_gt="2022-08-18", + ) + + expected = RSIIndicatorResults( + values=[ + IndicatorValue(timestamp=1660928400000, value=172.46568754351864), + IndicatorValue(timestamp=1660927500000, value=172.43049675862588), + IndicatorValue(timestamp=1660926600000, value=172.39791747006018), + IndicatorValue(timestamp=1660925700000, value=172.37032983532967), + IndicatorValue(timestamp=1660924800000, value=172.39246981799596), + IndicatorValue(timestamp=1660923900000, value=172.4199719041008), + IndicatorValue(timestamp=1660923000000, value=172.4462847361114), + IndicatorValue(timestamp=1660922100000, value=172.48168312938628), + IndicatorValue(timestamp=1660921200000, value=172.5318603009006), + IndicatorValue(timestamp=1660920300000, value=172.60100349046908), + IndicatorValue(timestamp=1660919400000, value=172.68216175262373), + IndicatorValue(timestamp=1660918500000, value=172.7343682528999), + IndicatorValue(timestamp=1660917600000, value=172.7937754374157), + IndicatorValue(timestamp=1660916700000, value=172.8239623255647), + IndicatorValue(timestamp=1660915800000, value=172.82964257036102), + IndicatorValue(timestamp=1660914900000, value=172.8215102093464), + IndicatorValue(timestamp=1660914000000, value=172.7816691787513), + IndicatorValue(timestamp=1660913100000, value=172.79237119756723), + IndicatorValue(timestamp=1660912200000, value=172.8094629025743), + IndicatorValue(timestamp=1660911300000, value=172.82942741863474), + IndicatorValue(timestamp=1660910400000, value=172.85463030480682), + IndicatorValue(timestamp=1660909500000, value=172.88038086320753), + IndicatorValue(timestamp=1660908600000, value=172.91094726986097), + IndicatorValue(timestamp=1660907700000, value=172.95420487721478), + IndicatorValue(timestamp=1660906800000, value=172.99148960113214), + IndicatorValue(timestamp=1660905900000, value=173.03796219072498), + IndicatorValue(timestamp=1660905000000, value=173.0998529476434), + IndicatorValue(timestamp=1660904100000, value=173.17457431055323), + IndicatorValue(timestamp=1660903200000, value=173.23505581692726), + IndicatorValue(timestamp=1660902300000, value=173.3166406397617), + IndicatorValue(timestamp=1660901400000, value=173.3920764965787), + IndicatorValue(timestamp=1660900500000, value=173.4628213909554), + IndicatorValue(timestamp=1660899600000, value=173.5494341689507), + IndicatorValue(timestamp=1660898700000, value=173.63884829199816), + IndicatorValue(timestamp=1660897800000, value=173.73872705957692), + IndicatorValue(timestamp=1660896900000, value=173.8480667500587), + IndicatorValue(timestamp=1660896000000, value=173.97207377638065), + ], + underlying=IndicatorUnderlying( + url="https://api.polygon.io/v2/aggs/ticker/AAPL/range/15/minute/1660521600000/1660928746001?limit=50000&sort=desc", + aggregates=[], + ), + ) + + self.assertEqual(indicators, expected) From fbaa3e67dbfcf642ce4fd5a1c698a8dcbd55aa1f Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Thu, 8 Sep 2022 15:35:23 -0400 Subject: [PATCH 164/448] update make rest spec (#298) --- .polygon/rest.json | 206 ++++++++++++++++++++++----------------------- .polygon/rest.py | 8 ++ Makefile | 2 +- 3 files changed, 112 insertions(+), 104 deletions(-) create mode 100644 .polygon/rest.py diff --git a/.polygon/rest.json b/.polygon/rest.json index 51c5c10d..2ed7b8c2 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -21,7 +21,7 @@ } }, "AggregateLimitMax50000": { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -232,7 +232,7 @@ "AskExchangeId": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -252,7 +252,7 @@ "BidExchangeId": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -313,7 +313,7 @@ "type": "string" }, "figi": { - "description": "The OpenFigi project guid for the symbol. (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://openfigi.com/\"\u003ehttps://openfigi.com/\u003c/a\u003e)", + "description": "The OpenFigi project guid for the symbol. (https://openfigi.com/)", "type": "string" }, "hq_address": { @@ -333,7 +333,7 @@ "type": "string" }, "lei": { - "description": "The Legal Entity Identifier (LEI) guid for the symbol. (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Legal_Entity_Identifier\"\u003ehttps://en.wikipedia.org/wiki/Legal_Entity_Identifier\u003c/a\u003e)", + "description": "The Legal Entity Identifier (LEI) guid for the symbol. (https://en.wikipedia.org/wiki/Legal_Entity_Identifier)", "type": "string" }, "listdate": { @@ -362,7 +362,7 @@ "type": "string" }, "sic": { - "description": "Standard Industrial Classification (SIC) id for the symbol. (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Standard_Industrial_Classification\"\u003ehttps://en.wikipedia.org/wiki/Legal_Entity_Identifier\u003c/a\u003e)", + "description": "Standard Industrial Classification (SIC) id for the symbol. (https://en.wikipedia.org/wiki/Legal_Entity_Identifier)", "type": "integer" }, "similar": { @@ -385,7 +385,7 @@ "type": "array" }, "type": { - "description": "The type or class of the security. (\u003ca alt=\"Full List of Ticker Types\" href=\"https://polygon.io/docs/stocks/get_v3_reference_tickers_types\"\u003eFull List of Ticker Types\u003c/a\u003e)", + "description": "The type or class of the security. (Full List of Ticker Types)", "type": "string" }, "updated": { @@ -403,7 +403,7 @@ "ConditionTypeMap": { "properties": { "condition": { - "description": "Polygon.io's mapping for condition codes. For more information, see our \u003ca href=\"https://polygon.io/glossary/us/stocks/trade-conditions\" alt=\"Trade Conditions Glossary\" target=\"_blank\"\u003eTrade Conditions Glossary\u003c/a\u003e.\n", + "description": "Polygon.io's mapping for condition codes. For more information, see our Trade Conditions Glossary.\n", "type": "string" } }, @@ -425,7 +425,7 @@ "items": { "properties": { "id": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "market": { @@ -553,7 +553,7 @@ "type": "integer" }, "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -577,7 +577,7 @@ "type": "array" }, "exchange": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" }, "price": { @@ -641,7 +641,7 @@ "type": "integer" }, "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -693,7 +693,7 @@ "type": "integer" }, "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -815,7 +815,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -824,7 +824,7 @@ { "properties": { "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } } @@ -945,7 +945,7 @@ "type": "number" }, "x": { - "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", "type": "object" } }, @@ -967,7 +967,7 @@ "type": "number" }, "x": { - "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", "type": "object" } }, @@ -1067,7 +1067,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -1076,7 +1076,7 @@ { "properties": { "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } } @@ -1210,14 +1210,14 @@ "type": "integer" }, "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, "type": "object" }, "CryptoTradeExchange": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" }, "Date": { @@ -1248,7 +1248,7 @@ "type": "string" }, "mic": { - "description": "The Market Identification Code or MIC as defined in ISO 10383 (\u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Market_Identifier_Code\"\u003ehttps://en.wikipedia.org/wiki/Market_Identifier_Code\u003c/a\u003e).", + "description": "The Market Identification Code or MIC as defined in ISO 10383 (https://en.wikipedia.org/wiki/Market_Identifier_Code).", "type": "string" }, "name": { @@ -1269,7 +1269,7 @@ "type": "array" }, "ExchangeId": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "Financial": { @@ -1783,7 +1783,7 @@ "type": "number" }, "exchange": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "timestamp": { @@ -1801,7 +1801,7 @@ "type": "object" }, "ForexExchangeId": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "ForexGroupedResults": { @@ -1896,7 +1896,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -1922,7 +1922,7 @@ "type": "number" }, "exchange": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "timestamp": { @@ -2755,7 +2755,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -3245,7 +3245,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -3460,7 +3460,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -3699,7 +3699,7 @@ "X": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -3735,7 +3735,7 @@ "x": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -3797,7 +3797,7 @@ "X": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -3833,7 +3833,7 @@ "x": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -3916,7 +3916,7 @@ "type": "number" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "z": { @@ -3992,7 +3992,7 @@ "type": "number" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "z": { @@ -4429,7 +4429,7 @@ "type": "number" }, "sic_code": { - "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://www.sec.gov/info/edgar/siccodes.htm\"\u003eSIC Code List\u003c/a\u003e.\n", + "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n", "type": "string" }, "sic_description": { @@ -4678,7 +4678,7 @@ "type": "number" }, "exchange": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "timestamp": { @@ -4879,7 +4879,7 @@ "type": "integer" }, "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -5058,7 +5058,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -10372,7 +10372,7 @@ } }, "exchange": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.", "type": "integer" }, "price": { @@ -10489,7 +10489,7 @@ "type": "number" }, "exchange": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/forex/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "timestamp": { @@ -10877,7 +10877,7 @@ "type": "integer" }, "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -10929,7 +10929,7 @@ "type": "integer" }, "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -12847,7 +12847,7 @@ }, "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "description": "Get aggregate bars for a cryptocurrency pair over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "description": "Get aggregate bars for a cryptocurrency pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", "parameters": [ { "description": "The ticker symbol of the currency pair.", @@ -12930,7 +12930,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -13250,7 +13250,7 @@ }, "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "description": "Get aggregate bars for a forex pair over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "description": "Get aggregate bars for a forex pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", "parameters": [ { "description": "The ticker symbol of the currency pair.", @@ -13333,7 +13333,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -13639,7 +13639,7 @@ }, "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "description": "Get aggregate bars for an option contract over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "description": "Get aggregate bars for an option contract over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", "parameters": [ { "description": "The ticker symbol of the options contract.", @@ -13722,7 +13722,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -14038,7 +14038,7 @@ }, "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "description": "Get aggregate bars for a stock over a given date range in custom time window sizes.\n\u003cbr /\u003e\n\u003cbr /\u003e\nFor example, if timespan = ‘minute’ and multiplier = ‘5’ then 5-minute bars will be returned.\n", + "description": "Get aggregate bars for a stock over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", "parameters": [ { "description": "The ticker symbol of the stock/equity.", @@ -14121,7 +14121,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \n\u003ca href=\"https://polygon.io/blog/aggs-api-updates/\" target=\"_blank\" alt=\"Aggregate Data API Improvements\"\u003eAggregate Data API Improvements\u003c/a\u003e.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -14339,7 +14339,7 @@ "type": "string" }, "X": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "c": { @@ -14384,7 +14384,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "y": { @@ -14540,7 +14540,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "y": { @@ -14700,7 +14700,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "y": { @@ -14952,7 +14952,7 @@ "amp_url": "https://amp.benzinga.com/amp/content/20784086", "article_url": "https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square", "author": "Rachit Vats", - "description": "\u003cp\u003eCathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange \u003cstrong\u003eCoinbase Global Inc \u003c/strong\u003e(NASDAQ: \u003ca class=\"ticker\" href=\"https://www.benzinga.com/stock/coin#NASDAQ\"\u003eCOIN\u003c/a\u003e) worth about $64.49 million on the stock\u0026rsquo;s Friday\u0026rsquo;s dip and also its fourth-straight loss.\u003c/p\u003e\n\u003cp\u003eThe investment firm\u0026rsquo;s \u003cstrong\u003eArk Innovation ETF\u003c/strong\u003e (NYSE: \u003ca class=\"ticker\" href=\"https://www.benzinga.com/stock/arkk#NYSE\"\u003eARKK\u003c/a\u003e) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase\u0026rsquo;s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.\u003c/p\u003e\n\u003cp\u003eThe New York-based company also added another 3,873 shares of the mobile gaming company \u003cstrong\u003eSkillz Inc\u003c/strong\u003e (NYSE: \u003ca class=\"ticker\" href=\"https://www.benzinga.com/stock/sklz#NYSE\"\u003eSKLZ\u003c/a\u003e), \u003ca href=\"http://www.benzinga.com/markets/cryptocurrency/21/04/20762794/cathie-woods-ark-loads-up-another-1-2-million-shares-in-skillz-also-adds-coinbase-draftkin\"\u003ejust a day after\u003c/a\u003e snapping 1.2 million shares of the stock.\u003c/p\u003e\n\u003cp\u003eARKK bought the shares of the company which closed ...\u003c/p\u003e\u003cp\u003e\u003ca href=https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square alt=Cathie Wood Adds More Coinbase, Skillz, Trims Square\u003eFull story available on Benzinga.com\u003c/a\u003e\u003c/p\u003e", + "description": "

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ: COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

\n

The investment firm’s Ark Innovation ETF (NYSE: ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

\n

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE: SKLZ), just a day after snapping 1.2 million shares of the stock.

\n

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

", "id": "nJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA", "image_url": "https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720", "keywords": [ @@ -15151,7 +15151,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/tickers": { "get": { - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { "description": "A comma separated list of tickers to get snapshots for.", @@ -15298,7 +15298,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -15307,7 +15307,7 @@ { "properties": { "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } } @@ -15448,7 +15448,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}": { "get": { - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded cryptocurrency symbol.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for a single traded cryptocurrency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "parameters": [ { "description": "Ticker of the snapshot", @@ -15601,7 +15601,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -15610,7 +15610,7 @@ { "properties": { "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } } @@ -15749,7 +15749,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book": { "get": { - "description": "Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "description": "Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "parameters": [ { "description": "The cryptocurrency ticker.", @@ -15829,7 +15829,7 @@ "type": "number" }, "x": { - "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", "type": "object" } }, @@ -15851,7 +15851,7 @@ "type": "number" }, "x": { - "description": "A map of the exchange ID to number of shares at this price level.\n\u003cbr /\u003e\n\u003cbr /\u003e\n**Example:**\n\u003cbr /\u003e\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n\u003cbr /\u003e\n\u003cbr /\u003e\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", + "description": "A map of the exchange ID to number of shares at this price level.\n
\n
\n**Example:**\n
\n`{\n \"p\": 16302.94,\n \"x\": {\n \"1\": 0.02859424,\n \"6\": 0.023455\n }\n}`\n
\n
\nIn this example, exchange ID 1 has 0.02859424 shares available at $16,302.94,\nand exchange ID 6 has 0.023455 shares at the same price level.\n", "type": "object" } }, @@ -15914,7 +15914,7 @@ }, "/v2/snapshot/locale/global/markets/crypto/{direction}": { "get": { - "description": "Get the current top 20 gainers or losers of the day in cryptocurrency markets.\n\u003cbr /\u003e\n\u003cbr /\u003e\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "description": "Get the current top 20 gainers or losers of the day in cryptocurrency markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "parameters": [ { "description": "The direction of the snapshot results to return.\n", @@ -16059,7 +16059,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -16068,7 +16068,7 @@ { "properties": { "x": { - "description": "The exchange that this crypto trade happened on. \nSee \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\"\u003eExchanges\u003c/a\u003e for a mapping of exchanges to IDs.\n", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } } @@ -16209,7 +16209,7 @@ }, "/v2/snapshot/locale/global/markets/forex/tickers": { "get": { - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for all traded forex symbols.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for all traded forex symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { "description": "A comma separated list of tickers to get snapshots for.", @@ -16466,7 +16466,7 @@ }, "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}": { "get": { - "description": "Get the current minute, day, and previous day’s aggregate, as well as the last trade and quote for a single traded currency symbol.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for a single traded currency symbol.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "parameters": [ { "description": "The forex ticker.", @@ -16728,7 +16728,7 @@ }, "/v2/snapshot/locale/global/markets/forex/{direction}": { "get": { - "description": "Get the current top 20 gainers or losers of the day in forex markets.\n\u003cbr /\u003e\n\u003cbr /\u003e\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", + "description": "Get the current top 20 gainers or losers of the day in forex markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges.\n", "parameters": [ { "description": "The direction of the snapshot results to return.\n", @@ -16988,7 +16988,7 @@ }, "/v2/snapshot/locale/us/markets/stocks/tickers": { "get": { - "description": "Get the most up-to-date market data for all traded stock symbols.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "description": "Get the most up-to-date market data for all traded stock symbols.\n
\n
\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { "description": "A comma separated list of tickers to get snapshots for.", @@ -17185,7 +17185,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -17337,7 +17337,7 @@ }, "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}": { "get": { - "description": "Get the most up-to-date market data for a single traded stock ticker.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", + "description": "Get the most up-to-date market data for a single traded stock ticker.\n
\n
\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { "description": "The ticker symbol of the stock/equity.", @@ -17527,7 +17527,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -17677,7 +17677,7 @@ }, "/v2/snapshot/locale/us/markets/stocks/{direction}": { "get": { - "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n\u003cbr /\u003e\n\u003cbr /\u003e\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n\u003cbr /\u003e\n\u003cbr /\u003e\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges.\n", + "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges.\n", "parameters": [ { "description": "The direction of the snapshot results to return.\n", @@ -17871,7 +17871,7 @@ "type": "integer" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" } }, @@ -18245,7 +18245,7 @@ "X": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -18281,7 +18281,7 @@ "x": { "allOf": [ { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, { @@ -18575,7 +18575,7 @@ "type": "number" }, "x": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "z": { @@ -21563,7 +21563,7 @@ "items": { "properties": { "additional_underlyings": { - "description": "If an option contract has additional underlyings or deliverables associated with it, they will appear here.\nSee \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.optionseducation.org/referencelibrary/faq/splits-mergers-spinoffs-bankruptcies\"\u003ehere\u003c/a\u003e for some examples of what might cause a contract to have additional underlyings.", + "description": "If an option contract has additional underlyings or deliverables associated with it, they will appear here.\nSee here for some examples of what might cause a contract to have additional underlyings.", "items": { "properties": { "amount": { @@ -21590,7 +21590,7 @@ } }, "cfi": { - "description": "The 6 letter CFI code of the contract (defined in \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/ISO_10962\"\u003eISO 10962\u003c/a\u003e)", + "description": "The 6 letter CFI code of the contract (defined in ISO 10962)", "type": "string" }, "contract_type": { @@ -21602,7 +21602,7 @@ "type": "integer" }, "exercise_style": { - "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "description": "The exercise style of this contract. See this link for more details on exercise styles.", "enum": [ "american", "european", @@ -21745,7 +21745,7 @@ "results": { "properties": { "additional_underlyings": { - "description": "If an option contract has additional underlyings or deliverables associated with it, they will appear here.\nSee \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.optionseducation.org/referencelibrary/faq/splits-mergers-spinoffs-bankruptcies\"\u003ehere\u003c/a\u003e for some examples of what might cause a contract to have additional underlyings.", + "description": "If an option contract has additional underlyings or deliverables associated with it, they will appear here.\nSee here for some examples of what might cause a contract to have additional underlyings.", "items": { "properties": { "amount": { @@ -21772,7 +21772,7 @@ } }, "cfi": { - "description": "The 6 letter CFI code of the contract (defined in \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/ISO_10962\"\u003eISO 10962\u003c/a\u003e)", + "description": "The 6 letter CFI code of the contract (defined in ISO 10962)", "type": "string" }, "contract_type": { @@ -21784,7 +21784,7 @@ "type": "integer" }, "exercise_style": { - "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "description": "The exercise style of this contract. See this link for more details on exercise styles.", "enum": [ "american", "european", @@ -22804,7 +22804,7 @@ "type": "number" }, "sic_code": { - "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://www.sec.gov/info/edgar/siccodes.htm\"\u003eSIC Code List\u003c/a\u003e.\n", + "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n", "type": "string" }, "sic_description": { @@ -23193,7 +23193,7 @@ "type": "string" }, "exercise_style": { - "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "description": "The exercise style of this contract. See this link for more details on exercise styles.", "enum": [ "american", "european", @@ -23573,7 +23573,7 @@ "type": "string" }, "exercise_style": { - "description": "The exercise style of this contract. See \u003ca rel=\"nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Option_style\"\u003ethis link\u003c/a\u003e for more details on exercise styles.", + "description": "The exercise style of this contract. See this link for more details on exercise styles.", "enum": [ "american", "european", @@ -23914,7 +23914,7 @@ "type": "array" }, "exchange": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/crypto/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "id": { @@ -24143,7 +24143,7 @@ "type": "integer" }, "exchange": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/options/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "participant_timestamp": { @@ -24381,7 +24381,7 @@ "type": "integer" }, "exchange": { - "description": "The exchange ID. See \u003ca href=\"https://polygon.io/docs/stocks/get_v3_reference_exchanges\" alt=\"Exchanges\"\u003eExchanges\u003c/a\u003e for Polygon.io's mapping of exchange IDs.", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", "type": "integer" }, "id": { @@ -24493,7 +24493,7 @@ }, "/vX/reference/financials": { "get": { - "description": "Get historical financial data for a stock ticker.\nThe financials data is extracted from XBRL from company SEC filings using the methodology outlined \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://xbrl.squarespace.com/understanding-sec-xbrl-financi/\"\u003ehere\u003c/a\u003e.", + "description": "Get historical financial data for a stock ticker.\nThe financials data is extracted from XBRL from company SEC filings using the methodology outlined here.", "operationId": "ListFinancials", "parameters": [ { @@ -24505,7 +24505,7 @@ } }, { - "description": "Query by central index key (\u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.sec.gov/edgar/searchedgar/cik.htm\"\u003eCIK\u003c/a\u003e) Number", + "description": "Query by central index key (CIK) Number", "in": "query", "name": "cik", "schema": { @@ -24524,7 +24524,7 @@ } }, { - "description": "Query by standard industrial classification (\u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://www.sec.gov/corpfin/division-of-corporation-finance-standard-industrial-classification-sic-code-list\"\u003eSIC\u003c/a\u003e)", + "description": "Query by standard industrial classification (SIC)", "in": "query", "name": "sic", "schema": { @@ -24532,7 +24532,7 @@ } }, { - "description": "Query by the date when the filing with financials data was filed in YYYY-MM-DD format.\n\nBest used when querying over date ranges to find financials based on filings that happen in a time period.\n\nExamples:\n\nTo get financials based on filings that have happened after January 1, 2009 use the query param filing_date.gte=2009-01-01\n\nTo get financials based on filings that happened in the year 2009 use the query params filing_date.gte=2009-01-01\u0026filing_date.lt=2010-01-01", + "description": "Query by the date when the filing with financials data was filed in YYYY-MM-DD format.\n\nBest used when querying over date ranges to find financials based on filings that happen in a time period.\n\nExamples:\n\nTo get financials based on filings that have happened after January 1, 2009 use the query param filing_date.gte=2009-01-01\n\nTo get financials based on filings that happened in the year 2009 use the query params filing_date.gte=2009-01-01&filing_date.lt=2010-01-01", "in": "query", "name": "filing_date", "schema": { @@ -24857,13 +24857,13 @@ "financials": { "properties": { "balance_sheet": { - "description": "Balance sheet.\nNote that the keys in this object can be any of the balance sheet concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.", + "description": "Balance sheet.\nNote that the keys in this object can be any of the balance sheet concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.", "properties": { "*": { "description": "An individual financial data point.", "properties": { "formula": { - "description": "The name of the formula used to derive this data point from other financial data points.\nInformation about the formulas can be found \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://xbrlsite.azurewebsites.net/2020/reporting-scheme/us-gaap/fac/documentation/ImputeRulesList.html\"\u003ehere\u003c/a\u003e.\nThis value is only returned for data points that are not explicitly expressed within the XBRL source file when the `include_sources` query parameter is `true`." + "description": "The name of the formula used to derive this data point from other financial data points.\nInformation about the formulas can be found here.\nThis value is only returned for data points that are not explicitly expressed within the XBRL source file when the `include_sources` query parameter is `true`." }, "label": { "description": "A human readable label for the financial data point.", @@ -24882,7 +24882,7 @@ "type": "number" }, "xpath": { - "description": "The \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/XPath\"\u003eXPath 1.0\u003c/a\u003e query that identifies the fact from within the XBRL source file.\nThis value is only returned for data points taken directly from XBRL when the `include_sources` query parameter is `true`." + "description": "The XPath 1.0 query that identifies the fact from within the XBRL source file.\nThis value is only returned for data points taken directly from XBRL when the `include_sources` query parameter is `true`." } }, "required": [ @@ -24897,15 +24897,15 @@ "type": "object" }, "cash_flow_statement": { - "description": "Cash flow statement.\nNote that the keys in this object can be any of the cash flow statement concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "description": "Cash flow statement.\nNote that the keys in this object can be any of the cash flow statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", "type": "object" }, "comprehensive_income": { - "description": "Comprehensive income.\nNote that the keys in this object can be any of the comprehensive income statement concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "description": "Comprehensive income.\nNote that the keys in this object can be any of the comprehensive income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", "type": "object" }, "income_statement": { - "description": "Income statement.\nNote that the keys in this object can be any of the income statement concepts defined in \u003ca rel=\"noopener noreferrer nofollow\" target=\"_blank\" href=\"http://www.xbrlsite.com/2016/fac/v3/Documentation/FundamentalAccountingConceptsList.html\"\u003ethis table of fundamental accounting concepts\u003c/a\u003e but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "description": "Income statement.\nNote that the keys in this object can be any of the income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", "type": "object" } }, diff --git a/.polygon/rest.py b/.polygon/rest.py new file mode 100644 index 00000000..e4ae124c --- /dev/null +++ b/.polygon/rest.py @@ -0,0 +1,8 @@ +import urllib.request +import json + +contents = urllib.request.urlopen("https://api.polygon.io/openapi").read() +parsed = json.loads(contents) +formatted = json.dumps(parsed, indent=2) +with open(".polygon/rest.json", "w") as f: + f.write(formatted) diff --git a/Makefile b/Makefile index 485f002b..03f609ba 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ lint: style static ## Update the REST API spec rest-spec: - curl https://api.polygon.io/specs/rest.json > .polygon/rest.json + poetry run python .polygon/rest.py ## Update the WebSocket API spec ws-spec: From 71336889ef97301760d688c392f4b5aad8e1f5f3 Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Fri, 9 Sep 2022 10:24:01 -0400 Subject: [PATCH 165/448] Fixes by at-cf (#297) * Fixes by at-cf * fix lint --- examples/websocket/latency.py | 17 +++++++++++++++++ polygon/websocket/__init__.py | 22 +++++++++++++--------- 2 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 examples/websocket/latency.py diff --git a/examples/websocket/latency.py b/examples/websocket/latency.py new file mode 100644 index 00000000..57a0a183 --- /dev/null +++ b/examples/websocket/latency.py @@ -0,0 +1,17 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, EquityQuote +from typing import List, cast +import time + +c = WebSocketClient(subscriptions=["Q.SPY"]) + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + q: EquityQuote = cast(EquityQuote, m) + if q.timestamp is not None: + now = time.time() * 1000 + print(now, q.timestamp, now - q.timestamp) + + +c.run(handle_msg) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 21f6bfcb..66a9dd9a 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -118,16 +118,20 @@ async def connect( self.subs = set(self.scheduled_subs) self.schedule_resub = False - cmsg: Union[ - List[WebSocketMessage], Union[str, bytes] - ] = await s.recv() - # we know cmsg is Data - msgJson = json.loads(cmsg) # type: ignore - for m in msgJson: - if m["ev"] == "status": - logger.debug("status: %s", m["message"]) - continue + try: + cmsg: Union[ + List[WebSocketMessage], Union[str, bytes] + ] = await asyncio.wait_for(s.recv(), timeout=1) + except asyncio.TimeoutError: + continue + if not self.raw: + # we know cmsg is Data + msgJson = json.loads(cmsg) # type: ignore + for m in msgJson: + if m["ev"] == "status": + logger.debug("status: %s", m["message"]) + continue cmsg = parse(msgJson, logger) if len(cmsg) > 0: From 4af0760886f5ecb73affad9fbfe970a949b0ae98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 13:45:38 -0400 Subject: [PATCH 166/448] Bump types-urllib3 from 1.26.23 to 1.26.24 (#300) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.23 to 1.26.24. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 18755efa..a717c048 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.23" +version = "1.26.24" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "3d3968e8b23c5c0ff8a9a7764fa5a1eacbfeece90a8fb3e6e044a6f50295bc25" +content-hash = "6d2b04b8055b268ddbad9173729cc47a8804a1f914c2a60ceb41756e4eb79afe" [metadata.files] alabaster = [ @@ -840,8 +840,8 @@ types-setuptools = [ {file = "types_setuptools-65.3.0-py3-none-any.whl", hash = "sha256:f69210049580939c70386252b776eb75ff4b6de488e7d766b9398669b7de68af"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.23.tar.gz", hash = "sha256:b78e819f0e350221d0689a5666162e467ba3910737bafda14b5c2c85e9bb1e56"}, - {file = "types_urllib3-1.26.23-py3-none-any.whl", hash = "sha256:333e675b188a1c1fd980b4b352f9e40572413a4c1ac689c23cd546e96310070a"}, + {file = "types-urllib3-1.26.24.tar.gz", hash = "sha256:a1b3aaea7dda3eb1b51699ee723aadd235488e4dc4648e030f09bc429ecff42f"}, + {file = "types_urllib3-1.26.24-py3-none-any.whl", hash = "sha256:cf7918503d02d3576e503bbfb419b0e047c4617653bba09624756ab7175e15c9"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, diff --git a/pyproject.toml b/pyproject.toml index bdb56adf..1e7ed5f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.8.0" mypy = "^0.971" -types-urllib3 = "^1.26.23" +types-urllib3 = "^1.26.24" Sphinx = "^5.1.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org From aee8e05ab42dd644ff74a6dd181fbf6228f7fbf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Sep 2022 14:35:33 -0400 Subject: [PATCH 167/448] Bump certifi from 2022.6.15 to 2022.6.15.1 (#301) Bumps [certifi](https://github.com/certifi/python-certifi) from 2022.6.15 to 2022.6.15.1. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2022.06.15...2022.06.15.1) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a717c048..2f5534cd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,7 +55,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.6.15" +version = "2022.6.15.1" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -605,8 +605,8 @@ black = [ {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, ] certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, + {file = "certifi-2022.6.15.1-py3-none-any.whl", hash = "sha256:43dadad18a7f168740e66944e4fa82c6611848ff9056ad910f8f7a3e46ab89e0"}, + {file = "certifi-2022.6.15.1.tar.gz", hash = "sha256:cffdcd380919da6137f76633531a5817e3a9f268575c128249fb637e4f9e73fb"}, ] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, From ff3c05275150582fc7d9a9e38552bba1a4b81caa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 16:27:12 +0000 Subject: [PATCH 168/448] Bump certifi from 2022.6.15.1 to 2022.9.14 (#302) Bumps [certifi](https://github.com/certifi/python-certifi) from 2022.6.15.1 to 2022.9.14. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2022.06.15.1...2022.09.14) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2f5534cd..e05635df 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,7 +55,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.6.15.1" +version = "2022.9.14" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -605,8 +605,8 @@ black = [ {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, ] certifi = [ - {file = "certifi-2022.6.15.1-py3-none-any.whl", hash = "sha256:43dadad18a7f168740e66944e4fa82c6611848ff9056ad910f8f7a3e46ab89e0"}, - {file = "certifi-2022.6.15.1.tar.gz", hash = "sha256:cffdcd380919da6137f76633531a5817e3a9f268575c128249fb637e4f9e73fb"}, + {file = "certifi-2022.9.14-py3-none-any.whl", hash = "sha256:e232343de1ab72c2aa521b625c80f699e356830fd0e2c620b465b304b17b0516"}, + {file = "certifi-2022.9.14.tar.gz", hash = "sha256:36973885b9542e6bd01dea287b2b4b3b21236307c56324fcc3f1160f2d655ed5"}, ] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, From 8d54c65074884643a7b0544a346fd02b43962f6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 13:14:41 -0400 Subject: [PATCH 169/448] Bump certifi from 2022.9.14 to 2022.9.24 (#303) Bumps [certifi](https://github.com/certifi/python-certifi) from 2022.9.14 to 2022.9.24. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2022.09.14...2022.09.24) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index e05635df..706f8c6a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,7 +55,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.9.14" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -605,8 +605,8 @@ black = [ {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, ] certifi = [ - {file = "certifi-2022.9.14-py3-none-any.whl", hash = "sha256:e232343de1ab72c2aa521b625c80f699e356830fd0e2c620b465b304b17b0516"}, - {file = "certifi-2022.9.14.tar.gz", hash = "sha256:36973885b9542e6bd01dea287b2b4b3b21236307c56324fcc3f1160f2d655ed5"}, + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, ] charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, From cc7db546c78444e0fff45f05322ca528d1c20c98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Sep 2022 17:20:09 +0000 Subject: [PATCH 170/448] Bump sphinx from 5.1.1 to 5.2.1 (#304) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.1.1 to 5.2.1. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/5.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.1.1...v5.2.1) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- pyproject.toml | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index 706f8c6a..e19ed88c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -85,7 +85,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "dev" optional = false @@ -348,8 +348,8 @@ optional = false python-versions = "*" [[package]] -name = "sphinx" -version = "5.1.1" +name = "Sphinx" +version = "5.2.1" description = "Python documentation generator" category = "dev" optional = false @@ -357,16 +357,16 @@ python-versions = ">=3.6" [package.dependencies] alabaster = ">=0.7,<0.8" -babel = ">=1.3" -colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} docutils = ">=0.14,<0.20" -imagesize = "*" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} -Jinja2 = ">=2.3" -packaging = "*" -Pygments = ">=2.0" +imagesize = ">=1.3" +importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.12" requests = ">=2.5.0" -snowballstemmer = ">=1.1" +snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" sphinxcontrib-htmlhelp = ">=2.0.0" @@ -376,8 +376,8 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "isort", "mypy (>=0.971)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed-ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.971)", "sphinx-lint", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] [[package]] name = "sphinx-autodoc-typehints" @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "6d2b04b8055b268ddbad9173729cc47a8804a1f914c2a60ceb41756e4eb79afe" +content-hash = "daedee38735106f24a5b4eca27f135cb24f54a406335506f75f4c8875ce1c0ea" [metadata.files] alabaster = [ @@ -617,8 +617,8 @@ click = [ {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, @@ -791,9 +791,9 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -sphinx = [ - {file = "Sphinx-5.1.1-py3-none-any.whl", hash = "sha256:309a8da80cb6da9f4713438e5b55861877d5d7976b69d87e336733637ea12693"}, - {file = "Sphinx-5.1.1.tar.gz", hash = "sha256:ba3224a4e206e1fbdecf98a4fae4992ef9b24b85ebf7b584bb340156eaf08d89"}, +Sphinx = [ + {file = "Sphinx-5.2.1.tar.gz", hash = "sha256:c009bb2e9ac5db487bcf53f015504005a330ff7c631bb6ab2604e0d65bae8b54"}, + {file = "sphinx-5.2.1-py3-none-any.whl", hash = "sha256:3dcf00fcf82cf91118db9b7177edea4fc01998976f893928d0ab0c58c54be2ca"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.19.2-py3-none-any.whl", hash = "sha256:3d761de928d5a86901331133d6d4a2552afa2e798ebcfc0886791792aeb4dd9a"}, diff --git a/pyproject.toml b/pyproject.toml index 1e7ed5f0..3be661b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.8.0" mypy = "^0.971" types-urllib3 = "^1.26.24" -Sphinx = "^5.1.1" +Sphinx = "^5.2.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" From 535c944d4d436effdbc027b531a2a8245163f290 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 12:58:27 -0400 Subject: [PATCH 171/448] Bump types-urllib3 from 1.26.24 to 1.26.25 (#308) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.24 to 1.26.25. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index e19ed88c..87054a45 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.24" +version = "1.26.25" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "daedee38735106f24a5b4eca27f135cb24f54a406335506f75f4c8875ce1c0ea" +content-hash = "d953e8f78ac37059dc40fe841b983784f4b10fb7ef1d19e4b016b247e2a3b0d4" [metadata.files] alabaster = [ @@ -840,8 +840,8 @@ types-setuptools = [ {file = "types_setuptools-65.3.0-py3-none-any.whl", hash = "sha256:f69210049580939c70386252b776eb75ff4b6de488e7d766b9398669b7de68af"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.24.tar.gz", hash = "sha256:a1b3aaea7dda3eb1b51699ee723aadd235488e4dc4648e030f09bc429ecff42f"}, - {file = "types_urllib3-1.26.24-py3-none-any.whl", hash = "sha256:cf7918503d02d3576e503bbfb419b0e047c4617653bba09624756ab7175e15c9"}, + {file = "types-urllib3-1.26.25.tar.gz", hash = "sha256:5aef0e663724eef924afa8b320b62ffef2c1736c1fa6caecfc9bc6c8ae2c3def"}, + {file = "types_urllib3-1.26.25-py3-none-any.whl", hash = "sha256:c1d78cef7bd581e162e46c20a57b2e1aa6ebecdcf01fd0713bb90978ff3e3427"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, diff --git a/pyproject.toml b/pyproject.toml index 3be661b5..cf2c31ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.8.0" mypy = "^0.971" -types-urllib3 = "^1.26.24" +types-urllib3 = "^1.26.25" Sphinx = "^5.2.1" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org From c741daec1019842ad1d9e8535c11bcf1dfdce4a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 14:22:30 -0400 Subject: [PATCH 172/448] Bump sphinx from 5.2.1 to 5.2.3 (#310) --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 87054a45..cb8e187b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -349,7 +349,7 @@ python-versions = "*" [[package]] name = "Sphinx" -version = "5.2.1" +version = "5.2.3" description = "Python documentation generator" category = "dev" optional = false @@ -376,7 +376,7 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.971)", "sphinx-lint", "types-requests", "types-typed-ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] [[package]] @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "d953e8f78ac37059dc40fe841b983784f4b10fb7ef1d19e4b016b247e2a3b0d4" +content-hash = "d341b47b72923eff5ea68e73aad833e719ee24a4fa4389249f8f639d142617c3" [metadata.files] alabaster = [ @@ -792,8 +792,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] Sphinx = [ - {file = "Sphinx-5.2.1.tar.gz", hash = "sha256:c009bb2e9ac5db487bcf53f015504005a330ff7c631bb6ab2604e0d65bae8b54"}, - {file = "sphinx-5.2.1-py3-none-any.whl", hash = "sha256:3dcf00fcf82cf91118db9b7177edea4fc01998976f893928d0ab0c58c54be2ca"}, + {file = "Sphinx-5.2.3.tar.gz", hash = "sha256:5b10cb1022dac8c035f75767799c39217a05fc0fe2d6fe5597560d38e44f0363"}, + {file = "sphinx-5.2.3-py3-none-any.whl", hash = "sha256:7abf6fabd7b58d0727b7317d5e2650ef68765bbe0ccb63c8795fa8683477eaa2"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.19.2-py3-none-any.whl", hash = "sha256:3d761de928d5a86901331133d6d4a2552afa2e798ebcfc0886791792aeb4dd9a"}, diff --git a/pyproject.toml b/pyproject.toml index cf2c31ca..1dec4345 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.8.0" mypy = "^0.971" types-urllib3 = "^1.26.25" -Sphinx = "^5.2.1" +Sphinx = "^5.2.3" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" From 36d722fcb7e548a5ed15c7445a451817998a78b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 16:57:42 -0400 Subject: [PATCH 173/448] Bump mypy from 0.971 to 0.982 (#311) Bumps [mypy](https://github.com/python/mypy) from 0.971 to 0.982. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.971...v0.982) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 53 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/poetry.lock b/poetry.lock index cb8e187b..0f34bff9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -199,11 +199,11 @@ python-versions = ">=3.7" [[package]] name = "mypy" -version = "0.971" +version = "0.982" description = "Optional static typing for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] mypy-extensions = ">=0.4.3" @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "d341b47b72923eff5ea68e73aad833e719ee24a4fa4389249f8f639d142617c3" +content-hash = "3d0371d82caf7edc704679eb0fa1b0cb773450027ba7a636fd11df96b8c94ab1" [metadata.files] alabaster = [ @@ -695,29 +695,30 @@ markupsafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mypy = [ - {file = "mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c"}, - {file = "mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5"}, - {file = "mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3"}, - {file = "mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655"}, - {file = "mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103"}, - {file = "mypy-0.971-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca"}, - {file = "mypy-0.971-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417"}, - {file = "mypy-0.971-cp36-cp36m-win_amd64.whl", hash = "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09"}, - {file = "mypy-0.971-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8"}, - {file = "mypy-0.971-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0"}, - {file = "mypy-0.971-cp37-cp37m-win_amd64.whl", hash = "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2"}, - {file = "mypy-0.971-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27"}, - {file = "mypy-0.971-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856"}, - {file = "mypy-0.971-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71"}, - {file = "mypy-0.971-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27"}, - {file = "mypy-0.971-cp38-cp38-win_amd64.whl", hash = "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58"}, - {file = "mypy-0.971-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6"}, - {file = "mypy-0.971-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe"}, - {file = "mypy-0.971-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9"}, - {file = "mypy-0.971-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf"}, - {file = "mypy-0.971-cp39-cp39-win_amd64.whl", hash = "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0"}, - {file = "mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9"}, - {file = "mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56"}, + {file = "mypy-0.982-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5085e6f442003fa915aeb0a46d4da58128da69325d8213b4b35cc7054090aed5"}, + {file = "mypy-0.982-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:41fd1cf9bc0e1c19b9af13a6580ccb66c381a5ee2cf63ee5ebab747a4badeba3"}, + {file = "mypy-0.982-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f793e3dd95e166b66d50e7b63e69e58e88643d80a3dcc3bcd81368e0478b089c"}, + {file = "mypy-0.982-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86ebe67adf4d021b28c3f547da6aa2cce660b57f0432617af2cca932d4d378a6"}, + {file = "mypy-0.982-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:175f292f649a3af7082fe36620369ffc4661a71005aa9f8297ea473df5772046"}, + {file = "mypy-0.982-cp310-cp310-win_amd64.whl", hash = "sha256:8ee8c2472e96beb1045e9081de8e92f295b89ac10c4109afdf3a23ad6e644f3e"}, + {file = "mypy-0.982-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58f27ebafe726a8e5ccb58d896451dd9a662a511a3188ff6a8a6a919142ecc20"}, + {file = "mypy-0.982-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6af646bd46f10d53834a8e8983e130e47d8ab2d4b7a97363e35b24e1d588947"}, + {file = "mypy-0.982-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7aeaa763c7ab86d5b66ff27f68493d672e44c8099af636d433a7f3fa5596d40"}, + {file = "mypy-0.982-cp37-cp37m-win_amd64.whl", hash = "sha256:724d36be56444f569c20a629d1d4ee0cb0ad666078d59bb84f8f887952511ca1"}, + {file = "mypy-0.982-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14d53cdd4cf93765aa747a7399f0961a365bcddf7855d9cef6306fa41de01c24"}, + {file = "mypy-0.982-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26ae64555d480ad4b32a267d10cab7aec92ff44de35a7cd95b2b7cb8e64ebe3e"}, + {file = "mypy-0.982-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6389af3e204975d6658de4fb8ac16f58c14e1bacc6142fee86d1b5b26aa52bda"}, + {file = "mypy-0.982-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b35ce03a289480d6544aac85fa3674f493f323d80ea7226410ed065cd46f206"}, + {file = "mypy-0.982-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c6e564f035d25c99fd2b863e13049744d96bd1947e3d3d2f16f5828864506763"}, + {file = "mypy-0.982-cp38-cp38-win_amd64.whl", hash = "sha256:cebca7fd333f90b61b3ef7f217ff75ce2e287482206ef4a8b18f32b49927b1a2"}, + {file = "mypy-0.982-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a705a93670c8b74769496280d2fe6cd59961506c64f329bb179970ff1d24f9f8"}, + {file = "mypy-0.982-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75838c649290d83a2b83a88288c1eb60fe7a05b36d46cbea9d22efc790002146"}, + {file = "mypy-0.982-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:91781eff1f3f2607519c8b0e8518aad8498af1419e8442d5d0afb108059881fc"}, + {file = "mypy-0.982-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa97b9ddd1dd9901a22a879491dbb951b5dec75c3b90032e2baa7336777363b"}, + {file = "mypy-0.982-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a692a8e7d07abe5f4b2dd32d731812a0175626a90a223d4b58f10f458747dd8a"}, + {file = "mypy-0.982-cp39-cp39-win_amd64.whl", hash = "sha256:eb7a068e503be3543c4bd329c994103874fa543c1727ba5288393c21d912d795"}, + {file = "mypy-0.982-py3-none-any.whl", hash = "sha256:1021c241e8b6e1ca5a47e4d52601274ac078a89845cfde66c6d5f769819ffa1d"}, + {file = "mypy-0.982.tar.gz", hash = "sha256:85f7a343542dc8b1ed0a888cdd34dca56462654ef23aa673907305b260b3d746"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, diff --git a/pyproject.toml b/pyproject.toml index 1dec4345..64f77c2b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.8.0" -mypy = "^0.971" +mypy = "^0.982" types-urllib3 = "^1.26.25" Sphinx = "^5.2.3" sphinx-rtd-theme = "^1.0.0" From 4585bb98402eb8f9709e3e4f04421db14c7633f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:03:18 -0400 Subject: [PATCH 174/448] Bump types-setuptools from 65.3.0 to 65.4.0.0 (#309) Bumps [types-setuptools](https://github.com/python/typeshed) from 65.3.0 to 65.4.0.0. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0f34bff9..015cff68 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "65.3.0" +version = "65.4.0.0" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "3d0371d82caf7edc704679eb0fa1b0cb773450027ba7a636fd11df96b8c94ab1" +content-hash = "bfc00d1ae1ef2a1b942958071d18ae46ff153a5cf60e62c91d1874e7ef47b803" [metadata.files] alabaster = [ @@ -837,8 +837,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-65.3.0.tar.gz", hash = "sha256:c26779cbba3947823c260354adaab4e91ca8c18888aa2b740f503844b88f1813"}, - {file = "types_setuptools-65.3.0-py3-none-any.whl", hash = "sha256:f69210049580939c70386252b776eb75ff4b6de488e7d766b9398669b7de68af"}, + {file = "types-setuptools-65.4.0.0.tar.gz", hash = "sha256:d9021d6a70690b34e7bd2947e7ab10167c646fbf062508cb56581be2e2a1615e"}, + {file = "types_setuptools-65.4.0.0-py3-none-any.whl", hash = "sha256:ce178b3f7dbd6c0e67f8eee7ae29c1be280ade7e5188bdd9e620843de4060d85"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.25.tar.gz", hash = "sha256:5aef0e663724eef924afa8b320b62ffef2c1736c1fa6caecfc9bc6c8ae2c3def"}, diff --git a/pyproject.toml b/pyproject.toml index 64f77c2b..51697a94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" -types-setuptools = "^65.3.0" +types-setuptools = "^65.4.0" pook = "^1.0.2" [build-system] From 0515771a4f4260caf4f78adf819c0721d541b824 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Tue, 4 Oct 2022 13:48:26 -0400 Subject: [PATCH 175/448] update rest spec (#312) --- .polygon/rest.json | 820 ++++++++++++++++++++++++++++++--------------- 1 file changed, 556 insertions(+), 264 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 2ed7b8c2..354de4e2 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -4187,100 +4187,6 @@ }, "type": "object" }, - "V2News": { - "properties": { - "amp_url": { - "description": "The mobile friendly Accelerated Mobile Page (AMP) URL.\n", - "format": "url", - "type": "string" - }, - "article_url": { - "description": "A link to the news article.\n", - "format": "url", - "type": "string" - }, - "author": { - "description": "The article's author.\n", - "type": "string" - }, - "description": { - "description": "A description of the article.\n", - "type": "string" - }, - "id": { - "description": "Unique identifier for the article.\n", - "type": "string" - }, - "image_url": { - "description": "The article's image URL.\n", - "format": "url", - "type": "string" - }, - "keywords": { - "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).\n", - "items": { - "type": "string" - }, - "type": "array" - }, - "published_utc": { - "description": "The date the article was published on.\n", - "format": "date-time", - "type": "string" - }, - "publisher": { - "properties": { - "favicon_url": { - "description": "The publisher's homepage favicon URL.\n", - "format": "url", - "type": "string" - }, - "homepage_url": { - "description": "The publisher's homepage URL.\n", - "format": "url", - "type": "string" - }, - "logo_url": { - "description": "The publisher's logo URL.\n", - "format": "url", - "type": "string" - }, - "name": { - "description": "The publisher's name.\n", - "type": "string" - } - }, - "required": [ - "name", - "logo_url", - "homepage_url" - ], - "type": "object" - }, - "tickers": { - "description": "The ticker symbols associated with the article.\n", - "items": { - "description": "The exchange symbol that this item is traded under.", - "type": "string" - }, - "type": "array" - }, - "title": { - "description": "The title of the news article.\n", - "type": "string" - } - }, - "required": [ - "id", - "publisher", - "title", - "author", - "published_utc", - "article_url", - "tickers" - ], - "type": "object" - }, "V2TicksBase": { "properties": { "db_latency": { @@ -4690,7 +4596,10 @@ } } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "LastQuoteCurrencies" + } }, "request_id": { "description": "A request id assigned by the server.", @@ -4711,6 +4620,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "ask,bid,exchange,timestamp\n1.3673344,1.3672596,48,1605555313000\n", + "schema": { + "type": "string" + } } }, "description": "The last tick for this currency pair, plus the converted amount for the requested amount." @@ -5243,11 +5158,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -5382,6 +5297,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", + "schema": { + "type": "string" + } } }, "description": "Exponential Moving Average (EMA) data for each period." @@ -5555,11 +5476,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -5694,6 +5615,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "schema": { + "type": "string" + } } }, "description": "Exponential Moving Average (EMA) data for each period." @@ -6006,6 +5933,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,286.1730473491824 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,285.60990642465924 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,285.023780156278 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,284.4137303667383 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,282.43007426223943 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.7141043158811 O:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,286.0778649309446 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,283.77878058578887 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,283.11791448724966 O:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.7544192473781", + "schema": { + "type": "string" + } } }, "description": "Exponential Moving Average (EMA) data for each period." @@ -6318,6 +6251,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.17972071441582\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,160.92194334973746\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,162.5721451116157\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,162.93345715698777\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,161.72552880161066\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,162.18657079351314\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.53481135582055\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,159.78118646009983\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,160.48735733602226\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,161.29590022115534\n", + "schema": { + "type": "string" + } } }, "description": "Exponential Moving Average (EMA) data for each period." @@ -6500,11 +6439,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -6663,6 +6602,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,-200.79662915774315,-281.5009533935604,80.70432423581724\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,-264.55324270273195,-316.4388906203941,51.88564791766214\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,-317.75700272815084,-339.5909474061525,21.83394467800167\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,-350.23805379084297,-345.0494335756529,-5.188620215190042\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,-347.75055091027025,-343.7522785218554,-3.9982723884148754\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,-339.51740285673077,-342.7527104247516,3.2353075680208576\nX:BTCUSD,11337.77105153,19346.509,0,19527.23,19487.24,19640,18846.95,1664409600000,142239,,0,,0,0,0,0,0,false,1664409600000,-130.70646519456568,-232.81921860513586,102.11275341057018\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,-165.73322121465026,-258.3474069577784,92.61418574312813\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,-242.62960978099727,-301.6770344525147,59.04742467151743\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,-288.68772337443806,-329.4103025998096,40.72257922537153\n", + "schema": { + "type": "string" + } } }, "description": "Moving Average Convergence/Divergence (MACD) data for each period." @@ -6856,11 +6801,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -7019,6 +6964,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nC:USDAUD,687,1.5442,0,1.53763,1.5386983,1.5526022,1.537279,1664409600000,687,,0,,0,0,0,0,0,false,1664409600000,0.0160095063995076,0.016240853664654657,-0.0002313472651470569\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,0.019060448457087098,0.015690709670065223,0.0033697387870218753\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,0.017190795754692623,0.013971241529748895,0.003219554224943728\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,0.014349509127189686,0.010792069356789809,0.0035574397703998766\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,0.0169083298713677,0.016298690480941423,0.0006096393904262767\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,0.017968564486413374,0.016146280633334852,0.001822283853078522\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,0.018356408747553177,0.014848274973309752,0.0035081337742434247\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,0.016441299960100686,0.01316635297351296,0.0032749469865877255\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,0.015245524601038118,0.012347616226866026,0.002897908374172092\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,0.014947418239455779,0.011623139133323003,0.0033242791061327756\n", + "schema": { + "type": "string" + } } }, "description": "Moving Average Convergence/Divergence (MACD) data for each period." @@ -7375,6 +7326,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,-0.05105556065990413,3.5771695836806834,-3.6282251443405875\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,4.047960862047148,5.247666286053219,-1.199705424006071\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,5.255380647906861,6.466477305754766,-1.2110966578479045\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,5.591072756938104,6.769251470216741,-1.178178713278637\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,1.4304642046162712,4.48422586976583,-3.053761665149559\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,4.32835898317461,5.547592642054737,-1.2192336588801274\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,4.623290999840208,5.852401056774768,-1.2291100569345605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,4.932483632022979,6.159678571008409,-1.2271949389854298\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,5.93821326327344,7.063796148536399,-1.1255828852629595\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,6.294916771166584,7.345191869852139,-1.050275098685555\n", + "schema": { + "type": "string" + } } }, "description": "Moving Average Convergence/Divergence (MACD) data for each period." @@ -7731,6 +7688,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,-5.413804946923619,-3.8291158739479005,-1.5846890729757188\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,-4.63165683097526,-3.098305244715017,-1.5333515862602427\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,-4.581291216131007,-2.7149673481499565,-1.86632386798105\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,-3.6311474313744156,-1.1648824074663984,-2.4662650239080173\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,-2.533545758578896,0.9308104167079131,-3.464356175286809\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,-4.771497049659786,-3.432943605703971,-1.3385534439558149\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,-4.349569413677017,-2.2483863811546936,-2.1011830325223233\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,-3.9559234852549707,-1.7230906230241128,-2.232832862230858\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,-3.2635802145105117,-0.548316151489394,-2.7152640630211176\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,-3.070742345502225,0.13049986426588545,-3.2012422097681106\n", + "schema": { + "type": "string" + } } }, "description": "Moving Average Convergence/Divergence (MACD) data for each period." @@ -7893,11 +7856,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8032,6 +7995,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,52.040915721136884\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,44.813590401722564\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,44.813590401722564\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,45.22751170711286\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,45.22751170711286\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,37.361825384231004\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,37.361825384231004\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,50.74235333598462\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,50.74235333598462\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,39.159457782344376\n", + "schema": { + "type": "string" + } } }, "description": "Relative strength index data for each period." @@ -8205,11 +8174,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8344,6 +8313,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,65.97230488287764\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,79.3273623194404\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,79.32736231944038\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,74.64770184023104\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,64.43214811875563\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,64.43214811875563\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,81.95981214984681\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,81.95981214984683\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,74.64770184023104\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,74.98028072374902\n", + "schema": { + "type": "string" + } } }, "description": "Relative strength index data for each period." @@ -8656,6 +8631,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,30.837887188419387\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,15.546598157051605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,88.61520575036505\n", + "schema": { + "type": "string" + } } }, "description": "Relative Strength Index (RSI) data for each period." @@ -8968,6 +8949,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,23.065352237561996\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,29.877761913419718\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,29.58201330468151\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,30.233508748331047\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,19.857312489527956\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,32.18008680069761\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,28.71109953239781\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,31.140902927103383\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,32.21491128713248\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,35.950871523070575\n", + "schema": { + "type": "string" + } } }, "description": "Relative strength Index data for each period." @@ -9130,7 +9117,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -9156,7 +9143,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTC-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9291,6 +9278,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", + "schema": { + "type": "string" + } } }, "description": "Simple Moving Average (SMA) data for each period." @@ -9464,7 +9457,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/C:EUR-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -9490,7 +9483,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/C:EUR-USD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9625,6 +9618,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "schema": { + "type": "string" + } } }, "description": "Simple Moving Average (SMA) data for each period." @@ -9959,6 +9958,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.0121999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,284.61099999999965\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,282.50919999999974\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,281.80859999999973\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,281.1079999999998\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.4949999999996\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,285.6801999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,285.31159999999966\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,283.9103999999997\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,283.2097999999997\n", + "schema": { + "type": "string" + } } }, "description": "Simple Moving Average (SMA) data for each period." @@ -10293,6 +10298,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,164.19240000000005\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,164.40360000000007\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,164.42680000000007\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,164.33300000000006\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,164.13680000000005\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,164.32100000000005\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,164.28180000000003\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,163.97960000000006\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.73900000000006\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.59020000000007\n", + "schema": { + "type": "string" + } } }, "description": "Simple Moving Average (SMA) data for each period." @@ -10363,12 +10374,13 @@ "conditions": { "description": "A list of condition codes.", "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", "type": "integer" }, "type": "array", "x-polygon-go-type": { - "name": "[]*int32" + "name": "Int32Array" } }, "exchange": { @@ -10394,7 +10406,10 @@ } } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "LastTradeCrypto" + } }, "request_id": { "description": "A request id assigned by the server.", @@ -10411,6 +10426,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "conditions,exchange,price,size,timestamp\n1,4,16835.42,0.006909,1605560885027\n", + "schema": { + "type": "string" + } } }, "description": "The last tick for this currency pair." @@ -10501,7 +10522,10 @@ } } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "LastQuoteCurrencies" + } }, "request_id": { "description": "A request id assigned by the server.", @@ -10518,6 +10542,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "ask,bid,exchange,timestamp\n0.73124,0.73122,48,1605557756000\n", + "schema": { + "type": "string" + } } }, "description": "The last quote tick for this currency pair." @@ -10944,6 +10974,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "isUTC,day,open,close,openTrades,closingTrades\ntrue,2020-10-09,10932.44,11050.64,\"[{\\\"s\\\":0.002,\\\"p\\\":10932.44,\\\"x\\\":1,\\\"t\\\":1602201600056,\\\"c\\\":[2],\\\"i\\\":\\\"511235746\\\"},{\\\"s\\\":0.02,\\\"p\\\":10923.76,\\\"x\\\":4,\\\"t\\\":1602201600141,\\\"c\\\":[2],\\\"i\\\":\\\"511235751\\\"}]\",\"[{\\\"s\\\":0.006128,\\\"p\\\":11050.64,\\\"x\\\":4,\\\"t\\\":1602287999795,\\\"c\\\":[2],\\\"i\\\":\\\"973323250\\\"},{\\\"s\\\":0.014,\\\"p\\\":11049.4,\\\"x\\\":17,\\\"t\\\":1602287999659,\\\"c\\\":[1],\\\"i\\\":\\\"105717893\\\"}]\"\n", + "schema": { + "type": "string" + } } }, "description": "The open/close of this symbol." @@ -11073,6 +11109,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "from,open,high,low,close,volume,afterHours,preMarket\n2021-07-22,25,26.35,25,26.35,2,26.35,25\n", + "schema": { + "type": "string" + } } }, "description": "The open/close of this stock symbol." @@ -11202,6 +11244,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "from,open,high,low,close,volume,afterHours,preMarket\n2020-10-14,324.66,326.2,322.3,325.12,26122646,322.1,324.5\n", + "schema": { + "type": "string" + } } }, "description": "The open/close of this stock symbol." @@ -12298,6 +12346,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,n,o,t,v,vw\nX:ARDRUSD,0.0550762,0.0550762,0.0550762,18388,0.0550762,1580676480000,2,0.0551\nX:NGCUSD,0.0272983,0.0273733,0.0272983,18,0.0273733,1580674080000,4734,0.0273\nX:ZSCUSD,0.00028531,0.00028531,0.00028531,151,0.00028531,1580671080000,390,0.0003\n", + "schema": { + "type": "string" + } } }, "description": "The previous day OHLC for the ticker." @@ -12473,6 +12527,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,n,o,t,v,vw\nC:ILSCHF,0.2704,0.2706,0.2693,689,0.2698,1602719999999,689,0.2702\nC:GBPCAD,1.71103,1.71642,1.69064,407324,1.69955,1602719999999,407324,1.7062\nC:DKKAUD,0.2214,0.2214,0.2195,10639,0.22,1602719999999,10639,0.2202\n", + "schema": { + "type": "string" + } } }, "description": "Previous day OHLC for ticker" @@ -12660,6 +12720,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,n,o,t,v,vw\nKIMpL,25.9102,26.25,25.91,74,26.07,1602705600000,4369,26.0407\nTANH,23.4,24.763,22.65,1096,24.5,1602705600000,25933.6,23.493\nVSAT,34.24,35.47,34.21,4966,34.9,1602705600000,312583,34.4736\n", + "schema": { + "type": "string" + } } }, "description": "Previous day OHLC for ticker" @@ -12823,6 +12889,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,o,t,v,vw\nX:BTCUSD,16035.9,16180,15639.2,15937.1,1605416400000,95045.16897951,15954.2111\n", + "schema": { + "type": "string" + } } }, "description": "The previous day OHLC for a ticker." @@ -13062,6 +13134,12 @@ } ] } + }, + "text/csv": { + "example": "c,h,l,n,o,t,v,vw\n10094.75,10429.26,9490,1,9557.9,1590984000000,303067.6562332156,9874.5529\n9492.62,10222.72,9135.68,1,10096.87,1591070400000,323339.6922892879,9729.5701\n", + "schema": { + "type": "string" + } } }, "description": "Cryptocurrency Aggregates." @@ -13226,6 +13304,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,n,o,t,v,vw\nC:EURUSD,1.06206,1.0631,1.0505,180300,1.05252,1651708799999,180300,1.055\n", + "schema": { + "type": "string" + } } }, "description": "The previous day OHLC for the ticker." @@ -13455,6 +13539,12 @@ } ] } + }, + "text/csv": { + "example": "c,h,l,n,o,t,v,vw\n1.17721,1.18305,1.1756,125329,1.17921,1626912000000,125329,1.1789\n", + "schema": { + "type": "string" + } } }, "description": "Forex Aggregates." @@ -13615,6 +13705,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,n,o,t,v,vw\nO:TSLA210903C00700000,115.97,117.59,114.13,2,115.55,1605042000000,131704427.0,116.3058\n", + "schema": { + "type": "string" + } } }, "description": "The previous day OHLC for the options contract." @@ -13855,6 +13951,12 @@ } ] } + }, + "text/csv": { + "example": "c,h,l,n,o,t,v,vw\n26.2,26.2,26.2,1,26.2,1632369600000,2,26.2\n28.3,28.3,28.3,1,28.3,1632456000000,2,28.3\n", + "schema": { + "type": "string" + } } }, "description": "Options Aggregates." @@ -14014,6 +14116,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,o,t,v,vw\nAAPL,115.97,117.59,114.13,115.55,1605042000000,131704427.0,116.3058\n", + "schema": { + "type": "string" + } } }, "description": "The previous day OHLC for the ticker." @@ -14257,6 +14365,12 @@ } ] } + }, + "text/csv": { + "example": "c,h,l,n,o,t,v,vw\n75.0875,75.15,73.7975,1,74.06,1577941200000,135647456.0,74.6099\n74.3575,75.145,74.125,1,74.2875,1578027600000,146535512.0,74.7026\n", + "schema": { + "type": "string" + } } }, "description": "Stock Aggregates." @@ -14345,12 +14459,13 @@ "c": { "description": "A list of condition codes.", "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", "type": "integer" }, "type": "array", "x-polygon-go-type": { - "name": "[]*int32" + "name": "Int32Array" } }, "f": { @@ -14358,12 +14473,16 @@ "type": "integer" }, "i": { - "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).", + "description": "A list of indicator codes.", "items": { - "description": "The indicator code.", + "description": "The indicator codes. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).", + "format": "int32", "type": "integer" }, - "type": "array" + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } }, "p": { "description": "The bid price.", @@ -14408,6 +14527,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "P,S,T,X,p,q,s,t,x,y,z\n127.98,7,AAPL,19,127.96,83480742,1,1617827221349730300,11,1617827221349366000,3\n", + "schema": { + "type": "string" + } } }, "description": "The last NBBO tick for this stock." @@ -14496,12 +14621,13 @@ "c": { "description": "A list of condition codes.", "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", "type": "integer" }, "type": "array", "x-polygon-go-type": { - "name": "[]*int32" + "name": "Int32Array" } }, "e": { @@ -14564,6 +14690,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "T,c,f,i,p,q,r,s,t,x\nO:TSLA210903C00700000,227,1617901342969796400,,115.55,1325541950,202,25,1617901342969834000,312\n", + "schema": { + "type": "string" + } } }, "description": "The last trade for this options contract." @@ -14656,12 +14788,13 @@ "c": { "description": "A list of condition codes.", "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", "type": "integer" }, "type": "array", "x-polygon-go-type": { - "name": "[]*int32" + "name": "Int32Array" } }, "e": { @@ -14724,6 +14857,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "T,c,f,i,p,q,r,s,t,x,y,z\nAAPL,37,1617901342969796400,118749,129.8473,3135876,202,25,1617901342969834000,4,1617901342968000000,3\n", + "schema": { + "type": "string" + } } }, "description": "The last trade for this stock." @@ -14951,8 +15090,8 @@ { "amp_url": "https://amp.benzinga.com/amp/content/20784086", "article_url": "https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square", - "author": "Rachit Vats", - "description": "

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ: COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

\n

The investment firm’s Ark Innovation ETF (NYSE: ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

\n

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE: SKLZ), just a day after snapping 1.2 million shares of the stock.

\n

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

", + "author": "Rachit Vats", + "description": "

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

\n

The investment firm’s Ark Innovation ETF (NYSE ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

\n

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE SKLZ), just a day after snapping 1.2 million shares of the stock.

\n

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

", "id": "nJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA", "image_url": "https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720", "keywords": [ @@ -15106,7 +15245,10 @@ "path": "github.com/polygon-io/go-lib-models/v2/globals" } }, - "type": "array" + "type": "array", + "x-polygon-go-type": { + "name": "ListNewsArticlesResults" + } }, "status": { "description": "The status of this request's response.", @@ -15115,6 +15257,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "id,publisher_name,publisher_homepage_url,publisher_logo_url,publisher_favicon_url,title,author,published_utc,article_url,tickers,amp_url,image_url,description,keywords\nnJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA,Benzinga,https://www.benzinga.com/,https://s3.polygon.io/public/public/assets/news/logos/benzinga.svg,https://s3.polygon.io/public/public/assets/news/favicons/benzinga.ico,\"Cathie Wood Adds More Coinbase, Skillz, Trims Square\",Rachit Vats,2021-04-26T02:33:17Z,https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square,\"DOCU,DDD,NIU,ARKF,NVDA,SKLZ,PCAR,MASS,PSTI,SPFR,TREE,PHR,IRDM,BEAM,ARKW,ARKK,ARKG,PSTG,SQ,IONS,SYRS\",https://amp.benzinga.com/amp/content/20784086,https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720,\"

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

The investment firm’s Ark Innovation ETF (NYSE ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE SKLZ), just a day after snapping 1.2 million shares of the stock.

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

\",\"Sector ETFs,Penny Stocks,Cryptocurrency,Small Cap,Markets,Trading Ideas,ETFs\"\n", + "schema": { + "type": "string" + } } }, "description": "An array of news articles." @@ -15414,6 +15562,12 @@ } ] } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,lastTrade_c,lastTrade_i,lastTrade_p,lastTrade_s,lastTrade_t,lastTrade_x,min_c,min_h,min_l,min_o,min_v,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n16260.85,16428.4,15830.4,16418.07,105008.84231068,0,\"[2]\",464569520,16242.31,0.001933,1605294230780,4,16235.1,16264.29,16129.3,16257.51,19.30791925,0,16399.24,16418.07,16399.24,16418.07,0.99167108,16402.6893\n", + "schema": { + "type": "string" + } } }, "description": "Get current state for all tickers" @@ -15715,6 +15869,12 @@ } ] } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,lastTrade_c,lastTrade_i,lastTrade_p,lastTrade_s,lastTrade_t,lastTrade_x,min_c,min_h,min_l,min_o,min_v,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n16260.85,16428.4,15830.4,16418.07,105008.84231068,0,\"[2]\",464569520,16242.31,0.001933,1605294230780,4,16235.1,16264.29,16129.3,16257.51,19.30791925,0,16399.24,16418.07,16399.24,16418.07,0.99167108,16402.6893\n", + "schema": { + "type": "string" + } } }, "description": "Get current state for a ticker" @@ -15880,6 +16040,12 @@ } ] } + }, + "text/csv": { + "example": "side,price,size,exchange\nbid,20292.97,0.01501,1\nbid,20291.93,0.00218483,1\nask,18445.61,0.22,1\nask,18463.07,0.00234104,1\nask,18464.83,0.04159475,1\n", + "schema": { + "type": "string" + } } }, "description": "Get current level 2 book for a ticker" @@ -16175,6 +16341,12 @@ } ] } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,day_vw,lastTrade_c,lastTrade_i,lastTrade_p,lastTrade_s,lastTrade_t,lastTrade_x,day_c,day_h,day_l,day_o,day_v,day_vw,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n0.0374,0.062377,0.01162,0.044834,27313165.159427017,0,\"[2]\",517478762,0.0374,499,1604409649544,2,0.062377,0.062377,0.062377,0.062377,35420,0,0.01162,0.044834,0.01162,0.044834,53616273.36827199,0.0296\n", + "schema": { + "type": "string" + } } }, "description": "Get the current gainers / losers of the day" @@ -16432,6 +16604,12 @@ } ] } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,lastQuote_a,lastQuote_b,lastQuote_i,lastQuote_t,lastQuote_x,min_c,min_h,min_l,min_o,min_v,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n1.18403,1.1906,1.18001,1.18725,83578,1.18403,1.18398,0,1606163759000,48,1.18396,1.18423,1.1838,1.18404,41,1.18724,1.18727,1.18725,1.18725,5,0\n", + "schema": { + "type": "string" + } } }, "description": "Get current state for all tickers" @@ -16694,6 +16872,12 @@ } ] } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,lastQuote_a,lastQuote_b,lastQuote_i,lastQuote_t,lastQuote_x,min_c,min_h,min_l,min_o,min_v,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n1.18403,1.1906,1.18001,1.18725,83578,1.18403,1.18398,0,1606163759000,48,1.18396,1.18423,1.1838,1.18404,41,1.18724,1.18727,1.18725,1.18725,5,0\n", + "schema": { + "type": "string" + } } }, "description": "Get current state for a ticker" @@ -16954,6 +17138,14 @@ } ] } + }, + "text/csv": { + "example": { + "tickers": "day_c,day_h,day_l,day_o,day_v,lastQuote_a,lastQuote_b,lastQuote_t,lastQuote_x,min_c,min_h,min_l,min_o,min_v,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n0.886156,0.887111,0.8825327,0.8844732,1041,0.8879606,0.886156,1605283204000,48,0.886156,0.886156,0.886156,0.886156,1,0.8428527,0.889773,0.8428527,0.8848539,1078,0\n" + }, + "schema": { + "type": "string" + } } }, "description": "Get the current gainers / losers of the day" @@ -17303,7 +17495,13 @@ } ] } - } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,lastQuote_a,lastQuote_b,lastQuote_i,lastQuote_t,lastQuote_x,lastTrade_c,lastTrade_i,lastTrade_p,lastTrade_s,lastTrade_t,lastTrade_x,min_c,min_h,min_l,min_o,min_v,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n120.4229,120.53,118.81,119.62,28727868,119.725,120.47,4,120.46,8,1605195918507251817,\"[14,41]\",4046,120.47,236,1605195918306274031,10,28724441,120.4201,120.468,120.37,120.435,270796,120.4129,119.49,119.63,116.44,117.19,110597265,118.4998\n", + "schema": { + "type": "string" + } + } }, "description": "Get current state for all tickers" }, @@ -17643,6 +17841,12 @@ } ] } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,lastQuote_a,lastQuote_b,lastQuote_i,lastQuote_t,lastQuote_x,lastTrade_c,lastTrade_i,lastTrade_p,lastTrade_s,lastTrade_t,lastTrade_x,min_c,min_h,min_l,min_o,min_v,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n120.4229,120.53,118.81,119.62,28727868,119.725,120.47,4,120.46,8,1605195918507251817,\"[14,41]\",4046,120.47,236,1605195918306274031,10,28724441,120.4201,120.468,120.37,120.435,270796,120.4129,119.49,119.63,116.44,117.19,110597265,118.4998\n", + "schema": { + "type": "string" + } } }, "description": "Get current state for a ticker" @@ -17989,6 +18193,12 @@ } ] } + }, + "text/csv": { + "example": "day_c,day_h,day_l,day_o,day_v,day_vw,lastQuote_P,lastQuote_S,lastQuote_p,lastQuote_s,lastQuote_t,lastTrade_c,lastTrade_i,lastTrade_p,lastTrade_s,lastTrade_t,lastTrade_x,min_av,min_c,min_h,min_l,min_o,min_v,min_vw,prevDay_c,prevDay_h,prevDay_l,prevDay_o,prevDay_v,prevDay_vw\n14.2284,15.09,14.2,14.33,133963,14.5311,14.44,11,14.2,25,1605195929997325568,\"[63]\",79372124707124,14.2284,536,1605195848258266112,4,133963,14.2284,14.325,14.2,14.28,6108,14.2426,0.73,0.799,0.73,0.75,1568097,0.7721\n", + "schema": { + "type": "string" + } } }, "description": "Get the current tickers of the day" @@ -18730,17 +18940,17 @@ "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": [ { - "ask_exchange": 48, - "ask_price": 1.18565, - "bid_exchange": 48, - "bid_price": 1.18558, + "ask_exchange": "48,", + "ask_price": "1.18565,", + "bid_exchange": "48,", + "bid_price": "1.18558,", "participant_timestamp": 1625097600000000000 }, { - "ask_exchange": 48, - "ask_price": 1.18565, - "bid_exchange": 48, - "bid_price": 1.18559, + "ask_exchange": "48,", + "ask_price": "1.18565,", + "bid_exchange": "48,", + "bid_price": "1.18559,", "participant_timestamp": 1625097600000000000 } ], @@ -18794,6 +19004,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "ask_exchange,ask_price,bid_exchange,bid_price,participant_timestamp\n48,,1.18565,,48,,1.18558,,1625097600000000000\n48,,1.18565,,48,,1.18559,,1625097600000000000\n", + "schema": { + "type": "string" + } } }, "description": "A list of quotes." @@ -19028,6 +19244,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "ask_exchange,ask_price,ask_size,bid_exchange,bid_price,bid_size,sequence_number,sip_timestamp\n323,282,10,316,277.5,1,789539218,1645119125346243600\n301,282,1,323,277.5,10,788994206,1645119118474271000\n", + "schema": { + "type": "string" + } } }, "description": "A list of quotes." @@ -19246,16 +19468,22 @@ "format": "int32", "type": "integer" }, - "type": "array" + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } }, "indicators": { - "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).", + "description": "A list of indicator codes.", "items": { - "description": "The indicator code.", + "description": "The indicator codes. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).", "format": "int32", "type": "integer" }, - "type": "array" + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } }, "participant_timestamp": { "description": "The nanosecond accuracy Participant/Exchange Unix Timestamp. This is the timestamp of when the quote was actually generated at the exchange.", @@ -19306,6 +19534,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "ask_exchange,ask_price,ask_size,bid_exchange,bid_price,bid_size,conditions,participant_timestamp,sequence_number,sip_timestamp,tape\n0,0,0,11,102.7,60,1,1517562000065321216,2060,1517562000065700260,3\n0,0,0,11,170,2,1,1517562000065408256,2061,1517562000065791515,3\n", + "schema": { + "type": "string" + } } }, "description": "A list of quotes." @@ -19671,6 +19905,12 @@ ], "type": "object" } + }, + "text/csv": { + "example": "id,type,abbreviation,name,description,asset_class,sip_mapping,exchange,consolidated_updates_high_low,consolidated_updates_open_close,consolidated_updates_volume,market_center_updates_high_low,market_center_updates_open_close,market_center_updates_volume,data_types,legacy\n0,regular,,Regular Trade,,crypto,null,0,,,,,,,trade,false\n1,buy_or_sell_side,,Sell Side,The asset was sold at the prevailing best bid price on an exchange.,crypto,null,0,,,,,,,trade,false\n2,buy_or_sell_side,,Buy Side,The asset was bought at the prevailing best ask price on an exchange.,crypto,null,0,,,,,,,trade,false\n", + "schema": { + "type": "string" + } } }, "description": "OK" @@ -20525,15 +20765,7 @@ }, "declaration_date": { "description": "The date that the dividend was announced.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "dividend_type": { "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", @@ -20579,27 +20811,11 @@ }, "pay_date": { "description": "The date that the dividend is paid out.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "record_date": { "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "ticker": { "description": "The ticker symbol of the dividend.", @@ -20616,10 +20832,7 @@ }, "required": [ "ticker", - "declaration_date", "ex_dividend_date", - "record_date", - "pay_date", "frequency", "cash_amount", "dividend_type" @@ -20642,6 +20855,12 @@ ], "type": "object" } + }, + "text/csv": { + "schema": { + "example": "ticker,declaration_date,ex_dividend_date,record_date,pay_date,frequency,cash_amount,dividend_type\nAAPL,2021-10-28,2021-11-05,2021-11-08,2021-11-11,4,0.22,CD\nAAPL,2021-07-27,2021-08-06,2021-08-09,2021-08-12,4,0.22,CD\n", + "type": "string" + } } }, "description": "OK" @@ -20717,15 +20936,7 @@ }, "declaration_date": { "description": "The date that the dividend was announced.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "dividend_type": { "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", @@ -20771,27 +20982,11 @@ }, "pay_date": { "description": "The date that the dividend is paid out.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "record_date": { "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "ticker": { "description": "The ticker symbol of the dividend.", @@ -20808,10 +21003,7 @@ }, "required": [ "ticker", - "declaration_date", "ex_dividend_date", - "record_date", - "pay_date", "frequency", "cash_amount", "dividend_type" @@ -20865,15 +21057,7 @@ }, "declaration_date": { "description": "The date that the dividend was announced.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "dividend_type": { "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", @@ -20919,27 +21103,11 @@ }, "pay_date": { "description": "The date that the dividend is paid out.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "record_date": { "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } + "type": "string" }, "ticker": { "description": "The ticker symbol of the dividend.", @@ -20956,10 +21124,7 @@ }, "required": [ "ticker", - "declaration_date", "ex_dividend_date", - "record_date", - "pay_date", "frequency", "cash_amount", "dividend_type" @@ -21215,6 +21380,12 @@ ], "type": "object" } + }, + "text/csv": { + "example": "id,type,asset_class,locale,name,acronym,mic,operating_mic,participant_id,url\n1,exchange,stocks,us,\"NYSE American, LLC\",AMEX,XASE,XNYS,65,https://www.nyse.com/markets/nyse-american\n2,exchange,stocks,us,\"Nasdaq OMX BX, Inc.\",,XBOS,XNAS,66,https://www.nasdaq.com/solutions/nasdaq-bx-stock-market\n3,exchange,stocks,us,\"NYSE National, Inc.\",NSX,XCIS,XNYS,67,https://www.nyse.com/markets/nyse-national\n", + "schema": { + "type": "string" + } } }, "description": "OK" @@ -21652,6 +21823,12 @@ }, "type": "object" } + }, + "text/csv": { + "schema": { + "example": "cfi,contract_type,exercise_style,expiration_date,primary_exchange,shares_per_contract,strike_price,ticker,underlying_ticker,additional_underlyings_json\nOCASPS,call,american,2021-11-19,BATO,100,85,O:AAPL211119C00085000,AAPL,\nOCASPS,call,american,2021-11-19,BATO,100,90,O:AAPL211119C00090000,AAPL,\"[{'type': 'equity', 'underlying': 'VMW', 'amount': 44}, {'type': 'currency', 'underlying': 'USD', 'amount': 6.53}]\"\n", + "type": "string" + } } }, "description": "A list of options contracts" @@ -21832,6 +22009,12 @@ }, "type": "object" } + }, + "text/csv": { + "schema": { + "example": "cfi,contract_type,exercise_style,expiration_date,primary_exchange,shares_per_contract,strike_price,ticker,underlying_ticker,additional_underlyings_json\nOCASPS,call,american,2021-11-19,BATO,100,90,O:AAPL211119C00090000,AAPL,\"[{'type': 'equity', 'underlying': 'VMW', 'amount': 44}, {'type': 'currency', 'underlying': 'USD', 'amount': 6.53}]\"\n", + "type": "string" + } } }, "description": "A specific options contract" @@ -22062,6 +22245,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "ticker,execution_date,split_from,split_to\nAAPL,2020-08-31,1.0,4.0\nAAPL,2005-02-28,1.0,2.0\n", + "schema": { + "type": "string" + } } }, "description": "A list of stock splits." @@ -22267,25 +22456,41 @@ "content": { "application/json": { "example": { - "count": 1, - "next_url": "https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", - "request_id": "e70013d92930de90e089dc8fa098888e", - "results": [ - { - "active": true, - "cik": "0001090872", - "composite_figi": "BBG000BWQYZ5", - "currency_name": "usd", - "last_updated_utc": "2021-04-25T00:00:00Z", - "locale": "us", - "market": "stocks", - "name": "Agilent Technologies Inc.", - "primary_exchange": "XNYS", - "share_class_figi": "BBG001SCTQY4", - "ticker": "A", - "type": "CS" - } - ], + "request_id": "aa118eb5574a45d8baea953484dc0336", + "results": { + "active": true, + "address": { + "address1": "One Apple Park Way", + "city": "Cupertino", + "postal_code": "95014", + "state": "CA" + }, + "branding": { + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png", + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg" + }, + "cik": "0000320193", + "composite_figi": "BBG000B9XRY4", + "currency_name": "usd", + "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", + "homepage_url": "https://www.apple.com", + "list_date": "1980-12-12", + "locale": "us", + "market": "stocks", + "market_cap": 2771126040150, + "name": "Apple Inc.", + "phone_number": "(408) 996-1010", + "primary_exchange": "XNAS", + "share_class_figi": "BBG001S5N8V8", + "share_class_shares_outstanding": 16406400000, + "sic_code": "3571", + "sic_description": "ELECTRONIC COMPUTERS", + "ticker": "AAPL", + "ticker_root": "AAPL", + "total_employees": 154000, + "type": "CS", + "weighted_shares_outstanding": 16334371000 + }, "status": "OK" }, "schema": { @@ -22407,6 +22612,12 @@ } ] } + }, + "text/csv": { + "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", + "schema": { + "type": "string" + } } }, "description": "Reference Tickers." @@ -22534,6 +22745,12 @@ ], "type": "object" } + }, + "text/csv": { + "example": "code,description,asset_class,locale\nCS,Common Stock,stocks,us\nPFD,Preferred Stock,stocks,us\n", + "schema": { + "type": "string" + } } }, "description": "OK" @@ -22874,6 +23091,12 @@ } ] } + }, + "text/csv": { + "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", + "schema": { + "type": "string" + } } }, "description": "Reference Tickers." @@ -23179,7 +23402,10 @@ "x-polygon-go-id": "VWAP" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Day" + } }, "details": { "properties": { @@ -23224,7 +23450,10 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Details" + } }, "greeks": { "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", @@ -23250,7 +23479,10 @@ "type": "number" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Greeks" + } }, "implied_volatility": { "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", @@ -23303,7 +23535,10 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "LastQuote" + } }, "open_interest": { "description": "The quantity of this contract held at the end of the last trading day.", @@ -23345,10 +23580,16 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "UnderlyingAsset" + } } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "OptionSnapshotResult" + } }, "type": "array" }, @@ -23559,7 +23800,10 @@ "x-polygon-go-id": "VWAP" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Day" + } }, "details": { "properties": { @@ -23604,7 +23848,10 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Details" + } }, "greeks": { "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", @@ -23630,7 +23877,10 @@ "type": "number" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Greeks" + } }, "implied_volatility": { "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", @@ -23683,7 +23933,10 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "LastQuote" + } }, "open_interest": { "description": "The quantity of this contract held at the end of the last trading day.", @@ -23725,10 +23978,16 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "UnderlyingAsset" + } } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "OptionSnapshotResult" + } }, "status": { "description": "The status of this request's response.", @@ -23737,6 +23996,12 @@ }, "type": "object" } + }, + "text/csv": { + "schema": { + "example": "break_even_price,day_close,day_high,day_last_updated,day_low,day_open,day_previous_close,day_volume,day_vwap,day_change,day_change_percent,details_contract_type,details_exercise_style,details_expiration_date,details_shares_per_contract,details_strike_price,details_ticker,greeks_delta,greeks_gamma,greeks_theta,greeks_vega,implied_volatility,last_quote_ask,last_quote_ask_size,last_quote_bid,last_quote_bid_size,last_quote_last_updated,last_quote_midpoint,last_quote_timeframe,open_interest,underlying_asset_change_to_break_even,underlying_asset_last_updated,underlying_asset_price,underlying_asset_ticker,underlying_asset_timeframe\n0,171.075,21.4,22.49,1636520400000000000,21.35,22.49,22.45,37,21.6741,-1.05,-4.67,call,american,2023-06-16,100,150,O:AAPL230616C00150000,0.5520187372272933,0.00706756515659829,-0.018532772783847958,0.7274811132998142,0.3048997097864957,21.25,110,20.9,172,1636573458756383500,21.075,REAL-TIME,8921,23.123999999999995,1636573459862384600,147.951,AAPL,REAL-TIME\n", + "type": "string" + } } }, "description": "Snapshot of the option contract." @@ -23911,7 +24176,10 @@ "format": "int32", "type": "integer" }, - "type": "array" + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } }, "exchange": { "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", @@ -23952,6 +24220,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "conditions,exchange,id,participant_timestamp,price,size\n1,1,191450340,1625097600103000000,35060,1.0434526\n2,1,191450341,1625097600368000000,35059.99,0.0058883\n", + "schema": { + "type": "string" + } } }, "description": "A list of trades." @@ -24136,7 +24410,10 @@ "format": "int32", "type": "integer" }, - "type": "array" + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } }, "correction": { "description": "The trade correction indicator.", @@ -24186,6 +24463,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "conditions,exchange,participant_timestamp,price,sip_timestamp,size\n,46,1401715883806000000,6.91,1401715883806000000,1\n209,67,1401716547786000000,7.2,1401716547786000000,1\n", + "schema": { + "type": "string" + } } }, "description": "A list of trades." @@ -24374,7 +24657,10 @@ "format": "int32", "type": "integer" }, - "type": "array" + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } }, "correction": { "description": "The trade correction indicator.", @@ -24451,6 +24737,12 @@ }, "type": "object" } + }, + "text/csv": { + "example": "conditions,exchange,id,participant_timestamp,price,sequence_number,sip_timestamp,size,tape\n\"12,41\",11,1,1517562000015577088,171.55,1063,1517562000016036581,100,3\n\"12,41\",11,2,1517562000015577600,171.55,1064,1517562000016038175,100,3\n", + "schema": { + "type": "string" + } } }, "description": "A list of trades." From 0a4aaa13dac7295faae6490ca803f5e1018f542e Mon Sep 17 00:00:00 2001 From: Matthew Cramerus <8771538+suremarc@users.noreply.github.com> Date: Wed, 5 Oct 2022 15:57:23 -0400 Subject: [PATCH 176/448] serialize boolean parameters as lowercase strings in url (#313) * serialize boolean parameters as lowercase strings in url * fix unit tests * fix last unit test * fix last unit test, for real * lint --- polygon/rest/base.py | 2 ++ ...imestamp.lte=1478393873000×tamp.gte=1477972800000.json} | 0 ...×pan=minute&adjusted=true×tamp.gt=2022-08-18.json} | 0 ...an=quarter×tamp=1483958600&expand_underlying=true.json} | 0 ...5-04-01&adjusted=True.json => 2005-04-01&adjusted=true.json} | 0 ...5-04-04&adjusted=True.json => 2005-04-04&adjusted=true.json} | 0 6 files changed, 2 insertions(+) rename test_rest/mocks/v1/indicators/ema/{AAPL&window=5&adjusted=False×tamp.lte=1478393873000×tamp.gte=1477972800000.json => AAPL&window=5&adjusted=false×tamp.lte=1478393873000×tamp.gte=1477972800000.json} (100%) rename test_rest/mocks/v1/indicators/rsi/{AAPL&window=20×pan=minute&adjusted=True×tamp.gt=2022-08-18.json => AAPL&window=20×pan=minute&adjusted=true×tamp.gt=2022-08-18.json} (100%) rename test_rest/mocks/v1/indicators/sma/{AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=True.json => AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=true.json} (100%) rename test_rest/mocks/v1/open-close/AAPL/{2005-04-01&adjusted=True.json => 2005-04-01&adjusted=true.json} (100%) rename test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/{2005-04-04&adjusted=True.json => 2005-04-04&adjusted=true.json} (100%) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 8afbd330..7e35da27 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -126,6 +126,8 @@ def _get_params( val = caller_locals.get(argname, v.default) if isinstance(val, Enum): val = val.value + elif isinstance(val, bool): + val = str(val).lower() elif isinstance(val, datetime): val = int(val.timestamp() * self.time_mult(datetime_res)) if val is not None: diff --git a/test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=False×tamp.lte=1478393873000×tamp.gte=1477972800000.json b/test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=false×tamp.lte=1478393873000×tamp.gte=1477972800000.json similarity index 100% rename from test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=False×tamp.lte=1478393873000×tamp.gte=1477972800000.json rename to test_rest/mocks/v1/indicators/ema/AAPL&window=5&adjusted=false×tamp.lte=1478393873000×tamp.gte=1477972800000.json diff --git a/test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=True×tamp.gt=2022-08-18.json b/test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=true×tamp.gt=2022-08-18.json similarity index 100% rename from test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=True×tamp.gt=2022-08-18.json rename to test_rest/mocks/v1/indicators/rsi/AAPL&window=20×pan=minute&adjusted=true×tamp.gt=2022-08-18.json diff --git a/test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=True.json b/test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=true.json similarity index 100% rename from test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=True.json rename to test_rest/mocks/v1/indicators/sma/AAPL&window=30×pan=quarter×tamp=1483958600&expand_underlying=true.json diff --git a/test_rest/mocks/v1/open-close/AAPL/2005-04-01&adjusted=True.json b/test_rest/mocks/v1/open-close/AAPL/2005-04-01&adjusted=true.json similarity index 100% rename from test_rest/mocks/v1/open-close/AAPL/2005-04-01&adjusted=True.json rename to test_rest/mocks/v1/open-close/AAPL/2005-04-01&adjusted=true.json diff --git a/test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04&adjusted=True.json b/test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04&adjusted=true.json similarity index 100% rename from test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04&adjusted=True.json rename to test_rest/mocks/v2/aggs/grouped/locale/us/market/stocks/2005-04-04&adjusted=true.json From 8e6457155fb28840a54104b1fd7dadc89fe1ada5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Oct 2022 16:56:14 +0000 Subject: [PATCH 177/448] Bump black from 22.8.0 to 22.10.0 (#314) Bumps [black](https://github.com/psf/black) from 22.8.0 to 22.10.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/22.8.0...22.10.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 50 ++++++++++++++++++++++++-------------------------- pyproject.toml | 2 +- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/poetry.lock b/poetry.lock index 015cff68..6f1ac341 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,11 +33,11 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "22.8.0" +version = "22.10.0" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" [package.dependencies] click = ">=8.0.0" @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "bfc00d1ae1ef2a1b942958071d18ae46ff153a5cf60e62c91d1874e7ef47b803" +content-hash = "75c285ce767c0f807db60728fabda4108702b9ada73a6d1af11f24e46d10b8c7" [metadata.files] alabaster = [ @@ -580,29 +580,27 @@ babel = [ {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, ] black = [ - {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, - {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, - {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, - {file = "black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, - {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, - {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, - {file = "black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, - {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, - {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, - {file = "black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, - {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, - {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, - {file = "black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, - {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, - {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, - {file = "black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, - {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, - {file = "black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, - {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, + {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, + {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, + {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, + {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, + {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, + {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, + {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, + {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, + {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, + {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, + {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, + {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, + {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, + {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, + {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, + {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, + {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, + {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, + {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, + {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, + {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, ] certifi = [ {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, diff --git a/pyproject.toml b/pyproject.toml index 51697a94..ccf2ca27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = "^10.3" certifi = "^2022.5.18" [tool.poetry.dev-dependencies] -black = "^22.8.0" +black = "^22.10.0" mypy = "^0.982" types-urllib3 = "^1.26.25" Sphinx = "^5.2.3" From da6a1bb09cba36298a8b67168d996e423ca1a561 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 12:31:43 -0400 Subject: [PATCH 178/448] Bump sphinx from 5.2.3 to 5.3.0 (#315) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.2.3 to 5.3.0. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.2.3...v5.3.0) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 22 +++++++++++----------- pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6f1ac341..fc6b24a9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -18,7 +18,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "sphinx", "sphinx-notfound-page", "zope.interface"] docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] [[package]] name = "babel" @@ -70,7 +70,7 @@ optional = false python-versions = ">=3.5.0" [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -187,7 +187,7 @@ pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format_nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] [[package]] name = "markupsafe" @@ -329,7 +329,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] [[package]] name = "six" @@ -348,8 +348,8 @@ optional = false python-versions = "*" [[package]] -name = "Sphinx" -version = "5.2.3" +name = "sphinx" +version = "5.3.0" description = "Python documentation generator" category = "dev" optional = false @@ -392,7 +392,7 @@ Sphinx = ">=5.1.1" [package.extras] testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "diff-cover (>=6.5.1)", "nptyping (>=2.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] -type_comments = ["typed-ast (>=1.5.4)"] +type-comments = ["typed-ast (>=1.5.4)"] [[package]] name = "sphinx-rtd-theme" @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "75c285ce767c0f807db60728fabda4108702b9ada73a6d1af11f24e46d10b8c7" +content-hash = "3e539d49fb8b15c5c0a203060d5ce3a0b7cd98d2408c671a7ec3ade03d1e2f8f" [metadata.files] alabaster = [ @@ -790,9 +790,9 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -Sphinx = [ - {file = "Sphinx-5.2.3.tar.gz", hash = "sha256:5b10cb1022dac8c035f75767799c39217a05fc0fe2d6fe5597560d38e44f0363"}, - {file = "sphinx-5.2.3-py3-none-any.whl", hash = "sha256:7abf6fabd7b58d0727b7317d5e2650ef68765bbe0ccb63c8795fa8683477eaa2"}, +sphinx = [ + {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, + {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, ] sphinx-autodoc-typehints = [ {file = "sphinx_autodoc_typehints-1.19.2-py3-none-any.whl", hash = "sha256:3d761de928d5a86901331133d6d4a2552afa2e798ebcfc0886791792aeb4dd9a"}, diff --git a/pyproject.toml b/pyproject.toml index ccf2ca27..57accf71 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = "^2022.5.18" black = "^22.10.0" mypy = "^0.982" types-urllib3 = "^1.26.25" -Sphinx = "^5.2.3" +Sphinx = "^5.3.0" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" From 5d6dc572fd6b6041b3e3caed3ea5a4603d7f8729 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 12:41:22 -0400 Subject: [PATCH 179/448] Bump types-urllib3 from 1.26.25 to 1.26.25.1 (#316) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.25 to 1.26.25.1. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index fc6b24a9..4264209b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -506,7 +506,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.25" +version = "1.26.25.1" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -839,8 +839,8 @@ types-setuptools = [ {file = "types_setuptools-65.4.0.0-py3-none-any.whl", hash = "sha256:ce178b3f7dbd6c0e67f8eee7ae29c1be280ade7e5188bdd9e620843de4060d85"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.25.tar.gz", hash = "sha256:5aef0e663724eef924afa8b320b62ffef2c1736c1fa6caecfc9bc6c8ae2c3def"}, - {file = "types_urllib3-1.26.25-py3-none-any.whl", hash = "sha256:c1d78cef7bd581e162e46c20a57b2e1aa6ebecdcf01fd0713bb90978ff3e3427"}, + {file = "types-urllib3-1.26.25.1.tar.gz", hash = "sha256:a948584944b2412c9a74b9cf64f6c48caf8652cb88b38361316f6d15d8a184cd"}, + {file = "types_urllib3-1.26.25.1-py3-none-any.whl", hash = "sha256:f6422596cc9ee5fdf68f9d547f541096a20c2dcfd587e37c804c9ea720bf5cb2"}, ] typing-extensions = [ {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, From 99e2fb3bc65706f6c45f16f74ce8f903066841d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 12:49:26 -0400 Subject: [PATCH 180/448] Bump types-setuptools from 65.4.0.0 to 65.5.0.1 (#317) Bumps [types-setuptools](https://github.com/python/typeshed) from 65.4.0.0 to 65.5.0.1. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4264209b..dcc211a2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -498,7 +498,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "65.4.0.0" +version = "65.5.0.1" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -564,7 +564,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>= [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "3e539d49fb8b15c5c0a203060d5ce3a0b7cd98d2408c671a7ec3ade03d1e2f8f" +content-hash = "c07e0e0a4cf20352c34cfeefb577c3c088771803146e705d8994a23f2d4b58a8" [metadata.files] alabaster = [ @@ -835,8 +835,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-65.4.0.0.tar.gz", hash = "sha256:d9021d6a70690b34e7bd2947e7ab10167c646fbf062508cb56581be2e2a1615e"}, - {file = "types_setuptools-65.4.0.0-py3-none-any.whl", hash = "sha256:ce178b3f7dbd6c0e67f8eee7ae29c1be280ade7e5188bdd9e620843de4060d85"}, + {file = "types-setuptools-65.5.0.1.tar.gz", hash = "sha256:5b297081c8f1fbd992cd8b305a97ed96ee6ffc765e9115124029597dd10b8a71"}, + {file = "types_setuptools-65.5.0.1-py3-none-any.whl", hash = "sha256:601d45b5e9979d2b931de5403aa11153626a1eadd1ce9727b21f24673ced5ceb"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.25.1.tar.gz", hash = "sha256:a948584944b2412c9a74b9cf64f6c48caf8652cb88b38361316f6d15d8a184cd"}, diff --git a/pyproject.toml b/pyproject.toml index 57accf71..fb7848a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" -types-setuptools = "^65.4.0" +types-setuptools = "^65.5.0" pook = "^1.0.2" [build-system] From 24764cd01a8a6bd812d5068ce9e582b1358b712e Mon Sep 17 00:00:00 2001 From: clickingbuttons Date: Tue, 18 Oct 2022 13:17:42 -0400 Subject: [PATCH 181/448] Set issue deadline of 3w (#318) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bf0cb001..2c052f4d 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ section in our docs or view the [examples](./examples) directory. If you found a bug or have an idea for a new feature, please first discuss it with us by [submitting a new issue](https://github.com/polygon-io/client-python/issues/new/choose). +We will respond to issues within at most 3 weeks. We're also open to volunteers if you want to submit a PR for any open issues but please discuss it with us beforehand. PRs that aren't linked to an existing issue or discussed with us ahead of time will generally be declined. If you have more general From 8c54311d44c8747c21ef24fc1037124ad60d6a0e Mon Sep 17 00:00:00 2001 From: cf <64846322+at-cf@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:49:24 -0400 Subject: [PATCH 182/448] feat: provide custom json module (#306) * feat: provide custom json module * fix: custom json module missing/formatting * docs: provide custom json module * fix: custom json import typos * fixup examples Co-authored-by: clickingbuttons Co-authored-by: zack <43246297+clickingbuttons@users.noreply.github.com> --- docs/requirements.txt | 2 +- docs/source/Getting-Started.rst | 7 + examples/rest/custom-json-get.py | 9 + examples/websocket/custom-json.py | 16 ++ poetry.lock | 354 +++++++++--------------------- polygon/rest/__init__.py | 5 +- polygon/rest/base.py | 7 +- polygon/websocket/__init__.py | 24 +- pyproject.toml | 1 + 9 files changed, 168 insertions(+), 257 deletions(-) create mode 100644 examples/rest/custom-json-get.py create mode 100644 examples/websocket/custom-json.py diff --git a/docs/requirements.txt b/docs/requirements.txt index b72deef5..e8c712fd 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,2 @@ -sphinx-autodoc-typehints~=1.18.1 +sphinx-autodoc-typehints~=1.19.2 websockets~=10.3 diff --git a/docs/source/Getting-Started.rst b/docs/source/Getting-Started.rst index 15b9321e..a723f93f 100644 --- a/docs/source/Getting-Started.rst +++ b/docs/source/Getting-Started.rst @@ -53,6 +53,10 @@ If it is a paginated :code:`list_*` response it's up to you to handle the "next_ .. literalinclude:: ../../examples/rest/raw-list.py +To provide your own JSON processing library (exposing loads/dumps functions) pass :code:`custom_json=my_module`: + +.. literalinclude:: ../../examples/websocket/custom-json-get.py + WebSocket client usage ---------------------- @@ -80,3 +84,6 @@ To handle raw string or byte messages yourself pass :code:`raw=True`: .. literalinclude:: ../../examples/websocket/raw.py +To provide your own JSON processing library (exposing loads/dumps functions) pass :code:`custom_json=my_module`: + +.. literalinclude:: ../../examples/websocket/custom-json.py diff --git a/examples/rest/custom-json-get.py b/examples/rest/custom-json-get.py new file mode 100644 index 00000000..c10d0a03 --- /dev/null +++ b/examples/rest/custom-json-get.py @@ -0,0 +1,9 @@ +from polygon import RESTClient + +# type: ignore +import orjson + +client = RESTClient(custom_json=orjson) + +aggs = client.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04") +print(aggs) diff --git a/examples/websocket/custom-json.py b/examples/websocket/custom-json.py new file mode 100644 index 00000000..a659e767 --- /dev/null +++ b/examples/websocket/custom-json.py @@ -0,0 +1,16 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List + +# type: ignore +import orjson + +c = WebSocketClient(subscriptions=["T.*"], custom_json=orjson) + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + +c.run(handle_msg) diff --git a/poetry.lock b/poetry.lock index dcc211a2..62eef5cd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,21 +8,21 @@ python-versions = "*" [[package]] name = "attrs" -version = "21.4.0" +version = "22.1.0" description = "Classes Without Boilerplate" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.5" [package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "zope.interface"] -tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "babel" -version = "2.10.1" +version = "2.10.3" description = "Internationalization utilities" category = "dev" optional = false @@ -63,14 +63,14 @@ python-versions = ">=3.6" [[package]] name = "charset-normalizer" -version = "2.0.12" +version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "dev" optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.6.0" [package.extras] -unicode-backport = ["unicodedata2"] +unicode_backport = ["unicodedata2"] [[package]] name = "click" @@ -85,11 +85,11 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "colorama" -version = "0.4.5" +version = "0.4.6" description = "Cross-platform colored terminal text." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" [[package]] name = "docutils" @@ -113,7 +113,7 @@ six = ">=1.8.0" [[package]] name = "idna" -version = "3.3" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" category = "dev" optional = false @@ -121,7 +121,7 @@ python-versions = ">=3.5" [[package]] name = "imagesize" -version = "1.3.0" +version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "dev" optional = false @@ -129,7 +129,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.11.3" +version = "5.0.0" description = "Read metadata from Python packages" category = "dev" optional = false @@ -139,13 +139,13 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "importlib-resources" -version = "5.7.1" +version = "5.10.0" description = "Read resources from Python packages" category = "dev" optional = false @@ -155,8 +155,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "jinja2" @@ -174,7 +174,7 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jsonschema" -version = "4.5.1" +version = "4.16.0" description = "An implementation of JSON Schema validation for Python" category = "dev" optional = false @@ -183,6 +183,7 @@ python-versions = ">=3.7" [package.dependencies] attrs = ">=17.4.0" importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" [package.extras] @@ -234,6 +235,14 @@ python-versions = "*" [package.dependencies] six = ">=1.8.0" +[[package]] +name = "orjson" +version = "3.8.1" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +category = "dev" +optional = false +python-versions = ">=3.7" + [[package]] name = "packaging" version = "21.3" @@ -247,11 +256,19 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pathspec" -version = "0.9.0" +version = "0.10.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +category = "dev" +optional = false +python-versions = ">=3.6" [[package]] name = "platformdirs" @@ -262,8 +279,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pook" @@ -280,12 +297,15 @@ xmltodict = ">=0.11.0" [[package]] name = "pygments" -version = "2.12.0" +version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false python-versions = ">=3.6" +[package.extras] +plugins = ["importlib-metadata"] + [[package]] name = "pyparsing" version = "3.0.9" @@ -295,7 +315,7 @@ optional = false python-versions = ">=3.6.8" [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pyrsistent" @@ -307,7 +327,7 @@ python-versions = ">=3.7" [[package]] name = "pytz" -version = "2022.1" +version = "2022.5" description = "World timezone definitions, modern and historical" category = "dev" optional = false @@ -315,21 +335,21 @@ python-versions = "*" [[package]] name = "requests" -version = "2.27.1" +version = "2.28.1" description = "Python HTTP for Humans." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7, <4" [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "six" @@ -376,23 +396,24 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] +lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest (>=4.6)", "html5lib", "typed-ast", "cython"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.19.2" +version = "1.19.4" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -Sphinx = ">=5.1.1" +sphinx = ">=5.2.1" [package.extras] -testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "diff-cover (>=6.5.1)", "nptyping (>=2.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] -type-comments = ["typed-ast (>=1.5.4)"] +docs = ["furo (>=2022.9.15)", "sphinx-autodoc-typehints (>=1.19.3)", "sphinx (>=5.2.1)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.4.4)", "diff-cover (>=7.0.1)", "nptyping (>=2.3.1)", "pytest-cov (>=3)", "pytest (>=7.1.3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] +type-comment = ["typed-ast (>=1.5.4)"] [[package]] name = "sphinx-rtd-theme" @@ -407,7 +428,7 @@ docutils = "<0.18" sphinx = ">=1.6" [package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] [[package]] name = "sphinxcontrib-applehelp" @@ -418,7 +439,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] [[package]] @@ -430,7 +451,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] [[package]] @@ -442,8 +463,8 @@ optional = false python-versions = ">=3.6" [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] -test = ["html5lib", "pytest"] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] [[package]] name = "sphinxcontrib-jsmath" @@ -454,7 +475,7 @@ optional = false python-versions = ">=3.5" [package.extras] -test = ["flake8", "mypy", "pytest"] +test = ["pytest", "flake8", "mypy"] [[package]] name = "sphinxcontrib-qthelp" @@ -465,7 +486,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] [[package]] @@ -477,7 +498,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["docutils-stubs", "flake8", "mypy"] +lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] [[package]] @@ -498,7 +519,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "65.5.0.1" +version = "65.5.0.2" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -514,7 +535,7 @@ python-versions = "*" [[package]] name = "typing-extensions" -version = "4.2.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false @@ -529,13 +550,13 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "websockets" -version = "10.3" +version = "10.4" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" category = "main" optional = false @@ -551,73 +572,36 @@ python-versions = ">=3.4" [[package]] name = "zipp" -version = "3.8.0" +version = "3.10.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "c07e0e0a4cf20352c34cfeefb577c3c088771803146e705d8994a23f2d4b58a8" +content-hash = "fbf86aa7af58c7986474bdc0ea8c7628fca422650c51cb160419a531065f100a" [metadata.files] alabaster = [ {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -babel = [ - {file = "Babel-2.10.1-py3-none-any.whl", hash = "sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2"}, - {file = "Babel-2.10.1.tar.gz", hash = "sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13"}, -] -black = [ - {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, - {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, - {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, - {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, - {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, - {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, - {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, - {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, - {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, - {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, - {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, - {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, - {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, - {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, - {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, - {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, - {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, - {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, - {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, - {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, - {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, -] -certifi = [ - {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, - {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, -] +attrs = [] +babel = [] +black = [] +certifi = [] +charset-normalizer = [] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] -colorama = [ - {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, - {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, -] +colorama = [] docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, @@ -626,30 +610,15 @@ furl = [ {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, ] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -imagesize = [ - {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, - {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, - {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, -] -importlib-resources = [ - {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, - {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, -] +idna = [] +imagesize = [] +importlib-metadata = [] +importlib-resources = [] jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] -jsonschema = [ - {file = "jsonschema-4.5.1-py3-none-any.whl", hash = "sha256:71b5e39324422543546572954ce71c67728922c104902cb7ce252e522235b33f"}, - {file = "jsonschema-4.5.1.tar.gz", hash = "sha256:7c6d882619340c3347a1bf7315e147e6d3dae439033ae6383d6acb908c101dfc"}, -] +jsonschema = [] markupsafe = [ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, @@ -692,32 +661,7 @@ markupsafe = [ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] -mypy = [ - {file = "mypy-0.982-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5085e6f442003fa915aeb0a46d4da58128da69325d8213b4b35cc7054090aed5"}, - {file = "mypy-0.982-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:41fd1cf9bc0e1c19b9af13a6580ccb66c381a5ee2cf63ee5ebab747a4badeba3"}, - {file = "mypy-0.982-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f793e3dd95e166b66d50e7b63e69e58e88643d80a3dcc3bcd81368e0478b089c"}, - {file = "mypy-0.982-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86ebe67adf4d021b28c3f547da6aa2cce660b57f0432617af2cca932d4d378a6"}, - {file = "mypy-0.982-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:175f292f649a3af7082fe36620369ffc4661a71005aa9f8297ea473df5772046"}, - {file = "mypy-0.982-cp310-cp310-win_amd64.whl", hash = "sha256:8ee8c2472e96beb1045e9081de8e92f295b89ac10c4109afdf3a23ad6e644f3e"}, - {file = "mypy-0.982-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58f27ebafe726a8e5ccb58d896451dd9a662a511a3188ff6a8a6a919142ecc20"}, - {file = "mypy-0.982-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6af646bd46f10d53834a8e8983e130e47d8ab2d4b7a97363e35b24e1d588947"}, - {file = "mypy-0.982-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7aeaa763c7ab86d5b66ff27f68493d672e44c8099af636d433a7f3fa5596d40"}, - {file = "mypy-0.982-cp37-cp37m-win_amd64.whl", hash = "sha256:724d36be56444f569c20a629d1d4ee0cb0ad666078d59bb84f8f887952511ca1"}, - {file = "mypy-0.982-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14d53cdd4cf93765aa747a7399f0961a365bcddf7855d9cef6306fa41de01c24"}, - {file = "mypy-0.982-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26ae64555d480ad4b32a267d10cab7aec92ff44de35a7cd95b2b7cb8e64ebe3e"}, - {file = "mypy-0.982-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6389af3e204975d6658de4fb8ac16f58c14e1bacc6142fee86d1b5b26aa52bda"}, - {file = "mypy-0.982-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b35ce03a289480d6544aac85fa3674f493f323d80ea7226410ed065cd46f206"}, - {file = "mypy-0.982-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c6e564f035d25c99fd2b863e13049744d96bd1947e3d3d2f16f5828864506763"}, - {file = "mypy-0.982-cp38-cp38-win_amd64.whl", hash = "sha256:cebca7fd333f90b61b3ef7f217ff75ce2e287482206ef4a8b18f32b49927b1a2"}, - {file = "mypy-0.982-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a705a93670c8b74769496280d2fe6cd59961506c64f329bb179970ff1d24f9f8"}, - {file = "mypy-0.982-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75838c649290d83a2b83a88288c1eb60fe7a05b36d46cbea9d22efc790002146"}, - {file = "mypy-0.982-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:91781eff1f3f2607519c8b0e8518aad8498af1419e8442d5d0afb108059881fc"}, - {file = "mypy-0.982-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa97b9ddd1dd9901a22a879491dbb951b5dec75c3b90032e2baa7336777363b"}, - {file = "mypy-0.982-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a692a8e7d07abe5f4b2dd32d731812a0175626a90a223d4b58f10f458747dd8a"}, - {file = "mypy-0.982-cp39-cp39-win_amd64.whl", hash = "sha256:eb7a068e503be3543c4bd329c994103874fa543c1727ba5288393c21d912d795"}, - {file = "mypy-0.982-py3-none-any.whl", hash = "sha256:1021c241e8b6e1ca5a47e4d52601274ac078a89845cfde66c6d5f769819ffa1d"}, - {file = "mypy-0.982.tar.gz", hash = "sha256:85f7a343542dc8b1ed0a888cdd34dca56462654ef23aa673907305b260b3d746"}, -] +mypy = [] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, @@ -726,14 +670,13 @@ orderedmultidict = [ {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, ] +orjson = [] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] +pathspec = [] +pkgutil-resolve-name = [] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, @@ -743,14 +686,8 @@ pook = [ {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, ] -pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] +pygments = [] +pyparsing = [] pyrsistent = [ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, @@ -774,14 +711,8 @@ pyrsistent = [ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, ] -pytz = [ - {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, - {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, -] -requests = [ - {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, - {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, -] +pytz = [] +requests = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -790,14 +721,8 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -sphinx = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, -] -sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.19.2-py3-none-any.whl", hash = "sha256:3d761de928d5a86901331133d6d4a2552afa2e798ebcfc0886791792aeb4dd9a"}, - {file = "sphinx_autodoc_typehints-1.19.2.tar.gz", hash = "sha256:872fb2d7b3d794826c28e36edf6739e93549491447dcabeb07c58855e9f914de"}, -] +sphinx = [] +sphinx-autodoc-typehints = [] sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, @@ -830,81 +755,14 @@ tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -types-certifi = [ - {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, - {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, -] -types-setuptools = [ - {file = "types-setuptools-65.5.0.1.tar.gz", hash = "sha256:5b297081c8f1fbd992cd8b305a97ed96ee6ffc765e9115124029597dd10b8a71"}, - {file = "types_setuptools-65.5.0.1-py3-none-any.whl", hash = "sha256:601d45b5e9979d2b931de5403aa11153626a1eadd1ce9727b21f24673ced5ceb"}, -] -types-urllib3 = [ - {file = "types-urllib3-1.26.25.1.tar.gz", hash = "sha256:a948584944b2412c9a74b9cf64f6c48caf8652cb88b38361316f6d15d8a184cd"}, - {file = "types_urllib3-1.26.25.1-py3-none-any.whl", hash = "sha256:f6422596cc9ee5fdf68f9d547f541096a20c2dcfd587e37c804c9ea720bf5cb2"}, -] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, -] -websockets = [ - {file = "websockets-10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:661f641b44ed315556a2fa630239adfd77bd1b11cb0b9d96ed8ad90b0b1e4978"}, - {file = "websockets-10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b529fdfa881b69fe563dbd98acce84f3e5a67df13de415e143ef053ff006d500"}, - {file = "websockets-10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f351c7d7d92f67c0609329ab2735eee0426a03022771b00102816a72715bb00b"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379e03422178436af4f3abe0aa8f401aa77ae2487843738542a75faf44a31f0c"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e904c0381c014b914136c492c8fa711ca4cced4e9b3d110e5e7d436d0fc289e8"}, - {file = "websockets-10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7e6f2d6fd48422071cc8a6f8542016f350b79cc782752de531577d35e9bd677"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9c77f0d1436ea4b4dc089ed8335fa141e6a251a92f75f675056dac4ab47a71e"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e6fa05a680e35d0fcc1470cb070b10e6fe247af54768f488ed93542e71339d6f"}, - {file = "websockets-10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f94fa3ae454a63ea3a19f73b95deeebc9f02ba2d5617ca16f0bbdae375cda47"}, - {file = "websockets-10.3-cp310-cp310-win32.whl", hash = "sha256:6ed1d6f791eabfd9808afea1e068f5e59418e55721db8b7f3bfc39dc831c42ae"}, - {file = "websockets-10.3-cp310-cp310-win_amd64.whl", hash = "sha256:347974105bbd4ea068106ec65e8e8ebd86f28c19e529d115d89bd8cc5cda3079"}, - {file = "websockets-10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fab7c640815812ed5f10fbee7abbf58788d602046b7bb3af9b1ac753a6d5e916"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:994cdb1942a7a4c2e10098d9162948c9e7b235df755de91ca33f6e0481366fdb"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:aad5e300ab32036eb3fdc350ad30877210e2f51bceaca83fb7fef4d2b6c72b79"}, - {file = "websockets-10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e49ea4c1a9543d2bd8a747ff24411509c29e4bdcde05b5b0895e2120cb1a761d"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ea6b300a6bdd782e49922d690e11c3669828fe36fc2471408c58b93b5535a98"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ef5ce841e102278c1c2e98f043db99d6755b1c58bde475516aef3a008ed7f28e"}, - {file = "websockets-10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d1655a6fc7aecd333b079d00fb3c8132d18988e47f19740c69303bf02e9883c6"}, - {file = "websockets-10.3-cp37-cp37m-win32.whl", hash = "sha256:83e5ca0d5b743cde3d29fda74ccab37bdd0911f25bd4cdf09ff8b51b7b4f2fa1"}, - {file = "websockets-10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:da4377904a3379f0c1b75a965fff23b28315bcd516d27f99a803720dfebd94d4"}, - {file = "websockets-10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a1e15b230c3613e8ea82c9fc6941b2093e8eb939dd794c02754d33980ba81e36"}, - {file = "websockets-10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:31564a67c3e4005f27815634343df688b25705cccb22bc1db621c781ddc64c69"}, - {file = "websockets-10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c8d1d14aa0f600b5be363077b621b1b4d1eb3fbf90af83f9281cda668e6ff7fd"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fbd7d77f8aba46d43245e86dd91a8970eac4fb74c473f8e30e9c07581f852b2"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:210aad7fdd381c52e58777560860c7e6110b6174488ef1d4b681c08b68bf7f8c"}, - {file = "websockets-10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6075fd24df23133c1b078e08a9b04a3bc40b31a8def4ee0b9f2c8865acce913e"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f6d96fdb0975044fdd7953b35d003b03f9e2bcf85f2d2cf86285ece53e9f991"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c7250848ce69559756ad0086a37b82c986cd33c2d344ab87fea596c5ac6d9442"}, - {file = "websockets-10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:28dd20b938a57c3124028680dc1600c197294da5db4292c76a0b48efb3ed7f76"}, - {file = "websockets-10.3-cp38-cp38-win32.whl", hash = "sha256:54c000abeaff6d8771a4e2cef40900919908ea7b6b6a30eae72752607c6db559"}, - {file = "websockets-10.3-cp38-cp38-win_amd64.whl", hash = "sha256:7ab36e17af592eec5747c68ef2722a74c1a4a70f3772bc661079baf4ae30e40d"}, - {file = "websockets-10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a141de3d5a92188234afa61653ed0bbd2dde46ad47b15c3042ffb89548e77094"}, - {file = "websockets-10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:97bc9d41e69a7521a358f9b8e44871f6cdeb42af31815c17aed36372d4eec667"}, - {file = "websockets-10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d6353ba89cfc657a3f5beabb3b69be226adbb5c6c7a66398e17809b0ce3c4731"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec2b0ab7edc8cd4b0eb428b38ed89079bdc20c6bdb5f889d353011038caac2f9"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:85506b3328a9e083cc0a0fb3ba27e33c8db78341b3eb12eb72e8afd166c36680"}, - {file = "websockets-10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8af75085b4bc0b5c40c4a3c0e113fa95e84c60f4ed6786cbb675aeb1ee128247"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07cdc0a5b2549bcfbadb585ad8471ebdc7bdf91e32e34ae3889001c1c106a6af"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5b936bf552e4f6357f5727579072ff1e1324717902127ffe60c92d29b67b7be3"}, - {file = "websockets-10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e4e08305bfd76ba8edab08dcc6496f40674f44eb9d5e23153efa0a35750337e8"}, - {file = "websockets-10.3-cp39-cp39-win32.whl", hash = "sha256:bb621ec2dbbbe8df78a27dbd9dd7919f9b7d32a73fafcb4d9252fc4637343582"}, - {file = "websockets-10.3-cp39-cp39-win_amd64.whl", hash = "sha256:51695d3b199cd03098ae5b42833006a0f43dc5418d3102972addc593a783bc02"}, - {file = "websockets-10.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:907e8247480f287aa9bbc9391bd6de23c906d48af54c8c421df84655eef66af7"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1359aba0ff810d5830d5ab8e2c4a02bebf98a60aa0124fb29aa78cfdb8031f"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:93d5ea0b5da8d66d868b32c614d2b52d14304444e39e13a59566d4acb8d6e2e4"}, - {file = "websockets-10.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7934e055fd5cd9dee60f11d16c8d79c4567315824bacb1246d0208a47eca9755"}, - {file = "websockets-10.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3eda1cb7e9da1b22588cefff09f0951771d6ee9fa8dbe66f5ae04cc5f26b2b55"}, - {file = "websockets-10.3.tar.gz", hash = "sha256:fc06cc8073c8e87072138ba1e431300e2d408f054b27047d047b549455066ff4"}, -] +types-certifi = [] +types-setuptools = [] +types-urllib3 = [] +typing-extensions = [] +urllib3 = [] +websockets = [] xmltodict = [ {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, ] -zipp = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, -] +zipp = [] diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index a7cdbf95..98bdf27b 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -13,7 +13,7 @@ ContractsClient, ) from .vX import VXClient -from typing import Optional +from typing import Optional, Any import os @@ -44,6 +44,7 @@ def __init__( retries: int = 3, base: str = BASE, verbose: bool = False, + custom_json: Optional[Any] = None, ): super().__init__( api_key=api_key, @@ -53,6 +54,7 @@ def __init__( retries=retries, base=base, verbose=verbose, + custom_json=custom_json, ) self.vx = VXClient( api_key=api_key, @@ -62,4 +64,5 @@ def __init__( retries=retries, base=base, verbose=verbose, + custom_json=custom_json, ) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 7e35da27..a2e914f9 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -28,6 +28,7 @@ def __init__( retries: int, base: str, verbose: bool, + custom_json: Optional[Any] = None, ): if api_key is None: raise AuthError( @@ -51,9 +52,13 @@ def __init__( self.retries = retries if verbose: logger.setLevel(logging.DEBUG) + if custom_json: + self.json = custom_json + else: + self.json = json def _decode(self, resp): - return json.loads(resp.data.decode("utf-8")) + return self.json.loads(resp.data.decode("utf-8")) def _get( self, diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 66a9dd9a..4875a1ac 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -1,6 +1,6 @@ import os from enum import Enum -from typing import Optional, Union, List, Set, Callable, Awaitable +from typing import Optional, Union, List, Set, Callable, Awaitable, Any import logging import json import asyncio @@ -28,6 +28,7 @@ def __init__( subscriptions: Optional[List[str]] = None, max_reconnects: Optional[int] = 5, secure: bool = True, + custom_json: Optional[Any] = None, **kwargs, ): """ @@ -39,6 +40,7 @@ def __init__( :param verbose: Whether to log client and server status messages. :param subscriptions: List of subscription parameters. :param max_reconnects: How many times to reconnect on network outage before ending .connect event loop. + :param custom_json: Optional module exposing loads/dumps functions (similar to Python's json module) to be used for JSON conversions. :return: A client. """ if api_key is None: @@ -65,6 +67,10 @@ def __init__( subscriptions = [] self.scheduled_subs: Set[str] = set(subscriptions) self.schedule_resub = True + if custom_json: + self.json = custom_json + else: + self.json = json # https://websockets.readthedocs.io/en/stable/reference/client.html#opening-a-connection async def connect( @@ -99,9 +105,11 @@ async def connect( msg = await s.recv() logger.debug("connected: %s", msg) logger.debug("authing...") - await s.send(json.dumps({"action": "auth", "params": self.api_key})) + await s.send( + self.json.dumps({"action": "auth", "params": self.api_key}) + ) auth_msg = await s.recv() - auth_msg_parsed = json.loads(auth_msg) + auth_msg_parsed = self.json.loads(auth_msg) logger.debug("authed: %s", auth_msg) if auth_msg_parsed[0]["status"] == "auth_failed": raise AuthError(auth_msg_parsed[0]["message"]) @@ -127,7 +135,7 @@ async def connect( if not self.raw: # we know cmsg is Data - msgJson = json.loads(cmsg) # type: ignore + msgJson = self.json.loads(cmsg) # type: ignore for m in msgJson: if m["ev"] == "status": logger.debug("status: %s", m["message"]) @@ -176,14 +184,18 @@ async def _subscribe(self, topics: Union[List[str], Set[str]]): return subs = ",".join(topics) logger.debug("subbing: %s", subs) - await self.websocket.send(json.dumps({"action": "subscribe", "params": subs})) + await self.websocket.send( + self.json.dumps({"action": "subscribe", "params": subs}) + ) async def _unsubscribe(self, topics: Union[List[str], Set[str]]): if self.websocket is None or len(topics) == 0: return subs = ",".join(topics) logger.debug("unsubbing: %s", subs) - await self.websocket.send(json.dumps({"action": "unsubscribe", "params": subs})) + await self.websocket.send( + self.json.dumps({"action": "unsubscribe", "params": subs}) + ) @staticmethod def _parse_subscription(s: str): diff --git a/pyproject.toml b/pyproject.toml index fb7848a9..65be64aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,7 @@ sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" types-setuptools = "^65.5.0" pook = "^1.0.2" +orjson = "^3.8.1" [build-system] requires = ["poetry-core>=1.0.0"] From 1c753615a046490e35cd1757a35fefaf7999c11d Mon Sep 17 00:00:00 2001 From: "Jake K. Dodd" <6845693+jakekdodd@users.noreply.github.com> Date: Mon, 31 Oct 2022 07:12:49 -0700 Subject: [PATCH 183/448] include date param in get_ticker_details (#321) --- polygon/rest/reference.py | 2 +- .../tickers/AAPL&date=2020-10-01.json | 38 +++++++++++++++++++ test_rest/test_tickers.py | 5 +++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 test_rest/mocks/v3/reference/tickers/AAPL&date=2020-10-01.json diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index e6f5c4f3..143b7511 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -137,7 +137,7 @@ def get_ticker_details( return self._get( path=url, - params=params, + params=self._get_params(self.get_ticker_details, locals()), deserializer=TickerDetails.from_dict, raw=raw, result_key="results", diff --git a/test_rest/mocks/v3/reference/tickers/AAPL&date=2020-10-01.json b/test_rest/mocks/v3/reference/tickers/AAPL&date=2020-10-01.json new file mode 100644 index 00000000..80f3e470 --- /dev/null +++ b/test_rest/mocks/v3/reference/tickers/AAPL&date=2020-10-01.json @@ -0,0 +1,38 @@ +{ + "results": { + "ticker": "AAPL", + "name": "Apple Inc.", + "market": "stocks", + "locale": "us", + "primary_exchange": "XNAS", + "type": "CS", + "active": true, + "currency_name": "usd", + "cik": "0000320193", + "composite_figi": "BBG000B9XRY4", + "share_class_figi": "BBG001S5N8V8", + "market_cap": 1916103105630, + "phone_number": "(408) 996-1010", + "address": { + "address1": "ONE APPLE PARK WAY", + "city": "CUPERTINO", + "state": "CA", + "postal_code": "95014" + }, + "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", + "sic_code": "3571", + "sic_description": "ELECTRONIC COMPUTERS", + "ticker_root": "AAPL", + "homepage_url": "https://www.apple.com", + "total_employees": 154000, + "list_date": "1980-12-12", + "branding": { + "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-05-01_logo.svg", + "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-05-01_icon.png" + }, + "share_class_shares_outstanding": 16319440000, + "weighted_shares_outstanding": 16185181000 + }, + "status": "OK", + "request_id": "ce8688b5f3a571351376ebd77acd146e" +} diff --git a/test_rest/test_tickers.py b/test_rest/test_tickers.py index b965753e..b42aa4b9 100644 --- a/test_rest/test_tickers.py +++ b/test_rest/test_tickers.py @@ -128,6 +128,11 @@ def test_get_ticker_details(self): ) self.assertEqual(details, expected) + expected.market_cap = 1916103105630 + details = self.c.get_ticker_details("AAPL", date="2020-10-01") + + self.assertEqual(details, expected) + def test_list_ticker_news(self): news = [t for t in self.c.list_ticker_news("NFLX")] expected = [ From 4c4109f54284254509b0a913e6379e472dd3864a Mon Sep 17 00:00:00 2001 From: Daniel Vetter <93154633+danielatpolygonio@users.noreply.github.com> Date: Fri, 18 Nov 2022 11:33:33 -0500 Subject: [PATCH 184/448] Update CODEOWNERS (#331) * Update CODEOWNERS * Update CODEOWNERS * Update CODEOWNERS --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b89ada2f..8a8da73b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @clickingbuttons @Darcy-Linde +* @danielatpolygonio @mmoghaddam385 From 9b50d03160578cc65fec33bd4b3f3b53d93047a8 Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Mon, 28 Nov 2022 07:52:56 -0800 Subject: [PATCH 185/448] Added get_ticker_history and tests to client library. (#319) * Added get_events and tests to client library. RV1: - added get_events function to client library - added tests. RV2: - changed get_ticker_events to get_ticker_history RV3: - changed history to events and modifed classes to meet new requirements. * run make rest-spec Co-authored-by: danielatpolygonio <93154633+danielatpolygonio@users.noreply.github.com> --- .polygon/rest.json | 1123 ++++++++--------- polygon/rest/models/tickers.py | 32 + polygon/rest/reference.py | 25 + .../vX/reference/tickers/META/events.json | 25 + test_rest/test_tickers.py | 24 + 5 files changed, 612 insertions(+), 617 deletions(-) create mode 100644 test_rest/mocks/vX/reference/tickers/META/events.json diff --git a/.polygon/rest.json b/.polygon/rest.json index 354de4e2..92a41f15 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -4217,253 +4217,6 @@ "description": "The volume weighted average price.", "format": "double", "type": "number" - }, - "v3TickerDetails": { - "properties": { - "results": { - "description": "Ticker with details.\n", - "properties": { - "active": { - "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", - "type": "boolean" - }, - "address": { - "properties": { - "address1": { - "description": "The first line of the company's headquarters address.", - "type": "string" - }, - "city": { - "description": "The city of the company's headquarters address.", - "type": "string" - }, - "postal_code": { - "description": "The postal code of the company's headquarters address.", - "type": "string" - }, - "state": { - "description": "The state of the company's headquarters address.", - "type": "string" - } - }, - "type": "object" - }, - "branding": { - "properties": { - "icon_url": { - "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", - "type": "string" - }, - "logo_url": { - "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", - "type": "string" - } - }, - "type": "object" - }, - "cik": { - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", - "type": "string" - }, - "composite_figi": { - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "currency_name": { - "description": "The name of the currency that this asset is traded with.", - "type": "string" - }, - "delisted_utc": { - "description": "The last date that the asset was traded.", - "format": "date-time", - "type": "string" - }, - "description": { - "description": "A description of the company and what they do/offer.", - "type": "string" - }, - "homepage_url": { - "description": "The URL of the company's website homepage.", - "type": "string" - }, - "list_date": { - "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD.", - "type": "string" - }, - "locale": { - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ], - "type": "string" - }, - "market": { - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ], - "type": "string" - }, - "market_cap": { - "description": "The most recent close price of the ticker multiplied by weighted outstanding shares.", - "format": "double", - "type": "number" - }, - "name": { - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", - "type": "string" - }, - "phone_number": { - "description": "The phone number for the company behind this ticker.", - "type": "string" - }, - "primary_exchange": { - "description": "The ISO code of the primary listing exchange for this asset.", - "type": "string" - }, - "share_class_figi": { - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "share_class_shares_outstanding": { - "description": "The recorded number of outstanding shares for this particular share class.", - "format": "double", - "type": "number" - }, - "sic_code": { - "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n", - "type": "string" - }, - "sic_description": { - "description": "A description of this ticker's SIC code.", - "type": "string" - }, - "ticker": { - "description": "The exchange symbol that this item is traded under.", - "type": "string" - }, - "ticker_root": { - "description": "The root of a specified ticker. For example, the root of BRK.A is BRK.", - "type": "string" - }, - "ticker_suffix": { - "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A.", - "type": "string" - }, - "total_employees": { - "description": "The approximate number of employees for the company.", - "type": "number" - }, - "type": { - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", - "type": "string" - }, - "weighted_shares_outstanding": { - "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n", - "format": "double", - "type": "number" - } - }, - "required": [ - "ticker", - "name", - "market", - "locale", - "active", - "currency_name" - ], - "type": "object" - } - }, - "type": "object" - }, - "v3Tickers": { - "properties": { - "results": { - "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", - "items": { - "properties": { - "active": { - "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", - "type": "boolean" - }, - "cik": { - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", - "type": "string" - }, - "composite_figi": { - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "currency_name": { - "description": "The name of the currency that this asset is traded with.", - "type": "string" - }, - "delisted_utc": { - "description": "The last date that the asset was traded.", - "format": "date-time", - "type": "string" - }, - "last_updated_utc": { - "description": "The information is accurate up to this time.", - "format": "date-time", - "type": "string" - }, - "locale": { - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ], - "type": "string" - }, - "market": { - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ], - "type": "string" - }, - "name": { - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", - "type": "string" - }, - "primary_exchange": { - "description": "The ISO code of the primary listing exchange for this asset.", - "type": "string" - }, - "share_class_figi": { - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "ticker": { - "description": "The exchange symbol that this item is traded under.", - "type": "string" - }, - "type": { - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", - "type": "string" - } - }, - "required": [ - "ticker", - "name", - "market", - "locale" - ], - "type": "object" - }, - "type": "array" - } - }, - "type": "object" } }, "securitySchemes": { @@ -22281,10 +22034,11 @@ }, "/v3/reference/tickers": { "get": { - "description": "Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex.\n", + "description": "Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex.", + "operationId": "ListTickers", "parameters": [ { - "description": "Specify a ticker symbol.\nDefaults to empty string which queries all tickers.\n", + "description": "Specify a ticker symbol.\nDefaults to empty string which queries all tickers.", "in": "query", "name": "ticker", "schema": { @@ -22295,7 +22049,7 @@ } }, { - "description": "Specify the type of the tickers. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).\nDefaults to empty string which queries all types.\n", + "description": "Specify the type of the tickers. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).\nDefaults to empty string which queries all types.", "in": "query", "name": "type", "schema": { @@ -22328,7 +22082,7 @@ } }, { - "description": "Filter by market type. By default all markets are included.\n", + "description": "Filter by market type. By default all markets are included.", "in": "query", "name": "market", "schema": { @@ -22342,7 +22096,7 @@ } }, { - "description": "Specify the primary exchange of the asset in the ISO code format. Find more information about the ISO codes [at the ISO org website](https://www.iso20022.org/market-identifier-codes).\nDefaults to empty string which queries all exchanges.\n", + "description": "Specify the primary exchange of the asset in the ISO code format. Find more information about the ISO codes [at the ISO org website](https://www.iso20022.org/market-identifier-codes).\nDefaults to empty string which queries all exchanges.", "in": "query", "name": "exchange", "schema": { @@ -22350,7 +22104,7 @@ } }, { - "description": "Specify the CUSIP code of the asset you want to search for. Find more information about CUSIP codes [at their website](https://www.cusip.com/identifiers.html#/CUSIP).\nDefaults to empty string which queries all CUSIPs.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", + "description": "Specify the CUSIP code of the asset you want to search for. Find more information about CUSIP codes [at their website](https://www.cusip.com/identifiers.html#/CUSIP).\nDefaults to empty string which queries all CUSIPs.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.", "in": "query", "name": "cusip", "schema": { @@ -22358,7 +22112,7 @@ } }, { - "description": "Specify the CIK of the asset you want to search for. Find more information about CIK codes [at their website](https://www.sec.gov/edgar/searchedgar/cik.htm).\nDefaults to empty string which queries all CIKs.\n", + "description": "Specify the CIK of the asset you want to search for. Find more information about CIK codes [at their website](https://www.sec.gov/edgar/searchedgar/cik.htm).\nDefaults to empty string which queries all CIKs.", "in": "query", "name": "cik", "schema": { @@ -22366,24 +22120,16 @@ } }, { - "description": "Specify a point in time to retrieve tickers available on that date.\nDefaults to the most recent available date.\n", + "description": "Specify a point in time to retrieve tickers available on that date.\nDefaults to the most recent available date.", "in": "query", "name": "date", "schema": { - "oneOf": [ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - } - ] + "format": "date", + "type": "string" } }, { - "description": "Search for terms within the ticker and/or company name.\n", + "description": "Search for terms within the ticker and/or company name.", "in": "query", "name": "search", "schema": { @@ -22391,7 +22137,7 @@ } }, { - "description": "Specify if the tickers returned should be actively traded on the queried date. Default is true.\n", + "description": "Specify if the tickers returned should be actively traded on the queried date. Default is true.", "example": true, "in": "query", "name": "active", @@ -22400,34 +22146,39 @@ } }, { - "description": "The field to sort the results on. Default is ticker.\nIf the `search` query parameter is present, `sort` is ignored and results are ordered by relevance.\n", - "example": "ticker", + "description": "Search by ticker.", "in": "query", - "name": "sort", + "name": "ticker.gte", "schema": { - "enum": [ - "ticker", - "name", - "market", - "locale", - "primary_exchange", - "type", - "currency_symbol", - "currency_name", - "base_currency_symbol", - "base_currency_name", - "cik", - "composite_figi", - "share_class_figi", - "last_updated_utc", - "delisted_utc" - ], "type": "string" } }, { - "description": "The order to sort the results on. Default is asc (ascending).\n", - "example": "asc", + "description": "Search by ticker.", + "in": "query", + "name": "ticker.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by ticker.", + "in": "query", + "name": "ticker.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", "in": "query", "name": "order", "schema": { @@ -22435,20 +22186,48 @@ "asc", "desc" ], + "example": "asc", "type": "string" } }, { - "description": "Limit the size of the response, default is 100 and max is 1000.\n\nIf your query returns more than the max limit and you want to retrieve the next page of results,\nsee the `next_url` response attribute.\n", - "example": 10, + "description": "Limit the number of results returned, default is 100 and max is 1000.", "in": "query", "name": "limit", "schema": { "default": 100, + "example": 100, "maximum": 1000, "minimum": 1, "type": "integer" } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker", + "name", + "market", + "locale", + "primary_exchange", + "type", + "currency_symbol", + "currency_name", + "base_currency_symbol", + "base_currency_name", + "cik", + "composite_figi", + "share_class_figi", + "last_updated_utc", + "delisted_utc" + ], + "example": "ticker", + "type": "string" + } } ], "responses": { @@ -22456,165 +22235,134 @@ "content": { "application/json": { "example": { - "request_id": "aa118eb5574a45d8baea953484dc0336", - "results": { - "active": true, - "address": { - "address1": "One Apple Park Way", - "city": "Cupertino", - "postal_code": "95014", - "state": "CA" + "count": 1, + "next_url": "https://api.polygon.io/v3/reference/tickers?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "e70013d92930de90e089dc8fa098888e", + "results": [ + { + "active": true, + "cik": "0001090872", + "composite_figi": "BBG000BWQYZ5", + "currency_name": "usd", + "last_updated_utc": "2021-04-25T00:00:00Z", + "locale": "us", + "market": "stocks", + "name": "Agilent Technologies Inc.", + "primary_exchange": "XNYS", + "share_class_figi": "BBG001SCTQY4", + "ticker": "A", + "type": "CS" + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" }, - "branding": { - "icon_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png", - "logo_url": "https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg" + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, - "cik": "0000320193", - "composite_figi": "BBG000B9XRY4", - "currency_name": "usd", - "description": "Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.", - "homepage_url": "https://www.apple.com", - "list_date": "1980-12-12", - "locale": "us", - "market": "stocks", - "market_cap": 2771126040150, - "name": "Apple Inc.", - "phone_number": "(408) 996-1010", - "primary_exchange": "XNAS", - "share_class_figi": "BBG001S5N8V8", - "share_class_shares_outstanding": 16406400000, - "sic_code": "3571", - "sic_description": "ELECTRONIC COMPUTERS", - "ticker": "AAPL", - "ticker_root": "AAPL", - "total_employees": 154000, - "type": "CS", - "weighted_shares_outstanding": 16334371000 - }, - "status": "OK" - }, - "schema": { - "allOf": [ - { - "properties": { - "results": { - "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.\n", - "items": { - "properties": { - "active": { - "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", - "type": "boolean" - }, - "cik": { - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", - "type": "string" - }, - "composite_figi": { - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "currency_name": { - "description": "The name of the currency that this asset is traded with.", - "type": "string" - }, - "delisted_utc": { - "description": "The last date that the asset was traded.", - "format": "date-time", - "type": "string" - }, - "last_updated_utc": { - "description": "The information is accurate up to this time.", - "format": "date-time", - "type": "string" - }, - "locale": { - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ], - "type": "string" - }, - "market": { - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ], - "type": "string" - }, - "name": { - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", - "type": "string" - }, - "primary_exchange": { - "description": "The ISO code of the primary listing exchange for this asset.", - "type": "string" - }, - "share_class_figi": { - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "ticker": { - "description": "The exchange symbol that this item is traded under.", - "type": "string" - }, - "type": { - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", - "type": "string" - } - }, - "required": [ - "ticker", - "name", - "market", - "locale" + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "description": "An array of tickers that match your query.\n\nNote: Although you can query by CUSIP, due to legal reasons we do not return the CUSIP in the response.", + "items": { + "properties": { + "active": { + "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", + "type": "boolean" + }, + "cik": { + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", + "type": "string" + }, + "composite_figi": { + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "currency_name": { + "description": "The name of the currency that this asset is traded with.", + "type": "string" + }, + "delisted_utc": { + "description": "The last date that the asset was traded.", + "format": "date-time", + "type": "string" + }, + "last_updated_utc": { + "description": "The information is accurate up to this time.", + "format": "date-time", + "type": "string" + }, + "locale": { + "description": "The locale of the asset.", + "enum": [ + "us", + "global" ], - "type": "object" + "type": "string" }, - "type": "array" - } - }, - "type": "object" - }, - { - "properties": { - "next_url": { - "description": "If present, this value can be used to fetch the next page of data.", - "type": "string" - } - }, - "type": "object" - }, - { - "properties": { - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - } - }, - "type": "object" - }, - { - "properties": { - "count": { - "description": "The total number of results for this request.", - "type": "integer" + "market": { + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx", + "otc" + ], + "type": "string" + }, + "name": { + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.", + "type": "string" + }, + "primary_exchange": { + "description": "The ISO code of the primary listing exchange for this asset.", + "type": "string" + }, + "share_class_figi": { + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "type": { + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", + "type": "string" + } }, - "status": { - "description": "The status of this request's response.", - "type": "string" + "required": [ + "ticker", + "name", + "market", + "locale" + ], + "type": "object", + "x-polygon-go-type": { + "name": "ReferenceTicker", + "path": "github.com/polygon-io/go-lib-models/v2/globals" } }, - "type": "object" + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } - ] + }, + "type": "object" } }, "text/csv": { - "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", + "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,last_updated_utc\nA,Agilent Technologies Inc.,stocks,us,XNYS,CS,true,usd,0001090872,BBG000BWQYZ5,BBG001SCTQY4,2021-04-25T00:00:00Z\n", "schema": { "type": "string" } @@ -22633,6 +22381,32 @@ "x-polygon-entitlement-data-type": { "description": "Reference data", "name": "reference" + }, + "x-polygon-paginate": { + "limit": { + "default": 100, + "max": 1000 + }, + "sort": { + "default": "ticker", + "enum": [ + "ticker", + "name", + "market", + "locale", + "primary_exchange", + "type", + "currency_symbol", + "currency_name", + "base_currency_symbol", + "base_currency_name", + "cik", + "composite_figi", + "share_class_figi", + "last_updated_utc", + "delisted_utc" + ] + } } } }, @@ -22830,7 +22604,8 @@ }, "/v3/reference/tickers/{ticker}": { "get": { - "description": "Get a single ticker supported by Polygon.io. This response will have detailed information about the ticker and the company behind it.\n", + "description": "Get a single ticker supported by Polygon.io. This response will have detailed information about the ticker and the company behind it.", + "operationId": "GetTicker", "parameters": [ { "description": "The ticker symbol of the asset.", @@ -22843,20 +22618,12 @@ } }, { - "description": "Specify a point in time to get information about the ticker available on that date.\nWhen retrieving information from SEC filings, we compare this date with the period of report date on the SEC filing.\n\nFor example, consider an SEC filing submitted by AAPL on 2019-07-31, with a period of report date ending on 2019-06-29.\nThat means that the filing was submitted on 2019-07-31, but the filing was created based on information from 2019-06-29.\nIf you were to query for AAPL details on 2019-06-29, the ticker details would include information from the SEC filing.\n\nDefaults to the most recent available date.\n", + "description": "Specify a point in time to get information about the ticker available on that date.\nWhen retrieving information from SEC filings, we compare this date with the period of report date on the SEC filing.\n\nFor example, consider an SEC filing submitted by AAPL on 2019-07-31, with a period of report date ending on 2019-06-29.\nThat means that the filing was submitted on 2019-07-31, but the filing was created based on information from 2019-06-29.\nIf you were to query for AAPL details on 2019-06-29, the ticker details would include information from the SEC filing.\n\nDefaults to the most recent available date.", "in": "query", "name": "date", "schema": { - "oneOf": [ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - } - ] + "format": "date", + "type": "string" } } ], @@ -22903,193 +22670,183 @@ "status": "OK" }, "schema": { - "allOf": [ - { + "properties": { + "count": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "description": "Ticker with details.", "properties": { - "results": { - "description": "Ticker with details.\n", + "active": { + "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", + "type": "boolean" + }, + "address": { "properties": { - "active": { - "description": "Whether or not the asset is actively traded. False means the asset has been delisted.", - "type": "boolean" - }, - "address": { - "properties": { - "address1": { - "description": "The first line of the company's headquarters address.", - "type": "string" - }, - "city": { - "description": "The city of the company's headquarters address.", - "type": "string" - }, - "postal_code": { - "description": "The postal code of the company's headquarters address.", - "type": "string" - }, - "state": { - "description": "The state of the company's headquarters address.", - "type": "string" - } - }, - "type": "object" - }, - "branding": { - "properties": { - "icon_url": { - "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", - "type": "string" - }, - "logo_url": { - "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.\n", - "type": "string" - } - }, - "type": "object" - }, - "cik": { - "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", - "type": "string" - }, - "composite_figi": { - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "currency_name": { - "description": "The name of the currency that this asset is traded with.", + "address1": { + "description": "The first line of the company's headquarters address.", "type": "string" }, - "delisted_utc": { - "description": "The last date that the asset was traded.", - "format": "date-time", + "city": { + "description": "The city of the company's headquarters address.", "type": "string" }, - "description": { - "description": "A description of the company and what they do/offer.", + "postal_code": { + "description": "The postal code of the company's headquarters address.", "type": "string" }, - "homepage_url": { - "description": "The URL of the company's website homepage.", + "state": { + "description": "The state of the company's headquarters address.", "type": "string" - }, - "list_date": { - "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD.", - "type": "string" - }, - "locale": { - "description": "The locale of the asset.", - "enum": [ - "us", - "global" - ], - "type": "string" - }, - "market": { - "description": "The market type of the asset.", - "enum": [ - "stocks", - "crypto", - "fx", - "otc" - ], - "type": "string" - }, - "market_cap": { - "description": "The most recent close price of the ticker multiplied by weighted outstanding shares.", - "format": "double", - "type": "number" - }, - "name": { - "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.\n", - "type": "string" - }, - "phone_number": { - "description": "The phone number for the company behind this ticker.", - "type": "string" - }, - "primary_exchange": { - "description": "The ISO code of the primary listing exchange for this asset.", - "type": "string" - }, - "share_class_figi": { - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", - "type": "string" - }, - "share_class_shares_outstanding": { - "description": "The recorded number of outstanding shares for this particular share class.", - "format": "double", - "type": "number" - }, - "sic_code": { - "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.\n", - "type": "string" - }, - "sic_description": { - "description": "A description of this ticker's SIC code.", - "type": "string" - }, - "ticker": { - "description": "The exchange symbol that this item is traded under.", - "type": "string" - }, - "ticker_root": { - "description": "The root of a specified ticker. For example, the root of BRK.A is BRK.", - "type": "string" - }, - "ticker_suffix": { - "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A.", + } + }, + "type": "object" + }, + "branding": { + "properties": { + "icon_url": { + "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", "type": "string" }, - "total_employees": { - "description": "The approximate number of employees for the company.", - "type": "number" - }, - "type": { - "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", + "logo_url": { + "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", "type": "string" - }, - "weighted_shares_outstanding": { - "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.\n", - "format": "double", - "type": "number" } }, - "required": [ - "ticker", - "name", - "market", - "locale", - "active", - "currency_name" - ], "type": "object" - } - }, - "type": "object" - }, - { - "properties": { - "request_id": { - "description": "A request id assigned by the server.", + }, + "cik": { + "description": "The CIK number for this ticker. Find more information [here](https://en.wikipedia.org/wiki/Central_Index_Key).", "type": "string" - } - }, - "type": "object" - }, - { - "properties": { - "count": { - "description": "The total number of results for this request.", - "type": "integer" }, - "status": { - "description": "The status of this request's response.", + "composite_figi": { + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "currency_name": { + "description": "The name of the currency that this asset is traded with.", + "type": "string" + }, + "delisted_utc": { + "description": "The last date that the asset was traded.", + "format": "date-time", + "type": "string" + }, + "description": { + "description": "A description of the company and what they do/offer.", + "type": "string" + }, + "homepage_url": { + "description": "The URL of the company's website homepage.", + "type": "string" + }, + "list_date": { + "description": "The date that the symbol was first publicly listed in the format YYYY-MM-DD.", + "type": "string" + }, + "locale": { + "description": "The locale of the asset.", + "enum": [ + "us", + "global" + ], + "type": "string" + }, + "market": { + "description": "The market type of the asset.", + "enum": [ + "stocks", + "crypto", + "fx", + "otc" + ], + "type": "string" + }, + "market_cap": { + "description": "The most recent close price of the ticker multiplied by weighted outstanding shares.", + "format": "double", + "type": "number" + }, + "name": { + "description": "The name of the asset. For stocks/equities this will be the companies registered name. For crypto/fx this will be the name of the currency or coin pair.", + "type": "string" + }, + "phone_number": { + "description": "The phone number for the company behind this ticker.", + "type": "string" + }, + "primary_exchange": { + "description": "The ISO code of the primary listing exchange for this asset.", + "type": "string" + }, + "share_class_figi": { + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "type": "string" + }, + "share_class_shares_outstanding": { + "description": "The recorded number of outstanding shares for this particular share class.", + "format": "double", + "type": "number" + }, + "sic_code": { + "description": "The standard industrial classification code for this ticker. For a list of SIC Codes, see the SEC's SIC Code List.", + "type": "string" + }, + "sic_description": { + "description": "A description of this ticker's SIC code.", + "type": "string" + }, + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "ticker_root": { + "description": "The root of a specified ticker. For example, the root of BRK.A is BRK.", + "type": "string" + }, + "ticker_suffix": { + "description": "The suffix of a specified ticker. For example, the suffix of BRK.A is A.", + "type": "string" + }, + "total_employees": { + "description": "The approximate number of employees for the company.", + "type": "number" + }, + "type": { + "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", "type": "string" + }, + "weighted_shares_outstanding": { + "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.", + "format": "double", + "type": "number" } }, - "type": "object" + "required": [ + "ticker", + "name", + "market", + "locale", + "active", + "currency_name" + ], + "type": "object", + "x-polygon-go-type": { + "name": "ReferenceTicker", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } - ] + }, + "type": "object" } }, "text/csv": { @@ -25284,6 +25041,133 @@ } } } + }, + "/vX/reference/tickers/{id}/events": { + "get": { + "description": "Get a timeline of events for the entity associated with the given ticker, CUSIP, or Composite FIGI.", + "operationId": "GetEvents", + "parameters": [ + { + "description": "Identifier of an asset. This can currently be a Ticker, CUSIP, or Composite FIGI.\nWhen given a ticker, we return events for the entity currently represented by that ticker.\nTo find events for entities previously associated with a ticker, find the relevant identifier using the \n[Ticker Details Endpoint](https://polygon.io/docs/stocks/get_v3_reference_tickers__ticker)", + "example": "META", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "A comma-separated list of the types of event to include. Currently ticker_change is the only supported event_type.\nLeave blank to return all supported event_types.", + "in": "query", + "name": "types", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "results": { + "events": [ + { + "date": "2022-06-09", + "ticker_change": { + "ticker": "META" + }, + "type": "ticker_change" + }, + { + "date": "2012-05-18", + "ticker_change": { + "ticker": "FB" + }, + "type": "ticker_change" + } + ], + "name": "Meta Platforms, Inc. Class A Common Stock" + }, + "status": "OK" + }, + "schema": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "events": { + "items": { + "oneOf": [ + { + "properties": { + "date": { + "description": "The date the event took place", + "format": "date", + "type": "string" + }, + "event_type": { + "description": "The type of historical event for the asset", + "type": "string" + }, + "ticker_change": { + "properties": { + "ticker": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "event_type", + "date" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "EventsResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Ticker Events." + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "summary": "Ticker Events", + "tags": [ + "reference:tickers:get" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-experimental": {} + } } }, "security": [ @@ -25736,6 +25620,11 @@ "/v3/reference/tickers/{ticker}" ] }, + { + "paths": [ + "/vX/reference/tickers/{id}/events" + ] + }, { "paths": [ "/v2/reference/news" diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 831429ad..448bfd11 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -185,3 +185,35 @@ class TickerTypes: @staticmethod def from_dict(d): return TickerTypes(**d) + + +@modelclass +class TickerChange: + ticker: str + + @staticmethod + def from_dict(d): + return TickerChange(**d) + + +@modelclass +class TickerChangeEvent: + type: str + date: str + ticker_change: TickerChange + + @staticmethod + def from_dict(d): + return TickerChangeEvent(**d) + + +@modelclass +class TickerChangeResults: + name: str + figi: str + cik: str + events: Optional[List[TickerChangeEvent]] = None + + @staticmethod + def from_dict(d): + return TickerChangeResults(**d) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 143b7511..eeb7163f 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -4,6 +4,7 @@ MarketHoliday, MarketStatus, Ticker, + TickerChangeResults, TickerDetails, TickerNews, TickerTypes, @@ -143,6 +144,30 @@ def get_ticker_details( result_key="results", ) + def get_ticker_events( + self, + ticker: Optional[str] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[TickerChangeResults, HTTPResponse]: + + """ + Get event history of ticker given particular point in time. + :param ticker: The ticker symbol of the asset. + :param params: Additional query parameters + :param raw: Return raw object instead of results object. + :return: Ticker Event VX + """ + url = f"/vX/reference/tickers/{ticker}/events" + + return self._get( + path=url, + params=params, + deserializer=TickerChangeResults.from_dict, + result_key="results", + raw=raw, + ) + def list_ticker_news( self, ticker: Optional[str] = None, diff --git a/test_rest/mocks/vX/reference/tickers/META/events.json b/test_rest/mocks/vX/reference/tickers/META/events.json new file mode 100644 index 00000000..2aea67cf --- /dev/null +++ b/test_rest/mocks/vX/reference/tickers/META/events.json @@ -0,0 +1,25 @@ +{ + "results": { + "name": "Meta Platforms, Inc. Class A Common Stock", + "figi": "BBG000MM2P62", + "cik": "0001326801", + "events": [ + { + "ticker_change": { + "ticker": "META" + }, + "type": "ticker_change", + "date": "2022-06-11" + }, + { + "ticker_change": { + "ticker": "FB" + }, + "type": "ticker_change", + "date": "2012-05-18" + } + ] + }, + "status": "OK", + "request_id": "8c911ff1-5ca8-41e8-9bbf-e625141caacc" +} \ No newline at end of file diff --git a/test_rest/test_tickers.py b/test_rest/test_tickers.py index b42aa4b9..f45b487a 100644 --- a/test_rest/test_tickers.py +++ b/test_rest/test_tickers.py @@ -3,6 +3,8 @@ TickerDetails, TickerNews, TickerTypes, + TickerChangeEvent, + TickerChangeResults, Publisher, Branding, CompanyAddress, @@ -235,3 +237,25 @@ def test_get_ticker_types(self): ] self.assertEqual(types, expected) + + def test_get_ticker_events_ticker_change(self): + events = self.c.get_ticker_events(ticker="META") + expected = TickerChangeResults( + name="Meta Platforms, Inc. Class A Common Stock", + figi="BBG000MM2P62", + cik="0001326801", + events=[ + { + "ticker_change": {"ticker": "META"}, + "type": "ticker_change", + "date": "2022-06-11", + }, + { + "ticker_change": {"ticker": "FB"}, + "type": "ticker_change", + "date": "2012-05-18", + }, + ], + ) + + self.assertEqual(expected, events) From bf2dcef917ffa46bb1f5fe1f2a7b656df517412f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Nov 2022 15:55:34 +0000 Subject: [PATCH 186/448] Bump types-setuptools from 65.5.0.2 to 65.5.0.3 (#329) Bumps [types-setuptools](https://github.com/python/typeshed) from 65.5.0.2 to 65.5.0.3. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Daniel Vetter <93154633+danielatpolygonio@users.noreply.github.com> --- poetry.lock | 355 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 297 insertions(+), 58 deletions(-) diff --git a/poetry.lock b/poetry.lock index 62eef5cd..7059648c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -15,10 +15,10 @@ optional = false python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] name = "babel" @@ -70,7 +70,7 @@ optional = false python-versions = ">=3.6.0" [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -139,9 +139,9 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] [[package]] name = "importlib-resources" @@ -155,8 +155,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [[package]] name = "jinja2" @@ -279,8 +279,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] [[package]] name = "pook" @@ -315,7 +315,7 @@ optional = false python-versions = ">=3.6.8" [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrsistent" @@ -349,7 +349,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "six" @@ -396,8 +396,8 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-comprehensions", "flake8-bugbear", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest (>=4.6)", "html5lib", "typed-ast", "cython"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] [[package]] name = "sphinx-autodoc-typehints" @@ -411,8 +411,8 @@ python-versions = ">=3.7" sphinx = ">=5.2.1" [package.extras] -docs = ["furo (>=2022.9.15)", "sphinx-autodoc-typehints (>=1.19.3)", "sphinx (>=5.2.1)"] -testing = ["covdefaults (>=2.2)", "coverage (>=6.4.4)", "diff-cover (>=7.0.1)", "nptyping (>=2.3.1)", "pytest-cov (>=3)", "pytest (>=7.1.3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] +docs = ["furo (>=2022.9.15)", "sphinx (>=5.2.1)", "sphinx-autodoc-typehints (>=1.19.3)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.4.4)", "diff-cover (>=7.0.1)", "nptyping (>=2.3.1)", "pytest (>=7.1.3)", "pytest-cov (>=3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] type-comment = ["typed-ast (>=1.5.4)"] [[package]] @@ -428,7 +428,7 @@ docutils = "<0.18" sphinx = ">=1.6" [package.extras] -dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] [[package]] name = "sphinxcontrib-applehelp" @@ -439,7 +439,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -451,7 +451,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -463,8 +463,8 @@ optional = false python-versions = ">=3.6" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] [[package]] name = "sphinxcontrib-jsmath" @@ -475,7 +475,7 @@ optional = false python-versions = ">=3.5" [package.extras] -test = ["pytest", "flake8", "mypy"] +test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" @@ -486,7 +486,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -498,7 +498,7 @@ optional = false python-versions = ">=3.5" [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] @@ -519,7 +519,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "65.5.0.2" +version = "65.5.0.3" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -550,8 +550,8 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -579,8 +579,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" @@ -592,16 +592,53 @@ alabaster = [ {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] -attrs = [] -babel = [] -black = [] -certifi = [] -charset-normalizer = [] +attrs = [ + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, +] +babel = [ + {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, + {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, +] +black = [ + {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, + {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, + {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, + {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, + {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, + {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, + {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, + {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, + {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, + {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, + {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, + {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, + {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, + {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, + {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, + {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, + {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, + {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, + {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, + {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, + {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, +] +certifi = [ + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] -colorama = [] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] docutils = [ {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, @@ -610,15 +647,30 @@ furl = [ {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, ] -idna = [] -imagesize = [] -importlib-metadata = [] -importlib-resources = [] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +imagesize = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] +importlib-metadata = [ + {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, + {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, +] +importlib-resources = [ + {file = "importlib_resources-5.10.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, + {file = "importlib_resources-5.10.0.tar.gz", hash = "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668"}, +] jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] -jsonschema = [] +jsonschema = [ + {file = "jsonschema-4.16.0-py3-none-any.whl", hash = "sha256:9e74b8f9738d6a946d70705dc692b74b5429cd0960d58e79ffecfc43b2221eb9"}, + {file = "jsonschema-4.16.0.tar.gz", hash = "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23"}, +] markupsafe = [ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, @@ -661,7 +713,32 @@ markupsafe = [ {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] -mypy = [] +mypy = [ + {file = "mypy-0.982-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5085e6f442003fa915aeb0a46d4da58128da69325d8213b4b35cc7054090aed5"}, + {file = "mypy-0.982-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:41fd1cf9bc0e1c19b9af13a6580ccb66c381a5ee2cf63ee5ebab747a4badeba3"}, + {file = "mypy-0.982-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f793e3dd95e166b66d50e7b63e69e58e88643d80a3dcc3bcd81368e0478b089c"}, + {file = "mypy-0.982-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86ebe67adf4d021b28c3f547da6aa2cce660b57f0432617af2cca932d4d378a6"}, + {file = "mypy-0.982-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:175f292f649a3af7082fe36620369ffc4661a71005aa9f8297ea473df5772046"}, + {file = "mypy-0.982-cp310-cp310-win_amd64.whl", hash = "sha256:8ee8c2472e96beb1045e9081de8e92f295b89ac10c4109afdf3a23ad6e644f3e"}, + {file = "mypy-0.982-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58f27ebafe726a8e5ccb58d896451dd9a662a511a3188ff6a8a6a919142ecc20"}, + {file = "mypy-0.982-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6af646bd46f10d53834a8e8983e130e47d8ab2d4b7a97363e35b24e1d588947"}, + {file = "mypy-0.982-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7aeaa763c7ab86d5b66ff27f68493d672e44c8099af636d433a7f3fa5596d40"}, + {file = "mypy-0.982-cp37-cp37m-win_amd64.whl", hash = "sha256:724d36be56444f569c20a629d1d4ee0cb0ad666078d59bb84f8f887952511ca1"}, + {file = "mypy-0.982-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14d53cdd4cf93765aa747a7399f0961a365bcddf7855d9cef6306fa41de01c24"}, + {file = "mypy-0.982-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26ae64555d480ad4b32a267d10cab7aec92ff44de35a7cd95b2b7cb8e64ebe3e"}, + {file = "mypy-0.982-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6389af3e204975d6658de4fb8ac16f58c14e1bacc6142fee86d1b5b26aa52bda"}, + {file = "mypy-0.982-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b35ce03a289480d6544aac85fa3674f493f323d80ea7226410ed065cd46f206"}, + {file = "mypy-0.982-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c6e564f035d25c99fd2b863e13049744d96bd1947e3d3d2f16f5828864506763"}, + {file = "mypy-0.982-cp38-cp38-win_amd64.whl", hash = "sha256:cebca7fd333f90b61b3ef7f217ff75ce2e287482206ef4a8b18f32b49927b1a2"}, + {file = "mypy-0.982-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a705a93670c8b74769496280d2fe6cd59961506c64f329bb179970ff1d24f9f8"}, + {file = "mypy-0.982-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75838c649290d83a2b83a88288c1eb60fe7a05b36d46cbea9d22efc790002146"}, + {file = "mypy-0.982-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:91781eff1f3f2607519c8b0e8518aad8498af1419e8442d5d0afb108059881fc"}, + {file = "mypy-0.982-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa97b9ddd1dd9901a22a879491dbb951b5dec75c3b90032e2baa7336777363b"}, + {file = "mypy-0.982-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a692a8e7d07abe5f4b2dd32d731812a0175626a90a223d4b58f10f458747dd8a"}, + {file = "mypy-0.982-cp39-cp39-win_amd64.whl", hash = "sha256:eb7a068e503be3543c4bd329c994103874fa543c1727ba5288393c21d912d795"}, + {file = "mypy-0.982-py3-none-any.whl", hash = "sha256:1021c241e8b6e1ca5a47e4d52601274ac078a89845cfde66c6d5f769819ffa1d"}, + {file = "mypy-0.982.tar.gz", hash = "sha256:85f7a343542dc8b1ed0a888cdd34dca56462654ef23aa673907305b260b3d746"}, +] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, @@ -670,13 +747,69 @@ orderedmultidict = [ {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, ] -orjson = [] +orjson = [ + {file = "orjson-3.8.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:a70aaa2e56356e58c6e1b49f7b7f069df5b15e55db002a74db3ff3f7af67c7ff"}, + {file = "orjson-3.8.1-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d45db052d01d0ab7579470141d5c3592f4402d43cfacb67f023bc1210a67b7bc"}, + {file = "orjson-3.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2aae92398c0023ac26a6cd026375f765ef5afe127eccabf563c78af7b572d59"}, + {file = "orjson-3.8.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0bd5b4e539db8a9635776bdf9a25c3db84e37165e65d45c8ca90437adc46d6d8"}, + {file = "orjson-3.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21efb87b168066201a120b0f54a2381f6f51ff3727e07b3908993732412b314a"}, + {file = "orjson-3.8.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:e073338e422f518c1d4d80efc713cd17f3ed6d37c8c7459af04a95459f3206d1"}, + {file = "orjson-3.8.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8f672f3987f6424f60ab2e86ea7ed76dd2806b8e9b506a373fc8499aed85ddb5"}, + {file = "orjson-3.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:231c30958ed99c23128a21993c5ac0a70e1e568e6a898a47f70d5d37461ca47c"}, + {file = "orjson-3.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59b4baf71c9f39125d7e535974b146cc180926462969f6d8821b4c5e975e11b3"}, + {file = "orjson-3.8.1-cp310-none-win_amd64.whl", hash = "sha256:fe25f50dc3d45364428baa0dbe3f613a5171c64eb0286eb775136b74e61ba58a"}, + {file = "orjson-3.8.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6802edf98f6918e89df355f56be6e7db369b31eed64ff2496324febb8b0aa43b"}, + {file = "orjson-3.8.1-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a4244f4199a160717f0027e434abb886e322093ceadb2f790ff0c73ed3e17662"}, + {file = "orjson-3.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6956cf7a1ac97523e96f75b11534ff851df99a6474a561ad836b6e82004acbb8"}, + {file = "orjson-3.8.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b4e3857dd2416b479f700e9bdf4fcec8c690d2716622397d2b7e848f9833e50"}, + {file = "orjson-3.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8873e490dea0f9cd975d66f84618b6fb57b1ba45ecb218313707a71173d764f"}, + {file = "orjson-3.8.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:124207d2cd04e845eaf2a6171933cde40aebcb8c2d7d3b081e01be066d3014b6"}, + {file = "orjson-3.8.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d8ed77098c2e22181fce971f49a34204c38b79ca91c01d515d07015339ae8165"}, + {file = "orjson-3.8.1-cp311-none-win_amd64.whl", hash = "sha256:8623ac25fa0850a44ac845e9333c4da9ae5707b7cec8ac87cbe9d4e41137180f"}, + {file = "orjson-3.8.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:d67a0bd0283a3b17ac43c5ab8e4a7e9d3aa758d6ec5d51c232343c408825a5ad"}, + {file = "orjson-3.8.1-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d89ef8a4444d83e0a5171d14f2ab4895936ab1773165b020f97d29cf289a2d88"}, + {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97839a6abbebb06099294e6057d5b3061721ada08b76ae792e7041b6cb54c97f"}, + {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6071bcf51f0ae4d53b9d3e9164f7138164df4291c484a7b14562075aaa7a2b7b"}, + {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15e7d691cee75b5192fc1fa8487bf541d463246dc25c926b9b40f5b6ab56770"}, + {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:b9abc49c014def1b832fcd53bdc670474b6fe41f373d16f40409882c0d0eccba"}, + {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:3fd5472020042482d7da4c26a0ee65dbd931f691e1c838c6cf4232823179ecc1"}, + {file = "orjson-3.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e399ed1b0d6f8089b9b6ff2cb3e71ba63a56d8ea88e1d95467949795cc74adfd"}, + {file = "orjson-3.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5e3db6496463c3000d15b7a712da5a9601c6c43682f23f81862fe1d2a338f295"}, + {file = "orjson-3.8.1-cp37-none-win_amd64.whl", hash = "sha256:0f21eed14697083c01f7e00a87e21056fc8fb5851e8a7bca98345189abcdb4d4"}, + {file = "orjson-3.8.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:5a9e324213220578d324e0858baeab47808a13d3c3fbc6ba55a3f4f069d757cf"}, + {file = "orjson-3.8.1-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:69097c50c3ccbcc61292192b045927f1688ca57ce80525dc5d120e0b91e19bb0"}, + {file = "orjson-3.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7822cba140f7ca48ed0256229f422dbae69e3a3475176185db0c0538cfadb57"}, + {file = "orjson-3.8.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03389e3750c521a7f3d4837de23cfd21a7f24574b4b3985c9498f440d21adb03"}, + {file = "orjson-3.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0f9d9b5c6692097de07dd0b2d5ff20fd135bacd1b2fb7ea383ee717a4150c93"}, + {file = "orjson-3.8.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:c2c9ef10b6344465fd5ac002be2d34f818211274dd79b44c75b2c14a979f84f3"}, + {file = "orjson-3.8.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7adaac93678ac61f5dc070f615b18639d16ee66f6a946d5221dbf315e8b74bec"}, + {file = "orjson-3.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b0c1750f73658906b82cabbf4be2f74300644c17cb037fbc8b48d746c3b90c76"}, + {file = "orjson-3.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:da6306e1f03e7085fe0db61d4a3377f70c6fd865118d0afe17f80ae9a8f6f124"}, + {file = "orjson-3.8.1-cp38-none-win_amd64.whl", hash = "sha256:f532c2cbe8c140faffaebcfb34d43c9946599ea8138971f181a399bec7d6b123"}, + {file = "orjson-3.8.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:6a7b76d4b44bca418f7797b1e157907b56b7d31caa9091db4e99ebee51c16933"}, + {file = "orjson-3.8.1-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:f850489d89ea12be486492e68f0fd63e402fa28e426d4f0b5fc1eec0595e6109"}, + {file = "orjson-3.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4449e70b98f3ad3e43958360e4be1189c549865c0a128e8629ec96ce92d251c3"}, + {file = "orjson-3.8.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:45357eea9114bd41ef19280066591e9069bb4f6f5bffd533e9bfc12a439d735f"}, + {file = "orjson-3.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f5a9bc5bc4d730153529cb0584c63ff286d50663ccd48c9435423660b1bb12d"}, + {file = "orjson-3.8.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:a806aca6b80fa1d996aa16593e4995a71126a085ee1a59fff19ccad29a4e47fd"}, + {file = "orjson-3.8.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:395d02fd6be45f960da014372e7ecefc9e5f8df57a0558b7111a5fa8423c0669"}, + {file = "orjson-3.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:caff3c1e964cfee044a03a46244ecf6373f3c56142ad16458a1446ac6d69824a"}, + {file = "orjson-3.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ded261268d5dfd307078fe3370295e5eb15bdde838bbb882acf8538e061c451"}, + {file = "orjson-3.8.1-cp39-none-win_amd64.whl", hash = "sha256:45c1914795ffedb2970bfcd3ed83daf49124c7c37943ed0a7368971c6ea5e278"}, + {file = "orjson-3.8.1.tar.gz", hash = "sha256:07c42de52dfef56cdcaf2278f58e837b26f5b5af5f1fd133a68c4af203851fc7"}, +] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] -pathspec = [] -pkgutil-resolve-name = [] +pathspec = [ + {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, + {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, +] +pkgutil-resolve-name = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, @@ -686,8 +819,14 @@ pook = [ {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, ] -pygments = [] -pyparsing = [] +pygments = [ + {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, + {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] pyrsistent = [ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, @@ -711,8 +850,14 @@ pyrsistent = [ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, ] -pytz = [] -requests = [] +pytz = [ + {file = "pytz-2022.5-py2.py3-none-any.whl", hash = "sha256:335ab46900b1465e714b4fda4963d87363264eb662aab5e65da039c25f1f5b22"}, + {file = "pytz-2022.5.tar.gz", hash = "sha256:c4d88f472f54d615e9cd582a5004d1e5f624854a6a27a6211591c251f22a6914"}, +] +requests = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -721,8 +866,14 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -sphinx = [] -sphinx-autodoc-typehints = [] +sphinx = [ + {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, + {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, +] +sphinx-autodoc-typehints = [ + {file = "sphinx_autodoc_typehints-1.19.4-py3-none-any.whl", hash = "sha256:e190d8ee8204c3de05a64f41cf10e592e987e4063c8ec0de7e4b11f6e036b2e2"}, + {file = "sphinx_autodoc_typehints-1.19.4.tar.gz", hash = "sha256:ffd8e710f6757471b5c831c7ece88f52a9ff15f27836f4ef1c8695a64f8dcca8"}, +] sphinx-rtd-theme = [ {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, @@ -755,14 +906,102 @@ tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -types-certifi = [] -types-setuptools = [] -types-urllib3 = [] -typing-extensions = [] -urllib3 = [] -websockets = [] +types-certifi = [ + {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, + {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, +] +types-setuptools = [ + {file = "types-setuptools-65.5.0.3.tar.gz", hash = "sha256:17769171f5f2a2dc69b25c0d3106552a5cda767bbf6b36cb6212b26dae5aa9fc"}, + {file = "types_setuptools-65.5.0.3-py3-none-any.whl", hash = "sha256:9254c32b0cc91c486548e7d7561243b5bd185402a383e93c6691e1b9bc8d86e2"}, +] +types-urllib3 = [ + {file = "types-urllib3-1.26.25.1.tar.gz", hash = "sha256:a948584944b2412c9a74b9cf64f6c48caf8652cb88b38361316f6d15d8a184cd"}, + {file = "types_urllib3-1.26.25.1-py3-none-any.whl", hash = "sha256:f6422596cc9ee5fdf68f9d547f541096a20c2dcfd587e37c804c9ea720bf5cb2"}, +] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] +urllib3 = [ + {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, + {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, +] +websockets = [ + {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, + {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, + {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, + {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, + {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, + {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, + {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, + {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, + {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, + {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, + {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, + {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, + {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, + {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, + {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, + {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, + {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, + {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, + {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, + {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, + {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, + {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, + {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, + {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, + {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, + {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, + {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, + {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, + {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, + {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, + {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, + {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, + {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, + {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, + {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, + {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, + {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, + {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, + {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, + {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, +] xmltodict = [ {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, ] -zipp = [] +zipp = [ + {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, + {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, +] From b363833bcdca5bded6f3dcbbdefcec15cb54cecc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Nov 2022 11:29:11 -0500 Subject: [PATCH 187/448] Bump mypy from 0.982 to 0.990 (#327) * Bump mypy from 0.982 to 0.990 Bumps [mypy](https://github.com/python/mypy) from 0.982 to 0.990. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.982...v0.990) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * explicit optional * Bump types-setuptools from 65.5.0.2 to 65.5.0.3 (#329) Bumps [types-setuptools](https://github.com/python/typeshed) from 65.5.0.2 to 65.5.0.3. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Daniel Vetter <93154633+danielatpolygonio@users.noreply.github.com> Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Daniel Vetter <93154633+danielatpolygonio@users.noreply.github.com> --- poetry.lock | 326 +++++++++++++++++++------------------- polygon/rest/reference.py | 2 +- pyproject.toml | 2 +- 3 files changed, 169 insertions(+), 161 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7059648c..c9ac546d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -18,11 +18,11 @@ python-versions = ">=3.5" dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] -name = "babel" -version = "2.10.3" +name = "Babel" +version = "2.11.0" description = "Internationalization utilities" category = "dev" optional = false @@ -70,7 +70,7 @@ optional = false python-versions = ">=3.6.0" [package.extras] -unicode-backport = ["unicodedata2"] +unicode_backport = ["unicodedata2"] [[package]] name = "click" @@ -129,7 +129,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "5.0.0" +version = "5.1.0" description = "Read metadata from Python packages" category = "dev" optional = false @@ -159,7 +159,7 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [[package]] -name = "jinja2" +name = "Jinja2" version = "3.1.2" description = "A very fast and expressive template engine." category = "dev" @@ -174,7 +174,7 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jsonschema" -version = "4.16.0" +version = "4.17.1" description = "An implementation of JSON Schema validation for Python" category = "dev" optional = false @@ -191,7 +191,7 @@ format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validat format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] [[package]] -name = "markupsafe" +name = "MarkupSafe" version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." category = "dev" @@ -200,7 +200,7 @@ python-versions = ">=3.7" [[package]] name = "mypy" -version = "0.982" +version = "0.990" description = "Optional static typing for Python" category = "dev" optional = false @@ -213,6 +213,7 @@ typing-extensions = ">=3.10" [package.extras] dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] python2 = ["typed-ast (>=1.4.0,<2)"] reports = ["lxml"] @@ -237,7 +238,7 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.8.1" +version = "3.8.2" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" category = "dev" optional = false @@ -256,14 +257,14 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pathspec" -version = "0.10.1" +version = "0.10.2" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false python-versions = ">=3.7" [[package]] -name = "pkgutil-resolve-name" +name = "pkgutil_resolve_name" version = "1.3.10" description = "Resolve a name to an object." category = "dev" @@ -272,15 +273,15 @@ python-versions = ">=3.6" [[package]] name = "platformdirs" -version = "2.5.2" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "2.5.4" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] +test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pook" @@ -296,7 +297,7 @@ jsonschema = ">=2.5.1" xmltodict = ">=0.11.0" [[package]] -name = "pygments" +name = "Pygments" version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "dev" @@ -319,7 +320,7 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrsistent" -version = "0.18.1" +version = "0.19.2" description = "Persistent/Functional/Immutable data structures" category = "dev" optional = false @@ -327,7 +328,7 @@ python-versions = ">=3.7" [[package]] name = "pytz" -version = "2022.5" +version = "2022.6" description = "World timezone definitions, modern and historical" category = "dev" optional = false @@ -349,7 +350,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "six" @@ -368,7 +369,7 @@ optional = false python-versions = "*" [[package]] -name = "sphinx" +name = "Sphinx" version = "5.3.0" description = "Python documentation generator" category = "dev" @@ -401,34 +402,34 @@ test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.19.4" +version = "1.19.5" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false python-versions = ">=3.7" [package.dependencies] -sphinx = ">=5.2.1" +sphinx = ">=5.3" [package.extras] -docs = ["furo (>=2022.9.15)", "sphinx (>=5.2.1)", "sphinx-autodoc-typehints (>=1.19.3)"] -testing = ["covdefaults (>=2.2)", "coverage (>=6.4.4)", "diff-cover (>=7.0.1)", "nptyping (>=2.3.1)", "pytest (>=7.1.3)", "pytest-cov (>=3)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.3)"] +docs = ["furo (>=2022.9.29)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.5)", "diff-cover (>=7.0.1)", "nptyping (>=2.3.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.4)"] type-comment = ["typed-ast (>=1.5.4)"] [[package]] name = "sphinx-rtd-theme" -version = "1.0.0" +version = "1.1.1" description = "Read the Docs theme for Sphinx" category = "dev" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" [package.dependencies] docutils = "<0.18" -sphinx = ">=1.6" +sphinx = ">=1.6,<6" [package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" @@ -519,7 +520,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "65.5.0.3" +version = "65.6.0.1" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -527,7 +528,7 @@ python-versions = "*" [[package]] name = "types-urllib3" -version = "1.26.25.1" +version = "1.26.25.4" description = "Typing stubs for urllib3" category = "dev" optional = false @@ -543,11 +544,11 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.12" +version = "1.26.13" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] @@ -572,7 +573,7 @@ python-versions = ">=3.4" [[package]] name = "zipp" -version = "3.10.0" +version = "3.11.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" optional = false @@ -585,7 +586,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "fbf86aa7af58c7986474bdc0ea8c7628fca422650c51cb160419a531065f100a" +content-hash = "6aa7353246084990aa6bf858f36060ffc36d6d5cf83a0ac2ddd9f90962959139" [metadata.files] alabaster = [ @@ -596,9 +597,9 @@ attrs = [ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, ] -babel = [ - {file = "Babel-2.10.3-py3-none-any.whl", hash = "sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb"}, - {file = "Babel-2.10.3.tar.gz", hash = "sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51"}, +Babel = [ + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, ] black = [ {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, @@ -656,22 +657,22 @@ imagesize = [ {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, ] importlib-metadata = [ - {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"}, - {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"}, + {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, + {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, ] importlib-resources = [ {file = "importlib_resources-5.10.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, {file = "importlib_resources-5.10.0.tar.gz", hash = "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668"}, ] -jinja2 = [ +Jinja2 = [ {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] jsonschema = [ - {file = "jsonschema-4.16.0-py3-none-any.whl", hash = "sha256:9e74b8f9738d6a946d70705dc692b74b5429cd0960d58e79ffecfc43b2221eb9"}, - {file = "jsonschema-4.16.0.tar.gz", hash = "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23"}, + {file = "jsonschema-4.17.1-py3-none-any.whl", hash = "sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7"}, + {file = "jsonschema-4.17.1.tar.gz", hash = "sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3"}, ] -markupsafe = [ +MarkupSafe = [ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, @@ -714,30 +715,36 @@ markupsafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mypy = [ - {file = "mypy-0.982-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5085e6f442003fa915aeb0a46d4da58128da69325d8213b4b35cc7054090aed5"}, - {file = "mypy-0.982-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:41fd1cf9bc0e1c19b9af13a6580ccb66c381a5ee2cf63ee5ebab747a4badeba3"}, - {file = "mypy-0.982-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f793e3dd95e166b66d50e7b63e69e58e88643d80a3dcc3bcd81368e0478b089c"}, - {file = "mypy-0.982-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86ebe67adf4d021b28c3f547da6aa2cce660b57f0432617af2cca932d4d378a6"}, - {file = "mypy-0.982-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:175f292f649a3af7082fe36620369ffc4661a71005aa9f8297ea473df5772046"}, - {file = "mypy-0.982-cp310-cp310-win_amd64.whl", hash = "sha256:8ee8c2472e96beb1045e9081de8e92f295b89ac10c4109afdf3a23ad6e644f3e"}, - {file = "mypy-0.982-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58f27ebafe726a8e5ccb58d896451dd9a662a511a3188ff6a8a6a919142ecc20"}, - {file = "mypy-0.982-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6af646bd46f10d53834a8e8983e130e47d8ab2d4b7a97363e35b24e1d588947"}, - {file = "mypy-0.982-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7aeaa763c7ab86d5b66ff27f68493d672e44c8099af636d433a7f3fa5596d40"}, - {file = "mypy-0.982-cp37-cp37m-win_amd64.whl", hash = "sha256:724d36be56444f569c20a629d1d4ee0cb0ad666078d59bb84f8f887952511ca1"}, - {file = "mypy-0.982-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14d53cdd4cf93765aa747a7399f0961a365bcddf7855d9cef6306fa41de01c24"}, - {file = "mypy-0.982-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:26ae64555d480ad4b32a267d10cab7aec92ff44de35a7cd95b2b7cb8e64ebe3e"}, - {file = "mypy-0.982-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6389af3e204975d6658de4fb8ac16f58c14e1bacc6142fee86d1b5b26aa52bda"}, - {file = "mypy-0.982-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b35ce03a289480d6544aac85fa3674f493f323d80ea7226410ed065cd46f206"}, - {file = "mypy-0.982-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c6e564f035d25c99fd2b863e13049744d96bd1947e3d3d2f16f5828864506763"}, - {file = "mypy-0.982-cp38-cp38-win_amd64.whl", hash = "sha256:cebca7fd333f90b61b3ef7f217ff75ce2e287482206ef4a8b18f32b49927b1a2"}, - {file = "mypy-0.982-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a705a93670c8b74769496280d2fe6cd59961506c64f329bb179970ff1d24f9f8"}, - {file = "mypy-0.982-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75838c649290d83a2b83a88288c1eb60fe7a05b36d46cbea9d22efc790002146"}, - {file = "mypy-0.982-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:91781eff1f3f2607519c8b0e8518aad8498af1419e8442d5d0afb108059881fc"}, - {file = "mypy-0.982-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa97b9ddd1dd9901a22a879491dbb951b5dec75c3b90032e2baa7336777363b"}, - {file = "mypy-0.982-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a692a8e7d07abe5f4b2dd32d731812a0175626a90a223d4b58f10f458747dd8a"}, - {file = "mypy-0.982-cp39-cp39-win_amd64.whl", hash = "sha256:eb7a068e503be3543c4bd329c994103874fa543c1727ba5288393c21d912d795"}, - {file = "mypy-0.982-py3-none-any.whl", hash = "sha256:1021c241e8b6e1ca5a47e4d52601274ac078a89845cfde66c6d5f769819ffa1d"}, - {file = "mypy-0.982.tar.gz", hash = "sha256:85f7a343542dc8b1ed0a888cdd34dca56462654ef23aa673907305b260b3d746"}, + {file = "mypy-0.990-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:aaf1be63e0207d7d17be942dcf9a6b641745581fe6c64df9a38deb562a7dbafa"}, + {file = "mypy-0.990-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d555aa7f44cecb7ea3c0ac69d58b1a5afb92caa017285a8e9c4efbf0518b61b4"}, + {file = "mypy-0.990-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f694d6d09a460b117dccb6857dda269188e3437c880d7b60fa0014fa872d1e9"}, + {file = "mypy-0.990-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:269f0dfb6463b8780333310ff4b5134425157ef0d2b1d614015adaf6d6a7eabd"}, + {file = "mypy-0.990-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8798c8ed83aa809f053abff08664bdca056038f5a02af3660de00b7290b64c47"}, + {file = "mypy-0.990-cp310-cp310-win_amd64.whl", hash = "sha256:47a9955214615108c3480a500cfda8513a0b1cd3c09a1ed42764ca0dd7b931dd"}, + {file = "mypy-0.990-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4a8a6c10f4c63fbf6ad6c03eba22c9331b3946a4cec97f008e9ffb4d3b31e8e2"}, + {file = "mypy-0.990-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd2dd3730ba894ec2a2082cc703fbf3e95a08479f7be84912e3131fc68809d46"}, + {file = "mypy-0.990-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7da0005e47975287a92b43276e460ac1831af3d23032c34e67d003388a0ce8d0"}, + {file = "mypy-0.990-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:262c543ef24deb10470a3c1c254bb986714e2b6b1a67d66daf836a548a9f316c"}, + {file = "mypy-0.990-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3ff201a0c6d3ea029d73b1648943387d75aa052491365b101f6edd5570d018ea"}, + {file = "mypy-0.990-cp311-cp311-win_amd64.whl", hash = "sha256:1767830da2d1afa4e62b684647af0ff79b401f004d7fa08bc5b0ce2d45bcd5ec"}, + {file = "mypy-0.990-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6826d9c4d85bbf6d68cb279b561de6a4d8d778ca8e9ab2d00ee768ab501a9852"}, + {file = "mypy-0.990-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46897755f944176fbc504178422a5a2875bbf3f7436727374724842c0987b5af"}, + {file = "mypy-0.990-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0680389c34284287fe00e82fc8bccdea9aff318f7e7d55b90d967a13a9606013"}, + {file = "mypy-0.990-cp37-cp37m-win_amd64.whl", hash = "sha256:b08541a06eed35b543ae1a6b301590eb61826a1eb099417676ddc5a42aa151c5"}, + {file = "mypy-0.990-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:be88d665e76b452c26fb2bdc3d54555c01226fba062b004ede780b190a50f9db"}, + {file = "mypy-0.990-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b8f4a8213b1fd4b751e26b59ae0e0c12896568d7e805861035c7a15ed6dc9eb"}, + {file = "mypy-0.990-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b6f85c2ad378e3224e017904a051b26660087b3b76490d533b7344f1546d3ff"}, + {file = "mypy-0.990-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ee5f99817ee70254e7eb5cf97c1b11dda29c6893d846c8b07bce449184e9466"}, + {file = "mypy-0.990-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49082382f571c3186ce9ea0bd627cb1345d4da8d44a8377870f4442401f0a706"}, + {file = "mypy-0.990-cp38-cp38-win_amd64.whl", hash = "sha256:aba38e3dd66bdbafbbfe9c6e79637841928ea4c79b32e334099463c17b0d90ef"}, + {file = "mypy-0.990-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9d851c09b981a65d9d283a8ccb5b1d0b698e580493416a10942ef1a04b19fd37"}, + {file = "mypy-0.990-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d847dd23540e2912d9667602271e5ebf25e5788e7da46da5ffd98e7872616e8e"}, + {file = "mypy-0.990-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cc6019808580565040cd2a561b593d7c3c646badd7e580e07d875eb1bf35c695"}, + {file = "mypy-0.990-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a3150d409609a775c8cb65dbe305c4edd7fe576c22ea79d77d1454acd9aeda8"}, + {file = "mypy-0.990-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3227f14fe943524f5794679156488f18bf8d34bfecd4623cf76bc55958d229c5"}, + {file = "mypy-0.990-cp39-cp39-win_amd64.whl", hash = "sha256:c76c769c46a1e6062a84837badcb2a7b0cdb153d68601a61f60739c37d41cc74"}, + {file = "mypy-0.990-py3-none-any.whl", hash = "sha256:8f1940325a8ed460ba03d19ab83742260fa9534804c317224e5d4e5aa588e2d6"}, + {file = "mypy-0.990.tar.gz", hash = "sha256:72382cb609142dba3f04140d016c94b4092bc7b4d98ca718740dc989e5271b8d"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, @@ -748,78 +755,78 @@ orderedmultidict = [ {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, ] orjson = [ - {file = "orjson-3.8.1-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:a70aaa2e56356e58c6e1b49f7b7f069df5b15e55db002a74db3ff3f7af67c7ff"}, - {file = "orjson-3.8.1-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d45db052d01d0ab7579470141d5c3592f4402d43cfacb67f023bc1210a67b7bc"}, - {file = "orjson-3.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2aae92398c0023ac26a6cd026375f765ef5afe127eccabf563c78af7b572d59"}, - {file = "orjson-3.8.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0bd5b4e539db8a9635776bdf9a25c3db84e37165e65d45c8ca90437adc46d6d8"}, - {file = "orjson-3.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21efb87b168066201a120b0f54a2381f6f51ff3727e07b3908993732412b314a"}, - {file = "orjson-3.8.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:e073338e422f518c1d4d80efc713cd17f3ed6d37c8c7459af04a95459f3206d1"}, - {file = "orjson-3.8.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:8f672f3987f6424f60ab2e86ea7ed76dd2806b8e9b506a373fc8499aed85ddb5"}, - {file = "orjson-3.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:231c30958ed99c23128a21993c5ac0a70e1e568e6a898a47f70d5d37461ca47c"}, - {file = "orjson-3.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59b4baf71c9f39125d7e535974b146cc180926462969f6d8821b4c5e975e11b3"}, - {file = "orjson-3.8.1-cp310-none-win_amd64.whl", hash = "sha256:fe25f50dc3d45364428baa0dbe3f613a5171c64eb0286eb775136b74e61ba58a"}, - {file = "orjson-3.8.1-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6802edf98f6918e89df355f56be6e7db369b31eed64ff2496324febb8b0aa43b"}, - {file = "orjson-3.8.1-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a4244f4199a160717f0027e434abb886e322093ceadb2f790ff0c73ed3e17662"}, - {file = "orjson-3.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6956cf7a1ac97523e96f75b11534ff851df99a6474a561ad836b6e82004acbb8"}, - {file = "orjson-3.8.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b4e3857dd2416b479f700e9bdf4fcec8c690d2716622397d2b7e848f9833e50"}, - {file = "orjson-3.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8873e490dea0f9cd975d66f84618b6fb57b1ba45ecb218313707a71173d764f"}, - {file = "orjson-3.8.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:124207d2cd04e845eaf2a6171933cde40aebcb8c2d7d3b081e01be066d3014b6"}, - {file = "orjson-3.8.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d8ed77098c2e22181fce971f49a34204c38b79ca91c01d515d07015339ae8165"}, - {file = "orjson-3.8.1-cp311-none-win_amd64.whl", hash = "sha256:8623ac25fa0850a44ac845e9333c4da9ae5707b7cec8ac87cbe9d4e41137180f"}, - {file = "orjson-3.8.1-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:d67a0bd0283a3b17ac43c5ab8e4a7e9d3aa758d6ec5d51c232343c408825a5ad"}, - {file = "orjson-3.8.1-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d89ef8a4444d83e0a5171d14f2ab4895936ab1773165b020f97d29cf289a2d88"}, - {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97839a6abbebb06099294e6057d5b3061721ada08b76ae792e7041b6cb54c97f"}, - {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6071bcf51f0ae4d53b9d3e9164f7138164df4291c484a7b14562075aaa7a2b7b"}, - {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15e7d691cee75b5192fc1fa8487bf541d463246dc25c926b9b40f5b6ab56770"}, - {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:b9abc49c014def1b832fcd53bdc670474b6fe41f373d16f40409882c0d0eccba"}, - {file = "orjson-3.8.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:3fd5472020042482d7da4c26a0ee65dbd931f691e1c838c6cf4232823179ecc1"}, - {file = "orjson-3.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e399ed1b0d6f8089b9b6ff2cb3e71ba63a56d8ea88e1d95467949795cc74adfd"}, - {file = "orjson-3.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5e3db6496463c3000d15b7a712da5a9601c6c43682f23f81862fe1d2a338f295"}, - {file = "orjson-3.8.1-cp37-none-win_amd64.whl", hash = "sha256:0f21eed14697083c01f7e00a87e21056fc8fb5851e8a7bca98345189abcdb4d4"}, - {file = "orjson-3.8.1-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:5a9e324213220578d324e0858baeab47808a13d3c3fbc6ba55a3f4f069d757cf"}, - {file = "orjson-3.8.1-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:69097c50c3ccbcc61292192b045927f1688ca57ce80525dc5d120e0b91e19bb0"}, - {file = "orjson-3.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7822cba140f7ca48ed0256229f422dbae69e3a3475176185db0c0538cfadb57"}, - {file = "orjson-3.8.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03389e3750c521a7f3d4837de23cfd21a7f24574b4b3985c9498f440d21adb03"}, - {file = "orjson-3.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0f9d9b5c6692097de07dd0b2d5ff20fd135bacd1b2fb7ea383ee717a4150c93"}, - {file = "orjson-3.8.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:c2c9ef10b6344465fd5ac002be2d34f818211274dd79b44c75b2c14a979f84f3"}, - {file = "orjson-3.8.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7adaac93678ac61f5dc070f615b18639d16ee66f6a946d5221dbf315e8b74bec"}, - {file = "orjson-3.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b0c1750f73658906b82cabbf4be2f74300644c17cb037fbc8b48d746c3b90c76"}, - {file = "orjson-3.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:da6306e1f03e7085fe0db61d4a3377f70c6fd865118d0afe17f80ae9a8f6f124"}, - {file = "orjson-3.8.1-cp38-none-win_amd64.whl", hash = "sha256:f532c2cbe8c140faffaebcfb34d43c9946599ea8138971f181a399bec7d6b123"}, - {file = "orjson-3.8.1-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:6a7b76d4b44bca418f7797b1e157907b56b7d31caa9091db4e99ebee51c16933"}, - {file = "orjson-3.8.1-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:f850489d89ea12be486492e68f0fd63e402fa28e426d4f0b5fc1eec0595e6109"}, - {file = "orjson-3.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4449e70b98f3ad3e43958360e4be1189c549865c0a128e8629ec96ce92d251c3"}, - {file = "orjson-3.8.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:45357eea9114bd41ef19280066591e9069bb4f6f5bffd533e9bfc12a439d735f"}, - {file = "orjson-3.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f5a9bc5bc4d730153529cb0584c63ff286d50663ccd48c9435423660b1bb12d"}, - {file = "orjson-3.8.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:a806aca6b80fa1d996aa16593e4995a71126a085ee1a59fff19ccad29a4e47fd"}, - {file = "orjson-3.8.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:395d02fd6be45f960da014372e7ecefc9e5f8df57a0558b7111a5fa8423c0669"}, - {file = "orjson-3.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:caff3c1e964cfee044a03a46244ecf6373f3c56142ad16458a1446ac6d69824a"}, - {file = "orjson-3.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ded261268d5dfd307078fe3370295e5eb15bdde838bbb882acf8538e061c451"}, - {file = "orjson-3.8.1-cp39-none-win_amd64.whl", hash = "sha256:45c1914795ffedb2970bfcd3ed83daf49124c7c37943ed0a7368971c6ea5e278"}, - {file = "orjson-3.8.1.tar.gz", hash = "sha256:07c42de52dfef56cdcaf2278f58e837b26f5b5af5f1fd133a68c4af203851fc7"}, + {file = "orjson-3.8.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:43e69b360c2851b45c7dbab3b95f7fa8469df73fab325a683f7389c4db63aa71"}, + {file = "orjson-3.8.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:64c5da5c9679ef3d85e9bbcbb62f4ccdc1f1975780caa20f2ec1e37b4da6bd36"}, + {file = "orjson-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c632a2157fa9ec098d655287e9e44809615af99837c49f53d96bfbca453c5bd"}, + {file = "orjson-3.8.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f63da6309c282a2b58d4a846f0717f6440356b4872838b9871dc843ed1fe2b38"}, + {file = "orjson-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c9be25c313ba2d5478829d949165445c3bd36c62e07092b4ba8dbe5426574d1"}, + {file = "orjson-3.8.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:4bcce53e9e088f82633f784f79551fcd7637943ab56c51654aaf9d4c1d5cfa54"}, + {file = "orjson-3.8.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:33edb5379c6e6337f9383c85fe4080ce3aa1057cc2ce29345b7239461f50cbd6"}, + {file = "orjson-3.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:da35d347115758bbc8bfaf39bb213c42000f2a54e3f504c84374041d20835cd6"}, + {file = "orjson-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d755d94a90a941b91b4d39a6b02e289d8ba358af2d1a911edf266be7942609dc"}, + {file = "orjson-3.8.2-cp310-none-win_amd64.whl", hash = "sha256:7ea96923e26390b2142602ebb030e2a4db9351134696e0b219e5106bddf9b48e"}, + {file = "orjson-3.8.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:a0d89de876e6f1cef917a2338378a60a98584e1c2e1c67781e20b6ed1c512478"}, + {file = "orjson-3.8.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:8d47e7592fe938aec898eb22ea4946298c018133df084bc78442ff18e2c6347c"}, + {file = "orjson-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3d9f1043f618d0c64228aab9711e5bd822253c50b6c56223951e32b51f81d62"}, + {file = "orjson-3.8.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed10600e8b08f1e87b656ad38ab316191ce94f2c9adec57035680c0dc9e93c81"}, + {file = "orjson-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99c49e49a04bf61fee7aaea6d92ac2b1fcf6507aea894bbdf3fbb25fe792168c"}, + {file = "orjson-3.8.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1463674f8efe6984902473d7b5ce3edf444c1fcd09dc8aa4779638a28fb9ca01"}, + {file = "orjson-3.8.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c1ef75f1d021d817e5c60a42da0b4b7e3123b1b37415260b8415666ddacc7cd7"}, + {file = "orjson-3.8.2-cp311-none-win_amd64.whl", hash = "sha256:b6007e1ac8564b13b2521720929e8bb3ccd3293d9fdf38f28728dcc06db6248f"}, + {file = "orjson-3.8.2-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a02c13ae523221576b001071354380e277346722cc6b7fdaacb0fd6db5154b3e"}, + {file = "orjson-3.8.2-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:fa2e565cf8ffdb37ce1887bd1592709ada7f701e61aa4b1e710be94b0aecbab4"}, + {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1d8864288f7c5fccc07b43394f83b721ddc999f25dccfb5d0651671a76023f5"}, + {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1874c05d0bb994601fa2d51605cb910d09343c6ebd36e84a573293523fab772a"}, + {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:349387ed6989e5db22e08c9af8d7ca14240803edc50de451d48d41a0e7be30f6"}, + {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:4e42b19619d6e97e201053b865ca4e62a48da71165f4081508ada8e1b91c6a30"}, + {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:bc112c17e607c59d1501e72afb44226fa53d947d364aed053f0c82d153e29616"}, + {file = "orjson-3.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6fda669211f2ed1fc2c8130187ec90c96b4f77b6a250004e666d2ef8ed524e5f"}, + {file = "orjson-3.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:aebd4e80fea0f20578fd0452908b9206a6a0d5ae9f5c99b6e665bbcd989e56cd"}, + {file = "orjson-3.8.2-cp37-none-win_amd64.whl", hash = "sha256:9f3cd0394eb6d265beb2a1572b5663bc910883ddbb5cdfbcb660f5a0444e7fd8"}, + {file = "orjson-3.8.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:74e7d54d11b3da42558d69a23bf92c2c48fabf69b38432d5eee2c5b09cd4c433"}, + {file = "orjson-3.8.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:8cbadc9be748a823f9c743c7631b1ee95d3925a9c0b21de4e862a1d57daa10ec"}, + {file = "orjson-3.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07d5a8c69a2947d9554a00302734fe3d8516415c8b280963c92bc1033477890"}, + {file = "orjson-3.8.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b364ea01d1b71b9f97bf97af9eb79ebee892df302e127a9e2e4f8eaa74d6b98"}, + {file = "orjson-3.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b98a8c825a59db94fbe8e0cce48618624c5a6fb1436467322d90667c08a0bf80"}, + {file = "orjson-3.8.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ab63103f60b516c0fce9b62cb4773f689a82ab56e19ef2387b5a3182f80c0d78"}, + {file = "orjson-3.8.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:73ab3f4288389381ae33ab99f914423b69570c88d626d686764634d5e0eeb909"}, + {file = "orjson-3.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2ab3fd8728e12c36e20c6d9d70c9e15033374682ce5acb6ed6a08a80dacd254d"}, + {file = "orjson-3.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cde11822cf71a7f0daaa84223249b2696a2b6cda7fa587e9fd762dff1a8848e4"}, + {file = "orjson-3.8.2-cp38-none-win_amd64.whl", hash = "sha256:b14765ea5aabfeab1a194abfaa0be62c9fee6480a75ac8c6974b4eeede3340b4"}, + {file = "orjson-3.8.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:6068a27d59d989d4f2864c2fc3440eb7126a0cfdfaf8a4ad136b0ffd932026ae"}, + {file = "orjson-3.8.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:6bf36fa759a1b941fc552ad76b2d7fb10c1d2a20c056be291ea45eb6ae1da09b"}, + {file = "orjson-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f436132e62e647880ca6988974c8e3165a091cb75cbed6c6fd93e931630c22fa"}, + {file = "orjson-3.8.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ecd8936259a5920b52a99faf62d4efeb9f5e25a0aacf0cce1e9fa7c37af154f"}, + {file = "orjson-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c13114b345cda33644f64e92fe5d8737828766cf02fbbc7d28271a95ea546832"}, + {file = "orjson-3.8.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6e43cdc3ddf96bdb751b748b1984b701125abacca8fc2226b808d203916e8cba"}, + {file = "orjson-3.8.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ee39071da2026b11e4352d6fc3608a7b27ee14bc699fd240f4e604770bc7a255"}, + {file = "orjson-3.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1c3833976ebbeb3b5b6298cb22e23bf18453f6b80802103b7d08f7dd8a61611d"}, + {file = "orjson-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b9a34519d3d70935e1cd3797fbed8fbb6f61025182bea0140ca84d95b6f8fbe5"}, + {file = "orjson-3.8.2-cp39-none-win_amd64.whl", hash = "sha256:2734086d9a3dd9591c4be7d05aff9beccc086796d3f243685e56b7973ebac5bc"}, + {file = "orjson-3.8.2.tar.gz", hash = "sha256:a2fb95a45031ccf278e44341027b3035ab99caa32aa173279b1f0a06324f434b"}, ] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pathspec = [ - {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, - {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, + {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, + {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, ] -pkgutil-resolve-name = [ +pkgutil_resolve_name = [ {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, ] platformdirs = [ - {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, - {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, + {file = "platformdirs-2.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, + {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, ] pook = [ {file = "pook-1.0.2-py2-none-any.whl", hash = "sha256:cd3cbfe280d544e672f41a5b9482883841ba247f865858b57fd59f729e37616a"}, {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, ] -pygments = [ +Pygments = [ {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, ] @@ -828,31 +835,32 @@ pyparsing = [ {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pyrsistent = [ - {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, - {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, - {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, - {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, + {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win32.whl", hash = "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win32.whl", hash = "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73"}, + {file = "pyrsistent-0.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win32.whl", hash = "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab"}, + {file = "pyrsistent-0.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win32.whl", hash = "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291"}, + {file = "pyrsistent-0.19.2-py3-none-any.whl", hash = "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0"}, + {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, ] pytz = [ - {file = "pytz-2022.5-py2.py3-none-any.whl", hash = "sha256:335ab46900b1465e714b4fda4963d87363264eb662aab5e65da039c25f1f5b22"}, - {file = "pytz-2022.5.tar.gz", hash = "sha256:c4d88f472f54d615e9cd582a5004d1e5f624854a6a27a6211591c251f22a6914"}, + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, ] requests = [ {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, @@ -866,17 +874,17 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -sphinx = [ +Sphinx = [ {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, ] sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.19.4-py3-none-any.whl", hash = "sha256:e190d8ee8204c3de05a64f41cf10e592e987e4063c8ec0de7e4b11f6e036b2e2"}, - {file = "sphinx_autodoc_typehints-1.19.4.tar.gz", hash = "sha256:ffd8e710f6757471b5c831c7ece88f52a9ff15f27836f4ef1c8695a64f8dcca8"}, + {file = "sphinx_autodoc_typehints-1.19.5-py3-none-any.whl", hash = "sha256:ea55b3cc3f485e3a53668bcdd08de78121ab759f9724392fdb5bf3483d786328"}, + {file = "sphinx_autodoc_typehints-1.19.5.tar.gz", hash = "sha256:38a227378e2bc15c84e29af8cb1d7581182da1107111fd1c88b19b5eb7076205"}, ] sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, - {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, + {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, + {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, @@ -911,20 +919,20 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-65.5.0.3.tar.gz", hash = "sha256:17769171f5f2a2dc69b25c0d3106552a5cda767bbf6b36cb6212b26dae5aa9fc"}, - {file = "types_setuptools-65.5.0.3-py3-none-any.whl", hash = "sha256:9254c32b0cc91c486548e7d7561243b5bd185402a383e93c6691e1b9bc8d86e2"}, + {file = "types-setuptools-65.6.0.1.tar.gz", hash = "sha256:a03cf72f336929c9405f485dd90baef31a401776675f785f69a5a519f0b099ca"}, + {file = "types_setuptools-65.6.0.1-py3-none-any.whl", hash = "sha256:c957599502195ab98e90f0560466fa963f6a23373905e6d4e1772dbfaf1e44b7"}, ] types-urllib3 = [ - {file = "types-urllib3-1.26.25.1.tar.gz", hash = "sha256:a948584944b2412c9a74b9cf64f6c48caf8652cb88b38361316f6d15d8a184cd"}, - {file = "types_urllib3-1.26.25.1-py3-none-any.whl", hash = "sha256:f6422596cc9ee5fdf68f9d547f541096a20c2dcfd587e37c804c9ea720bf5cb2"}, + {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, + {file = "types_urllib3-1.26.25.4-py3-none-any.whl", hash = "sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49"}, ] typing-extensions = [ {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, ] urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, + {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, + {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, ] websockets = [ {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, @@ -1002,6 +1010,6 @@ xmltodict = [ {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, ] zipp = [ - {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"}, - {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"}, + {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, + {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, ] diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index eeb7163f..9716b8b4 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -443,7 +443,7 @@ class ContractsClient(BaseClient): def get_options_contract( self, ticker: str, - as_of: Union[str, date] = None, + as_of: Optional[Union[str, date]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, ) -> Union[OptionsContract, HTTPResponse]: diff --git a/pyproject.toml b/pyproject.toml index 65be64aa..0d8eff74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.10.0" -mypy = "^0.982" +mypy = "^0.990" types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" sphinx-rtd-theme = "^1.0.0" From eae7778f07b97bcd206581939ee76e62166141a2 Mon Sep 17 00:00:00 2001 From: Daniel Vetter <93154633+danielatpolygonio@users.noreply.github.com> Date: Mon, 28 Nov 2022 14:12:04 -0500 Subject: [PATCH 188/448] add new trf fields to EquityTrade and EquityQuote websocket models (#334) --- .polygon/websocket.json | 16 ++++++++++++++++ polygon/websocket/models/models.py | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index a7feaf84..e28c338e 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -185,6 +185,14 @@ "q": { "type": "integer", "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + }, + "trfi": { + "type": "integer", + "description": "The ID for the Trade Reporting Facility where the trade took place." + }, + "trft": { + "type": "integer", + "description": "The TRF (Trade Reporting Facility) Timestamp in Unix MS. \nThis is the timestamp of when the trade reporting facility received this trade.\n" } } }, @@ -2247,6 +2255,14 @@ "q": { "type": "integer", "description": "The sequence number represents the sequence in which message events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11).\n" + }, + "trfi": { + "type": "integer", + "description": "The ID for the Trade Reporting Facility where the trade took place." + }, + "trft": { + "type": "integer", + "description": "The TRF (Trade Reporting Facility) Timestamp in Unix MS. \nThis is the timestamp of when the trade reporting facility received this trade.\n" } } }, diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index ec1cb14a..63c35a05 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -88,6 +88,8 @@ class EquityTrade: conditions: Optional[List[int]] = None timestamp: Optional[int] = None sequence_number: Optional[int] = None + trf_id: Optional[int] = None + trf_timestamp: Optional[int] = None @staticmethod def from_dict(d): @@ -102,6 +104,8 @@ def from_dict(d): d.get("c", None), d.get("t", None), d.get("q", None), + d.get("trfi", None), + d.get("trft", None), ) @@ -149,6 +153,8 @@ class EquityQuote: timestamp: Optional[int] = None tape: Optional[int] = None sequence_number: Optional[int] = None + trf_id: Optional[int] = None + trf_timestamp: Optional[int] = None @staticmethod def from_dict(d): @@ -166,6 +172,8 @@ def from_dict(d): d.get("t", None), d.get("z", None), d.get("q", None), + d.get("trfi", None), + d.get("trft", None), ) From 79aa103d196f5f3370a0168fb684eb25844f9da6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:44:57 -0500 Subject: [PATCH 189/448] Bump mypy from 0.990 to 0.991 (#336) Bumps [mypy](https://github.com/python/mypy) from 0.990 to 0.991. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.990...v0.991) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 70 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/poetry.lock b/poetry.lock index c9ac546d..bd9bbc4e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -18,7 +18,7 @@ python-versions = ">=3.5" dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] name = "Babel" @@ -70,7 +70,7 @@ optional = false python-versions = ">=3.6.0" [package.extras] -unicode_backport = ["unicodedata2"] +unicode-backport = ["unicodedata2"] [[package]] name = "click" @@ -200,7 +200,7 @@ python-versions = ">=3.7" [[package]] name = "mypy" -version = "0.990" +version = "0.991" description = "Optional static typing for Python" category = "dev" optional = false @@ -350,7 +350,7 @@ urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "six" @@ -586,7 +586,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "6aa7353246084990aa6bf858f36060ffc36d6d5cf83a0ac2ddd9f90962959139" +content-hash = "61073cd4365c93b15d653ff27365b23ab133bbdd087f6c337411f40d44f85f75" [metadata.files] alabaster = [ @@ -715,36 +715,36 @@ MarkupSafe = [ {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, ] mypy = [ - {file = "mypy-0.990-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:aaf1be63e0207d7d17be942dcf9a6b641745581fe6c64df9a38deb562a7dbafa"}, - {file = "mypy-0.990-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d555aa7f44cecb7ea3c0ac69d58b1a5afb92caa017285a8e9c4efbf0518b61b4"}, - {file = "mypy-0.990-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f694d6d09a460b117dccb6857dda269188e3437c880d7b60fa0014fa872d1e9"}, - {file = "mypy-0.990-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:269f0dfb6463b8780333310ff4b5134425157ef0d2b1d614015adaf6d6a7eabd"}, - {file = "mypy-0.990-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8798c8ed83aa809f053abff08664bdca056038f5a02af3660de00b7290b64c47"}, - {file = "mypy-0.990-cp310-cp310-win_amd64.whl", hash = "sha256:47a9955214615108c3480a500cfda8513a0b1cd3c09a1ed42764ca0dd7b931dd"}, - {file = "mypy-0.990-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4a8a6c10f4c63fbf6ad6c03eba22c9331b3946a4cec97f008e9ffb4d3b31e8e2"}, - {file = "mypy-0.990-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd2dd3730ba894ec2a2082cc703fbf3e95a08479f7be84912e3131fc68809d46"}, - {file = "mypy-0.990-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7da0005e47975287a92b43276e460ac1831af3d23032c34e67d003388a0ce8d0"}, - {file = "mypy-0.990-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:262c543ef24deb10470a3c1c254bb986714e2b6b1a67d66daf836a548a9f316c"}, - {file = "mypy-0.990-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3ff201a0c6d3ea029d73b1648943387d75aa052491365b101f6edd5570d018ea"}, - {file = "mypy-0.990-cp311-cp311-win_amd64.whl", hash = "sha256:1767830da2d1afa4e62b684647af0ff79b401f004d7fa08bc5b0ce2d45bcd5ec"}, - {file = "mypy-0.990-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6826d9c4d85bbf6d68cb279b561de6a4d8d778ca8e9ab2d00ee768ab501a9852"}, - {file = "mypy-0.990-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46897755f944176fbc504178422a5a2875bbf3f7436727374724842c0987b5af"}, - {file = "mypy-0.990-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0680389c34284287fe00e82fc8bccdea9aff318f7e7d55b90d967a13a9606013"}, - {file = "mypy-0.990-cp37-cp37m-win_amd64.whl", hash = "sha256:b08541a06eed35b543ae1a6b301590eb61826a1eb099417676ddc5a42aa151c5"}, - {file = "mypy-0.990-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:be88d665e76b452c26fb2bdc3d54555c01226fba062b004ede780b190a50f9db"}, - {file = "mypy-0.990-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b8f4a8213b1fd4b751e26b59ae0e0c12896568d7e805861035c7a15ed6dc9eb"}, - {file = "mypy-0.990-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b6f85c2ad378e3224e017904a051b26660087b3b76490d533b7344f1546d3ff"}, - {file = "mypy-0.990-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ee5f99817ee70254e7eb5cf97c1b11dda29c6893d846c8b07bce449184e9466"}, - {file = "mypy-0.990-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49082382f571c3186ce9ea0bd627cb1345d4da8d44a8377870f4442401f0a706"}, - {file = "mypy-0.990-cp38-cp38-win_amd64.whl", hash = "sha256:aba38e3dd66bdbafbbfe9c6e79637841928ea4c79b32e334099463c17b0d90ef"}, - {file = "mypy-0.990-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9d851c09b981a65d9d283a8ccb5b1d0b698e580493416a10942ef1a04b19fd37"}, - {file = "mypy-0.990-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d847dd23540e2912d9667602271e5ebf25e5788e7da46da5ffd98e7872616e8e"}, - {file = "mypy-0.990-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cc6019808580565040cd2a561b593d7c3c646badd7e580e07d875eb1bf35c695"}, - {file = "mypy-0.990-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a3150d409609a775c8cb65dbe305c4edd7fe576c22ea79d77d1454acd9aeda8"}, - {file = "mypy-0.990-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3227f14fe943524f5794679156488f18bf8d34bfecd4623cf76bc55958d229c5"}, - {file = "mypy-0.990-cp39-cp39-win_amd64.whl", hash = "sha256:c76c769c46a1e6062a84837badcb2a7b0cdb153d68601a61f60739c37d41cc74"}, - {file = "mypy-0.990-py3-none-any.whl", hash = "sha256:8f1940325a8ed460ba03d19ab83742260fa9534804c317224e5d4e5aa588e2d6"}, - {file = "mypy-0.990.tar.gz", hash = "sha256:72382cb609142dba3f04140d016c94b4092bc7b4d98ca718740dc989e5271b8d"}, + {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, + {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, + {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, + {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, + {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, + {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, + {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, + {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, + {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, + {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, + {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, + {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, + {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, + {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, + {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, + {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, + {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, + {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, + {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, + {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, + {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, + {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, + {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, + {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, diff --git a/pyproject.toml b/pyproject.toml index 0d8eff74..0083c746 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.10.0" -mypy = "^0.990" +mypy = "^0.991" types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" sphinx-rtd-theme = "^1.0.0" From 0e8fc76eaff58aa37db6feee6256c267b69a215e Mon Sep 17 00:00:00 2001 From: Ricky Barillas <8647805+jbonzo@users.noreply.github.com> Date: Tue, 6 Dec 2022 15:50:10 -0500 Subject: [PATCH 190/448] Update CODEOWNERS (#338) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8a8da73b..f9c5fda7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @danielatpolygonio @mmoghaddam385 +* @jbonzo @mmoghaddam385 From e19188680ea97b6cb14b977d106704649f82cedf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 16:04:31 +0000 Subject: [PATCH 191/448] Bump orjson from 3.8.2 to 3.8.3 (#335) Bumps [orjson](https://github.com/ijl/orjson) from 3.8.2 to 3.8.3. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.8.2...3.8.3) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 97 ++++++++++++++++++++++++-------------------------- pyproject.toml | 2 +- 2 files changed, 47 insertions(+), 52 deletions(-) diff --git a/poetry.lock b/poetry.lock index bd9bbc4e..0223ac7c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -238,7 +238,7 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.8.2" +version = "3.8.3" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" category = "dev" optional = false @@ -586,7 +586,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "61073cd4365c93b15d653ff27365b23ab133bbdd087f6c337411f40d44f85f75" +content-hash = "63c0f19699fcd10fb25bfd17bbe8fc93ceec3bef645a99a8fc99042291913cd9" [metadata.files] alabaster = [ @@ -755,55 +755,50 @@ orderedmultidict = [ {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, ] orjson = [ - {file = "orjson-3.8.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:43e69b360c2851b45c7dbab3b95f7fa8469df73fab325a683f7389c4db63aa71"}, - {file = "orjson-3.8.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:64c5da5c9679ef3d85e9bbcbb62f4ccdc1f1975780caa20f2ec1e37b4da6bd36"}, - {file = "orjson-3.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c632a2157fa9ec098d655287e9e44809615af99837c49f53d96bfbca453c5bd"}, - {file = "orjson-3.8.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f63da6309c282a2b58d4a846f0717f6440356b4872838b9871dc843ed1fe2b38"}, - {file = "orjson-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c9be25c313ba2d5478829d949165445c3bd36c62e07092b4ba8dbe5426574d1"}, - {file = "orjson-3.8.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:4bcce53e9e088f82633f784f79551fcd7637943ab56c51654aaf9d4c1d5cfa54"}, - {file = "orjson-3.8.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:33edb5379c6e6337f9383c85fe4080ce3aa1057cc2ce29345b7239461f50cbd6"}, - {file = "orjson-3.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:da35d347115758bbc8bfaf39bb213c42000f2a54e3f504c84374041d20835cd6"}, - {file = "orjson-3.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d755d94a90a941b91b4d39a6b02e289d8ba358af2d1a911edf266be7942609dc"}, - {file = "orjson-3.8.2-cp310-none-win_amd64.whl", hash = "sha256:7ea96923e26390b2142602ebb030e2a4db9351134696e0b219e5106bddf9b48e"}, - {file = "orjson-3.8.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:a0d89de876e6f1cef917a2338378a60a98584e1c2e1c67781e20b6ed1c512478"}, - {file = "orjson-3.8.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:8d47e7592fe938aec898eb22ea4946298c018133df084bc78442ff18e2c6347c"}, - {file = "orjson-3.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3d9f1043f618d0c64228aab9711e5bd822253c50b6c56223951e32b51f81d62"}, - {file = "orjson-3.8.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed10600e8b08f1e87b656ad38ab316191ce94f2c9adec57035680c0dc9e93c81"}, - {file = "orjson-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99c49e49a04bf61fee7aaea6d92ac2b1fcf6507aea894bbdf3fbb25fe792168c"}, - {file = "orjson-3.8.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:1463674f8efe6984902473d7b5ce3edf444c1fcd09dc8aa4779638a28fb9ca01"}, - {file = "orjson-3.8.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c1ef75f1d021d817e5c60a42da0b4b7e3123b1b37415260b8415666ddacc7cd7"}, - {file = "orjson-3.8.2-cp311-none-win_amd64.whl", hash = "sha256:b6007e1ac8564b13b2521720929e8bb3ccd3293d9fdf38f28728dcc06db6248f"}, - {file = "orjson-3.8.2-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a02c13ae523221576b001071354380e277346722cc6b7fdaacb0fd6db5154b3e"}, - {file = "orjson-3.8.2-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:fa2e565cf8ffdb37ce1887bd1592709ada7f701e61aa4b1e710be94b0aecbab4"}, - {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1d8864288f7c5fccc07b43394f83b721ddc999f25dccfb5d0651671a76023f5"}, - {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1874c05d0bb994601fa2d51605cb910d09343c6ebd36e84a573293523fab772a"}, - {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:349387ed6989e5db22e08c9af8d7ca14240803edc50de451d48d41a0e7be30f6"}, - {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:4e42b19619d6e97e201053b865ca4e62a48da71165f4081508ada8e1b91c6a30"}, - {file = "orjson-3.8.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:bc112c17e607c59d1501e72afb44226fa53d947d364aed053f0c82d153e29616"}, - {file = "orjson-3.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6fda669211f2ed1fc2c8130187ec90c96b4f77b6a250004e666d2ef8ed524e5f"}, - {file = "orjson-3.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:aebd4e80fea0f20578fd0452908b9206a6a0d5ae9f5c99b6e665bbcd989e56cd"}, - {file = "orjson-3.8.2-cp37-none-win_amd64.whl", hash = "sha256:9f3cd0394eb6d265beb2a1572b5663bc910883ddbb5cdfbcb660f5a0444e7fd8"}, - {file = "orjson-3.8.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:74e7d54d11b3da42558d69a23bf92c2c48fabf69b38432d5eee2c5b09cd4c433"}, - {file = "orjson-3.8.2-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:8cbadc9be748a823f9c743c7631b1ee95d3925a9c0b21de4e862a1d57daa10ec"}, - {file = "orjson-3.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07d5a8c69a2947d9554a00302734fe3d8516415c8b280963c92bc1033477890"}, - {file = "orjson-3.8.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b364ea01d1b71b9f97bf97af9eb79ebee892df302e127a9e2e4f8eaa74d6b98"}, - {file = "orjson-3.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b98a8c825a59db94fbe8e0cce48618624c5a6fb1436467322d90667c08a0bf80"}, - {file = "orjson-3.8.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ab63103f60b516c0fce9b62cb4773f689a82ab56e19ef2387b5a3182f80c0d78"}, - {file = "orjson-3.8.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:73ab3f4288389381ae33ab99f914423b69570c88d626d686764634d5e0eeb909"}, - {file = "orjson-3.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2ab3fd8728e12c36e20c6d9d70c9e15033374682ce5acb6ed6a08a80dacd254d"}, - {file = "orjson-3.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cde11822cf71a7f0daaa84223249b2696a2b6cda7fa587e9fd762dff1a8848e4"}, - {file = "orjson-3.8.2-cp38-none-win_amd64.whl", hash = "sha256:b14765ea5aabfeab1a194abfaa0be62c9fee6480a75ac8c6974b4eeede3340b4"}, - {file = "orjson-3.8.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:6068a27d59d989d4f2864c2fc3440eb7126a0cfdfaf8a4ad136b0ffd932026ae"}, - {file = "orjson-3.8.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:6bf36fa759a1b941fc552ad76b2d7fb10c1d2a20c056be291ea45eb6ae1da09b"}, - {file = "orjson-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f436132e62e647880ca6988974c8e3165a091cb75cbed6c6fd93e931630c22fa"}, - {file = "orjson-3.8.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ecd8936259a5920b52a99faf62d4efeb9f5e25a0aacf0cce1e9fa7c37af154f"}, - {file = "orjson-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c13114b345cda33644f64e92fe5d8737828766cf02fbbc7d28271a95ea546832"}, - {file = "orjson-3.8.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6e43cdc3ddf96bdb751b748b1984b701125abacca8fc2226b808d203916e8cba"}, - {file = "orjson-3.8.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ee39071da2026b11e4352d6fc3608a7b27ee14bc699fd240f4e604770bc7a255"}, - {file = "orjson-3.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1c3833976ebbeb3b5b6298cb22e23bf18453f6b80802103b7d08f7dd8a61611d"}, - {file = "orjson-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b9a34519d3d70935e1cd3797fbed8fbb6f61025182bea0140ca84d95b6f8fbe5"}, - {file = "orjson-3.8.2-cp39-none-win_amd64.whl", hash = "sha256:2734086d9a3dd9591c4be7d05aff9beccc086796d3f243685e56b7973ebac5bc"}, - {file = "orjson-3.8.2.tar.gz", hash = "sha256:a2fb95a45031ccf278e44341027b3035ab99caa32aa173279b1f0a06324f434b"}, + {file = "orjson-3.8.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bf425bba42a8cee49d611ddd50b7fea9e87787e77bf90b2cb9742293f319480"}, + {file = "orjson-3.8.3-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:068febdc7e10655a68a381d2db714d0a90ce46dc81519a4962521a0af07697fb"}, + {file = "orjson-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46241e63df2d39f4b7d44e2ff2becfb6646052b963afb1a99f4ef8c2a31aba0"}, + {file = "orjson-3.8.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:961bc1dcbc3a89b52e8979194b3043e7d28ffc979187e46ad23efa8ada612d04"}, + {file = "orjson-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ea3336c2bda31bc938785b84283118dec52eb90a2946b140054873946f60a4"}, + {file = "orjson-3.8.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:83891e9c3a172841f63cae75ff9ce78f12e4c2c5161baec7af725b1d71d4de21"}, + {file = "orjson-3.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4b587ec06ab7dd4fb5acf50af98314487b7d56d6e1a7f05d49d8367e0e0b23bc"}, + {file = "orjson-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37196a7f2219508c6d944d7d5ea0000a226818787dadbbed309bfa6174f0402b"}, + {file = "orjson-3.8.3-cp310-none-win_amd64.whl", hash = "sha256:94bd4295fadea984b6284dc55f7d1ea828240057f3b6a1d8ec3fe4d1ea596964"}, + {file = "orjson-3.8.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:8fe6188ea2a1165280b4ff5fab92753b2007665804e8214be3d00d0b83b5764e"}, + {file = "orjson-3.8.3-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d30d427a1a731157206ddb1e95620925298e4c7c3f93838f53bd19f6069be244"}, + {file = "orjson-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3497dde5c99dd616554f0dcb694b955a2dc3eb920fe36b150f88ce53e3be2a46"}, + {file = "orjson-3.8.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc29ff612030f3c2e8d7c0bc6c74d18b76dde3726230d892524735498f29f4b2"}, + {file = "orjson-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1612e08b8254d359f9b72c4a4099d46cdc0f58b574da48472625a0e80222b6e"}, + {file = "orjson-3.8.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:54f3ef512876199d7dacd348a0fc53392c6be15bdf857b2d67fa1b089d561b98"}, + {file = "orjson-3.8.3-cp311-none-win_amd64.whl", hash = "sha256:a30503ee24fc3c59f768501d7a7ded5119a631c79033929a5035a4c91901eac7"}, + {file = "orjson-3.8.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:d746da1260bbe7cb06200813cc40482fb1b0595c4c09c3afffe34cfc408d0a4a"}, + {file = "orjson-3.8.3-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e570fdfa09b84cc7c42a3a6dd22dbd2177cb5f3798feefc430066b260886acae"}, + {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca61e6c5a86efb49b790c8e331ff05db6d5ed773dfc9b58667ea3b260971cfb2"}, + {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cd0bb7e843ceba759e4d4cc2ca9243d1a878dac42cdcfc2295883fbd5bd2400"}, + {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff96c61127550ae25caab325e1f4a4fba2740ca77f8e81640f1b8b575e95f784"}, + {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:faf44a709f54cf490a27ccb0fb1cb5a99005c36ff7cb127d222306bf84f5493f"}, + {file = "orjson-3.8.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:194aef99db88b450b0005406f259ad07df545e6c9632f2a64c04986a0faf2c68"}, + {file = "orjson-3.8.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:aa57fe8b32750a64c816840444ec4d1e4310630ecd9d1d7b3db4b45d248b5585"}, + {file = "orjson-3.8.3-cp37-none-win_amd64.whl", hash = "sha256:dbd74d2d3d0b7ac8ca968c3be51d4cfbecec65c6d6f55dabe95e975c234d0338"}, + {file = "orjson-3.8.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ef3b4c7931989eb973fbbcc38accf7711d607a2b0ed84817341878ec8effb9c5"}, + {file = "orjson-3.8.3-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:cf3dad7dbf65f78fefca0eb385d606844ea58a64fe908883a32768dfaee0b952"}, + {file = "orjson-3.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbdfbd49d58cbaabfa88fcdf9e4f09487acca3d17f144648668ea6ae06cc3183"}, + {file = "orjson-3.8.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f06ef273d8d4101948ebc4262a485737bcfd440fb83dd4b125d3e5f4226117bc"}, + {file = "orjson-3.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75de90c34db99c42ee7608ff88320442d3ce17c258203139b5a8b0afb4a9b43b"}, + {file = "orjson-3.8.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:78d69020fa9cf28b363d2494e5f1f10210e8fecf49bf4a767fcffcce7b9d7f58"}, + {file = "orjson-3.8.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b70782258c73913eb6542c04b6556c841247eb92eeace5db2ee2e1d4cb6ffaa5"}, + {file = "orjson-3.8.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:989bf5980fc8aca43a9d0a50ea0a0eee81257e812aaceb1e9c0dbd0856fc5230"}, + {file = "orjson-3.8.3-cp38-none-win_amd64.whl", hash = "sha256:52540572c349179e2a7b6a7b98d6e9320e0333533af809359a95f7b57a61c506"}, + {file = "orjson-3.8.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f0ec0ca4e81492569057199e042607090ba48289c4f59f29bbc219282b8dc60"}, + {file = "orjson-3.8.3-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:b7018494a7a11bcd04da1173c3a38fa5a866f905c138326504552231824ac9c1"}, + {file = "orjson-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5870ced447a9fbeb5aeb90f362d9106b80a32f729a57b59c64684dbc9175e92"}, + {file = "orjson-3.8.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0459893746dc80dbfb262a24c08fdba2a737d44d26691e85f27b2223cac8075f"}, + {file = "orjson-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0379ad4c0246281f136a93ed357e342f24070c7055f00aeff9a69c2352e38d10"}, + {file = "orjson-3.8.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:3e9e54ff8c9253d7f01ebc5836a1308d0ebe8e5c2edee620867a49556a158484"}, + {file = "orjson-3.8.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f8ff793a3188c21e646219dc5e2c60a74dde25c26de3075f4c2e33cf25835340"}, + {file = "orjson-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b0c13e05da5bc1a6b2e1d3b117cc669e2267ce0a131e94845056d506ef041c6"}, + {file = "orjson-3.8.3-cp39-none-win_amd64.whl", hash = "sha256:4fff44ca121329d62e48582850a247a487e968cfccd5527fab20bd5b650b78c3"}, + {file = "orjson-3.8.3.tar.gz", hash = "sha256:eda1534a5289168614f21422861cbfb1abb8a82d66c00a8ba823d863c0797178"}, ] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, diff --git a/pyproject.toml b/pyproject.toml index 0083c746..521925ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" types-setuptools = "^65.5.0" pook = "^1.0.2" -orjson = "^3.8.1" +orjson = "^3.8.3" [build-system] requires = ["poetry-core>=1.0.0"] From 2bbb5c7f8a5d52641ec688fdf560ca3785dbb5a4 Mon Sep 17 00:00:00 2001 From: Ricky Barillas <8647805+jbonzo@users.noreply.github.com> Date: Wed, 7 Dec 2022 15:20:20 -0500 Subject: [PATCH 192/448] Add instructions for development (#342) --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 2c052f4d..0cf12e3b 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,20 @@ discussed with us ahead of time will generally be declined. If you have more gen feedback or want to discuss using this client with other users, feel free to reach out on our [Slack channel](https://polygon-io.slack.com/archives/C03FRFN7UF3). +### Development + +If you plan to contribute by developing new features then you will need to install certain dependencies. + +#### Poetry + +Poetry is a packaging and dependency manager for Python. +Installation instructions can be found [on their website](https://python-poetry.org/docs/#installation). +Once installed run `poetry install` to install the required dependencies. This step should be run after incorporating new upstream changes. + +#### Makefile + +Our Makefile has the common operations needed when developing on this repo. Running tests and linting can both be run through our Makefile. Just run `make help` to see the list of available commands. + ## Release planning This client will attempt to follow the release cadence of our API. When endpoints are deprecated and newer versions are added, the client will From 28ee2a0b899727e9fc99a5d1419fd9374a1de8d5 Mon Sep 17 00:00:00 2001 From: Turiiya <34311583+tobealive@users.noreply.github.com> Date: Fri, 9 Dec 2022 04:02:10 +0100 Subject: [PATCH 193/448] add iterator type to get_grouped_daily_aggs return (#337) * add iterator type to get_grouped_daily_aggs return * use List type Co-authored-by: Ricky Barillas <8647805+jbonzo@users.noreply.github.com> * revert Iterator type import Co-authored-by: Ricky Barillas <8647805+jbonzo@users.noreply.github.com> --- polygon/rest/aggs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 8c96842c..769509f1 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -60,7 +60,7 @@ def get_grouped_daily_aggs( raw: bool = False, market_type: str = "stocks", include_otc: bool = False, - ) -> Union[GroupedDailyAgg, HTTPResponse]: + ) -> Union[List[GroupedDailyAgg], HTTPResponse]: """ Get the daily open, high, low, and close (OHLC) for the entire market. From 2a7634e9e444a02ceada99369e18f77e3409fa57 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Dec 2022 11:19:27 -0500 Subject: [PATCH 194/448] Bump certifi from 2022.9.24 to 2022.12.7 (#344) Bumps [certifi](https://github.com/certifi/python-certifi) from 2022.9.24 to 2022.12.7. - [Release notes](https://github.com/certifi/python-certifi/releases) - [Commits](https://github.com/certifi/python-certifi/compare/2022.09.24...2022.12.07) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0223ac7c..91cade46 100644 --- a/poetry.lock +++ b/poetry.lock @@ -55,7 +55,7 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.9.24" +version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -625,8 +625,8 @@ black = [ {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, ] certifi = [ - {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, - {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, ] charset-normalizer = [ {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, From 71fe18ae47924c206de8062f56fd46663b6dd100 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 11:12:55 -0500 Subject: [PATCH 195/448] Bump black from 22.10.0 to 22.12.0 (#346) Bumps [black](https://github.com/psf/black) from 22.10.0 to 22.12.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/22.10.0...22.12.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 37 ++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 15 insertions(+), 24 deletions(-) diff --git a/poetry.lock b/poetry.lock index 91cade46..9f8d6232 100644 --- a/poetry.lock +++ b/poetry.lock @@ -33,7 +33,7 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "22.10.0" +version = "22.12.0" description = "The uncompromising code formatter." category = "dev" optional = false @@ -586,7 +586,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "63c0f19699fcd10fb25bfd17bbe8fc93ceec3bef645a99a8fc99042291913cd9" +content-hash = "63d9685142f7df28313bcdf7f57ee17f12d2417a752b871cb54cc4f7c81d2fad" [metadata.files] alabaster = [ @@ -602,27 +602,18 @@ Babel = [ {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, ] black = [ - {file = "black-22.10.0-1fixedarch-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:5cc42ca67989e9c3cf859e84c2bf014f6633db63d1cbdf8fdb666dcd9e77e3fa"}, - {file = "black-22.10.0-1fixedarch-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:5d8f74030e67087b219b032aa33a919fae8806d49c867846bfacde57f43972ef"}, - {file = "black-22.10.0-1fixedarch-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:197df8509263b0b8614e1df1756b1dd41be6738eed2ba9e9769f3880c2b9d7b6"}, - {file = "black-22.10.0-1fixedarch-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:2644b5d63633702bc2c5f3754b1b475378fbbfb481f62319388235d0cd104c2d"}, - {file = "black-22.10.0-1fixedarch-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:e41a86c6c650bcecc6633ee3180d80a025db041a8e2398dcc059b3afa8382cd4"}, - {file = "black-22.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2039230db3c6c639bd84efe3292ec7b06e9214a2992cd9beb293d639c6402edb"}, - {file = "black-22.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14ff67aec0a47c424bc99b71005202045dc09270da44a27848d534600ac64fc7"}, - {file = "black-22.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:819dc789f4498ecc91438a7de64427c73b45035e2e3680c92e18795a839ebb66"}, - {file = "black-22.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5b9b29da4f564ba8787c119f37d174f2b69cdfdf9015b7d8c5c16121ddc054ae"}, - {file = "black-22.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b49776299fece66bffaafe357d929ca9451450f5466e997a7285ab0fe28e3b"}, - {file = "black-22.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:21199526696b8f09c3997e2b4db8d0b108d801a348414264d2eb8eb2532e540d"}, - {file = "black-22.10.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e464456d24e23d11fced2bc8c47ef66d471f845c7b7a42f3bd77bf3d1789650"}, - {file = "black-22.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:9311e99228ae10023300ecac05be5a296f60d2fd10fff31cf5c1fa4ca4b1988d"}, - {file = "black-22.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fba8a281e570adafb79f7755ac8721b6cf1bbf691186a287e990c7929c7692ff"}, - {file = "black-22.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:915ace4ff03fdfff953962fa672d44be269deb2eaf88499a0f8805221bc68c87"}, - {file = "black-22.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:444ebfb4e441254e87bad00c661fe32df9969b2bf224373a448d8aca2132b395"}, - {file = "black-22.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:974308c58d057a651d182208a484ce80a26dac0caef2895836a92dd6ebd725e0"}, - {file = "black-22.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ef3925f30e12a184889aac03d77d031056860ccae8a1e519f6cbb742736383"}, - {file = "black-22.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:432247333090c8c5366e69627ccb363bc58514ae3e63f7fc75c54b1ea80fa7de"}, - {file = "black-22.10.0-py3-none-any.whl", hash = "sha256:c957b2b4ea88587b46cf49d1dc17681c1e672864fd7af32fc1e9664d572b3458"}, - {file = "black-22.10.0.tar.gz", hash = "sha256:f513588da599943e0cde4e32cc9879e825d58720d6557062d1098c5ad80080e1"}, + {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, + {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, + {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, + {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, + {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, + {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, + {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, + {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, + {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, + {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, + {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, + {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, ] certifi = [ {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, diff --git a/pyproject.toml b/pyproject.toml index 521925ff..39a4cc30 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = "^10.3" certifi = "^2022.5.18" [tool.poetry.dev-dependencies] -black = "^22.10.0" +black = "^22.12.0" mypy = "^0.991" types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" From 82e651c9a6552df603eb7b178d622ee185b37110 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Dec 2022 17:29:20 +0000 Subject: [PATCH 196/448] Bump types-setuptools from 65.6.0.1 to 65.6.0.2 (#347) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9f8d6232..95f7e84b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -520,7 +520,7 @@ python-versions = "*" [[package]] name = "types-setuptools" -version = "65.6.0.1" +version = "65.6.0.2" description = "Typing stubs for setuptools" category = "dev" optional = false @@ -586,7 +586,7 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "63d9685142f7df28313bcdf7f57ee17f12d2417a752b871cb54cc4f7c81d2fad" +content-hash = "9c9723bbb16a36bbb58a66116c1a38273b49a5ac950455c842a0ee67f2667612" [metadata.files] alabaster = [ @@ -905,8 +905,8 @@ types-certifi = [ {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, ] types-setuptools = [ - {file = "types-setuptools-65.6.0.1.tar.gz", hash = "sha256:a03cf72f336929c9405f485dd90baef31a401776675f785f69a5a519f0b099ca"}, - {file = "types_setuptools-65.6.0.1-py3-none-any.whl", hash = "sha256:c957599502195ab98e90f0560466fa963f6a23373905e6d4e1772dbfaf1e44b7"}, + {file = "types-setuptools-65.6.0.2.tar.gz", hash = "sha256:ad60ccf01d626de9762224448f36c13e0660e863afd6dc11d979b3739a6c7d24"}, + {file = "types_setuptools-65.6.0.2-py3-none-any.whl", hash = "sha256:2c2b4f756f79778074ce2d21f745aa737b12160d9f8dfa274f47a7287c7a2fee"}, ] types-urllib3 = [ {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, diff --git a/pyproject.toml b/pyproject.toml index 39a4cc30..fa61d2d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" -types-setuptools = "^65.5.0" +types-setuptools = "^65.6.0" pook = "^1.0.2" orjson = "^3.8.3" From 3cee0bce05a8f85cdfa4aaa6885123260dc3a7e3 Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Mon, 12 Dec 2022 09:32:50 -0800 Subject: [PATCH 197/448] Edge headers (#343) * removed formatting from docs and unwated comment dupe * Add headers from options * Added options parameter to rest api functions. * handle headers from options * edge-headers push * Attempting to use with options * created response options class * handle headers from options * merge headers * parameter type cleanup and None value handling in request. * attempting to revert conf.py changes * added concat_method to baseclient and test for requestoptions * refactored and introduced more optionals for stricter use * added type hinting to builder method returns. removed optional from edge_headers method * removed one example from ./example/launchpad and renamed function * lint * Update polygon/rest/base.py remove redundancy. * Update examples/launchpad/launchpad.py Co-authored-by: jbonzo <8647805+jbonzo@users.noreply.github.com> --- README.md | 5 ++ examples/launchpad/README.md | 49 ++++++++++++++ examples/launchpad/launchpad.py | 31 +++++++++ examples/rest/simple-get.py | 9 ++- polygon/rest/aggs.py | 10 +++ polygon/rest/base.py | 33 ++++++++-- polygon/rest/indicators.py | 10 +++ polygon/rest/models/common.py | 6 ++ polygon/rest/models/request.py | 101 +++++++++++++++++++++++++++++ polygon/rest/quotes.py | 16 ++++- polygon/rest/reference.py | 24 +++++++ polygon/rest/snapshot.py | 12 ++++ polygon/rest/trades.py | 8 +++ polygon/rest/vX.py | 4 ++ test_rest/models/test_requests.py | 104 ++++++++++++++++++++++++++++++ 15 files changed, 415 insertions(+), 7 deletions(-) create mode 100644 examples/launchpad/README.md create mode 100644 examples/launchpad/launchpad.py create mode 100644 polygon/rest/models/request.py create mode 100644 test_rest/models/test_requests.py diff --git a/README.md b/README.md index 0cf12e3b..1fc3b5de 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,11 @@ Requires Python >= 3.8. See the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) section in our docs or view the [examples](./examples) directory. +#### Launchpad Usage + +Users of the Launchpad product will need to pass in certain headers in order to make API requests. +Example can be found [here](./examples/launchpad). + ## Contributing If you found a bug or have an idea for a new feature, please first discuss it with us by diff --git a/examples/launchpad/README.md b/examples/launchpad/README.md new file mode 100644 index 00000000..53301593 --- /dev/null +++ b/examples/launchpad/README.md @@ -0,0 +1,49 @@ +# Launchpad + +Users of the Launchpad product will need to pass in certain headers in order to make API requests. + + ```python + +# import RESTClient +from polygon import RESTClient +from polygon.rest.models.request import RequestOptionBuilder + +# create client +c = RESTClient(api_key="API_KEY") + +# create request options +options = RequestOptionBuilder().edge_headers( + edge_id="YOUR_EDGE_ID", # required + edge_ip_address="IP_ADDRESS", # required +) +# get response +res = c.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04", options=options) + +# do something with response + + ``` +Launchpad users can also provide the optional User Agent value describing their Edge User's origination request. + + ```python + +# import RESTClient +from polygon import RESTClient +from polygon.rest.models.request import RequestOptionBuilder + +# create client +c = RESTClient(api_key="API_KEY") + +# create request options +options = RequestOptionBuilder().edge_headers( + edge_id="YOUR_EDGE_ID", # required + edge_ip_address="IP_ADDRESS" # required +).update_edge_header( + edge_user="EDGE_USER" # optional + ) + +# get response +res = c.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04", options=options) + +# do something with response + + ``` \ No newline at end of file diff --git a/examples/launchpad/launchpad.py b/examples/launchpad/launchpad.py new file mode 100644 index 00000000..6c6fbe35 --- /dev/null +++ b/examples/launchpad/launchpad.py @@ -0,0 +1,31 @@ +from polygon import RESTClient +from polygon.rest.models.request import RequestOptionBuilder + + +def get_list_trades_launchpad(): + client = RESTClient() + + """ + set headers example: + options = RequestOptionBuilder() + .edge_headers(edge_id="EDGE_ID", edge_ip_address="EDGE_ID_ADDRESS", edge_user="EDGE_USER") + + update headers example: + options = options.update_edge_header(edge_ip_address="NEW_IP") + """ + options = RequestOptionBuilder().edge_headers( + edge_id="EDGE_ID", edge_ip_address="EDGE_ID_ADDRESS", edge_user="EDGE_USER" + ) + + trades = [] + for t in client.list_trades("AAA", "2022-04-04", limit=5, options=options): + trades.append(t) + print(trades) + + +def main(): + get_list_trades_launchpad() + + +if __name__ == "__main__": + main() diff --git a/examples/rest/simple-get.py b/examples/rest/simple-get.py index 43ad4387..8a9586ad 100644 --- a/examples/rest/simple-get.py +++ b/examples/rest/simple-get.py @@ -1,6 +1,13 @@ from polygon import RESTClient +from polygon.rest import models client = RESTClient() -aggs = client.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04") +aggs = client.get_aggs( + "AAPL", + 1, + "day", + "2022-04-04", + "2022-04-04", +) print(aggs) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 769509f1..efa6fab2 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -4,6 +4,8 @@ from urllib3 import HTTPResponse from datetime import datetime, date +from .models.request import RequestOptionBuilder + class AggsClient(BaseClient): def get_aggs( @@ -19,6 +21,7 @@ def get_aggs( limit: Optional[int] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[List[Agg], HTTPResponse]: """ Get aggregate bars for a ticker over a given date range in custom time window sizes. @@ -48,6 +51,7 @@ def get_aggs( result_key="results", deserializer=Agg.from_dict, raw=raw, + options=options, ) # TODO: next breaking change release move "market_type" to be 2nd mandatory @@ -60,6 +64,7 @@ def get_grouped_daily_aggs( raw: bool = False, market_type: str = "stocks", include_otc: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[List[GroupedDailyAgg], HTTPResponse]: """ Get the daily open, high, low, and close (OHLC) for the entire market. @@ -78,6 +83,7 @@ def get_grouped_daily_aggs( result_key="results", deserializer=GroupedDailyAgg.from_dict, raw=raw, + options=options, ) def get_daily_open_close_agg( @@ -87,6 +93,7 @@ def get_daily_open_close_agg( adjusted: Optional[bool] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[DailyOpenCloseAgg, HTTPResponse]: """ Get the open, close and afterhours prices of a stock symbol on a certain date. @@ -105,6 +112,7 @@ def get_daily_open_close_agg( params=self._get_params(self.get_daily_open_close_agg, locals()), deserializer=DailyOpenCloseAgg.from_dict, raw=raw, + options=options, ) def get_previous_close_agg( @@ -113,6 +121,7 @@ def get_previous_close_agg( adjusted: Optional[bool] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[PreviousCloseAgg, HTTPResponse]: """ Get the previous day's open, high, low, and close (OHLC) for the specified stock ticker. @@ -131,4 +140,5 @@ def get_previous_close_agg( result_key="results", deserializer=PreviousCloseAgg.from_dict, raw=raw, + options=options, ) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index a2e914f9..75b91716 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -6,6 +6,7 @@ from typing import Optional, Any, Dict from datetime import datetime import pkg_resources # part of setuptools +from .models.request import RequestOptionBuilder from ..logging import get_logger import logging from ..exceptions import AuthError, BadResponse, NoResultsError @@ -34,20 +35,24 @@ def __init__( raise AuthError( f"Must specify env var POLYGON_API_KEY or pass api_key in constructor" ) + self.API_KEY = api_key self.BASE = base + self.headers = { + "Authorization": "Bearer " + self.API_KEY, + "User-Agent": f"Polygon.io PythonClient/{version}", + } + # https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool self.client = urllib3.PoolManager( num_pools=num_pools, - headers={ - "Authorization": "Bearer " + self.API_KEY, - "User-Agent": f"Polygon.io PythonClient/{version}", - }, + headers=self.headers, # default headers sent with each request. ca_certs=certifi.where(), cert_reqs="CERT_REQUIRED", ) + self.timeout = urllib3.Timeout(connect=connect_timeout, read=read_timeout) self.retries = retries if verbose: @@ -67,16 +72,21 @@ def _get( result_key: Optional[str] = None, deserializer=None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Any: if params is None: params = {} params = {str(k): str(v) for k, v in params.items() if v is not None} logger.debug("_get %s params %s", path, params) + + option = options if options is not None else RequestOptionBuilder() + resp = self.client.request( "GET", self.BASE + path, fields=params, retries=self.retries, + headers=self._concat_headers(option.headers), ) if resp.status != 200: @@ -147,12 +157,18 @@ def _get_params( return params + def _concat_headers(self, headers: Optional[Dict[str, str]]) -> Dict[str, str]: + if headers is None: + return self.headers + return {**headers, **self.headers} + def _paginate_iter( self, path: str, params: dict, deserializer, result_key: str = "results", + options: Optional[RequestOptionBuilder] = None, ): while True: resp = self._get( @@ -161,6 +177,7 @@ def _paginate_iter( deserializer=deserializer, result_key=result_key, raw=True, + options=options, ) decoded = self._decode(resp) for t in decoded[result_key]: @@ -178,10 +195,15 @@ def _paginate( raw: bool, deserializer, result_key: str = "results", + options: Optional[RequestOptionBuilder] = None, ): if raw: return self._get( - path=path, params=params, deserializer=deserializer, raw=True + path=path, + params=params, + deserializer=deserializer, + raw=True, + options=options, ) return self._paginate_iter( @@ -189,4 +211,5 @@ def _paginate( params=params, deserializer=deserializer, result_key=result_key, + options=options, ) diff --git a/polygon/rest/indicators.py b/polygon/rest/indicators.py index 601eda71..ce87927d 100644 --- a/polygon/rest/indicators.py +++ b/polygon/rest/indicators.py @@ -11,6 +11,8 @@ from urllib3 import HTTPResponse from datetime import datetime, date +from .models.request import RequestOptionBuilder + class IndicatorsClient(BaseClient): def get_sma( @@ -29,6 +31,7 @@ def get_sma( params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[SMAIndicatorResults, HTTPResponse]: """ Get SMA values for a given ticker over a given range with the specified parameters @@ -62,6 +65,7 @@ def get_sma( result_key="results", deserializer=SMAIndicatorResults.from_dict, raw=raw, + options=options, ) def get_ema( @@ -80,6 +84,7 @@ def get_ema( params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[EMAIndicatorResults, HTTPResponse]: """ Get EMA values for a given ticker over a given range with the specified parameters @@ -113,6 +118,7 @@ def get_ema( result_key="results", deserializer=EMAIndicatorResults.from_dict, raw=raw, + options=options, ) def get_rsi( @@ -131,6 +137,7 @@ def get_rsi( params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[RSIIndicatorResults, HTTPResponse]: """ Get RSI values for a given ticker over a given range with the specified parameters @@ -164,6 +171,7 @@ def get_rsi( result_key="results", deserializer=RSIIndicatorResults.from_dict, raw=raw, + options=options, ) def get_macd( @@ -184,6 +192,7 @@ def get_macd( params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[MACDIndicatorResults, HTTPResponse]: """ Get MACD values for a given ticker over a given range with the specified parameters @@ -218,4 +227,5 @@ def get_macd( result_key="results", deserializer=MACDIndicatorResults.from_dict, raw=raw, + options=options, ) diff --git a/polygon/rest/models/common.py b/polygon/rest/models/common.py index b371c1de..e09c3e7e 100644 --- a/polygon/rest/models/common.py +++ b/polygon/rest/models/common.py @@ -92,3 +92,9 @@ class SeriesType(Enum): CLOSE = "close" HIGH = "high" LOW = "low" + + +class LaunchPadOptions(Enum): + X_POLYGON_EDGE_ID = "X-Polygon-Edge-ID" + X_POLYGON_IP_ADDRESS = "X-Polygon-Edge-IP-Address" + X_POLYGON_EDGE_USER_AGENT = "X-Polygon-Edge-User-Agent" diff --git a/polygon/rest/models/request.py b/polygon/rest/models/request.py new file mode 100644 index 00000000..85e31daf --- /dev/null +++ b/polygon/rest/models/request.py @@ -0,0 +1,101 @@ +from typing import Dict, Optional + +X_POLYGON_EDGE_ID = "X-Polygon-Edge-ID" +X_POLYGON_EDGE_IP_ADDRESS = "X-Polygon-Edge-IP-Address" +X_POLYGON_EDGE_USER_AGENT = "X-Polygon-Edge-User-Agent" + +HEADER = "header" + + +class RequestOptionBuilder: + def __init__( + self, + edge_id: Optional[str] = None, + edge_ip_address: Optional[str] = None, + edge_user: Optional[str] = None, + ): + """ + RequestOptionBuilder is a utility class to build polygon api options used in requests. + :param edge_id: is a required Launchpad header. It identifies the Edge User requesting data + :param edge_ip_address: is a required Launchpad header. It denotes the originating IP Address of the Edge User + :param edge_user: is an optional Launchpad header. It denotes the originating UserAgent of the Edge User requesting data. + """ + self.headers: Optional[Dict[str, str]] = None + if edge_id is not None and edge_ip_address is not None: + self.edge_headers( + edge_id=edge_id, edge_ip_address=edge_ip_address, edge_user=edge_user + ) + + def edge_headers( + self, + edge_id: str, + edge_ip_address: str, + edge_user: Optional[str] = None, + ) -> "RequestOptionBuilder": + """ + require_edge_headers adds required headers to the headers' dictionary + :param edge_id: is a required Launchpad header. It identifies the Edge User requesting data + :param edge_ip_address: is a required Launchpad header. It denotes the originating IP Address of the Edge User + requesting data + :param edge_user: user_agent: is an optional Launchpad header. It denotes the originating UserAgent of the Edge + User requesting data + :return ResponseOptionBuilder + """ + edge_headers: Dict[str, str] = { + X_POLYGON_EDGE_ID: edge_id, + X_POLYGON_EDGE_IP_ADDRESS: edge_ip_address, + } + + if edge_user is not None: + edge_headers[X_POLYGON_EDGE_USER_AGENT] = edge_user + + self._add_to_edge_headers(**edge_headers) + + return self + + def update_edge_header( + self, + edge_id: Optional[str] = None, + edge_ip_address: Optional[str] = None, + edge_user: Optional[str] = None, + ) -> "RequestOptionBuilder": + """ + used to change individual edge elements of underlying headers' dictionary. + :param edge_id: is a required Launchpad header. It identifies the Edge User requesting data + :param edge_ip_address: is a required Launchpad header. It denotes the originating IP Address of the Edge User + requesting data + :param edge_user: user_agent: is an optional Launchpad header. It denotes the originating UserAgent of the Edge + User requesting data + :return: + """ + if self.headers is None: + raise RequestOptionError( + "must set required fields prior to using update function." + ) + edge_headers: Dict[str, str] = {} + + if edge_id is not None: + edge_headers[X_POLYGON_EDGE_ID] = edge_id + + if edge_ip_address is not None: + edge_headers[X_POLYGON_EDGE_IP_ADDRESS] = edge_ip_address + + if edge_user is not None: + edge_headers[X_POLYGON_EDGE_USER_AGENT] = edge_user + + self._add_to_edge_headers(**edge_headers) + + return self + + def _add_to_edge_headers(self, **headers): + if self.headers is None: + self.headers = {} + + for k, v in headers.items(): + self.headers[k] = v + + +class RequestOptionError(Exception): + """ + Missing required option. + """ diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index ba7ca684..7dda6846 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -12,6 +12,9 @@ from urllib3 import HTTPResponse from datetime import datetime, date +from .models.request import RequestOptionBuilder + + # https://polygon.io/docs/stocks class QuotesClient(BaseClient): def list_quotes( @@ -27,6 +30,7 @@ def list_quotes( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[Quote], HTTPResponse]: """ Get quotes for a ticker symbol in a given time range. @@ -51,10 +55,15 @@ def list_quotes( params=self._get_params(self.list_quotes, locals()), raw=raw, deserializer=Quote.from_dict, + options=options, ) def get_last_quote( - self, ticker: str, params: Optional[Dict[str, Any]] = None, raw: bool = False + self, + ticker: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[LastQuote, HTTPResponse]: """ Get the most recent NBBO (Quote) tick for a given stock. @@ -72,6 +81,7 @@ def get_last_quote( result_key="results", deserializer=LastQuote.from_dict, raw=raw, + options=options, ) def get_last_forex_quote( @@ -80,6 +90,7 @@ def get_last_forex_quote( to: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[LastForexQuote, HTTPResponse]: """ Get the last quote tick for a forex currency pair. @@ -97,6 +108,7 @@ def get_last_forex_quote( params=params, deserializer=LastForexQuote.from_dict, raw=raw, + options=options, ) def get_real_time_currency_conversion( @@ -107,6 +119,7 @@ def get_real_time_currency_conversion( precision: Union[int, Precision] = 2, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[RealTimeCurrencyConversion, HTTPResponse]: """ Get currency conversions using the latest market conversion rates. @@ -129,4 +142,5 @@ def get_real_time_currency_conversion( params=params, deserializer=RealTimeCurrencyConversion.from_dict, raw=raw, + options=options, ) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 9716b8b4..3c01c324 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -25,6 +25,8 @@ from urllib3 import HTTPResponse from datetime import date +from .models.request import RequestOptionBuilder + class MarketsClient(BaseClient): def get_market_holidays( @@ -85,6 +87,7 @@ def list_tickers( order: Optional[Union[str, Order]] = "asc", params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[Ticker], HTTPResponse]: """ Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex. @@ -116,6 +119,7 @@ def list_tickers( params=self._get_params(self.list_tickers, locals()), raw=raw, deserializer=Ticker.from_dict, + options=options, ) def get_ticker_details( @@ -124,6 +128,7 @@ def get_ticker_details( date: Optional[str] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> 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. @@ -142,6 +147,7 @@ def get_ticker_details( deserializer=TickerDetails.from_dict, raw=raw, result_key="results", + options=options, ) def get_ticker_events( @@ -149,6 +155,7 @@ def get_ticker_events( ticker: Optional[str] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[TickerChangeResults, HTTPResponse]: """ @@ -166,6 +173,7 @@ def get_ticker_events( deserializer=TickerChangeResults.from_dict, result_key="results", raw=raw, + options=options, ) def list_ticker_news( @@ -185,6 +193,7 @@ def list_ticker_news( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[TickerNews], 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. @@ -205,6 +214,7 @@ def list_ticker_news( params=self._get_params(self.list_ticker_news, locals()), raw=raw, deserializer=TickerNews.from_dict, + options=options, ) def get_ticker_types( @@ -213,6 +223,7 @@ def get_ticker_types( locale: Optional[Union[str, Locale]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[List[TickerTypes], HTTPResponse]: """ List all ticker types that Polygon.io has. @@ -231,6 +242,7 @@ def get_ticker_types( deserializer=TickerTypes.from_dict, raw=raw, result_key="results", + options=options, ) @@ -253,6 +265,7 @@ def list_splits( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[Split], HTTPResponse]: """ Get a list of historical stock splits, including the ticker symbol, the execution date, and the factors of the split ratio. @@ -282,6 +295,7 @@ def list_splits( params=self._get_params(self.list_splits, locals()), raw=raw, deserializer=Split.from_dict, + options=options, ) @@ -325,6 +339,7 @@ def list_dividends( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[Dividend], HTTPResponse]: """ Get a list of historical cash dividends, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount. @@ -371,6 +386,7 @@ def list_dividends( params=self._get_params(self.list_dividends, locals()), raw=raw, deserializer=Dividend.from_dict, + options=options, ) @@ -386,6 +402,7 @@ def list_conditions( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[Condition], HTTPResponse]: """ List all conditions that Polygon.io uses. @@ -408,6 +425,7 @@ def list_conditions( params=self._get_params(self.list_conditions, locals()), raw=raw, deserializer=Condition.from_dict, + options=options, ) @@ -418,6 +436,7 @@ def get_exchanges( locale: Optional[Union[str, Locale]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[List[Exchange], HTTPResponse]: """ List all exchanges that Polygon.io knows about. @@ -436,6 +455,7 @@ def get_exchanges( deserializer=Exchange.from_dict, raw=raw, result_key="results", + options=options, ) @@ -446,6 +466,7 @@ def get_options_contract( as_of: Optional[Union[str, date]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[OptionsContract, HTTPResponse]: """ Get the most recent trade for a ticker. @@ -464,6 +485,7 @@ def get_options_contract( result_key="results", deserializer=OptionsContract.from_dict, raw=raw, + options=options, ) def list_options_contracts( @@ -491,6 +513,7 @@ def list_options_contracts( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[OptionsContract], HTTPResponse]: """ List historical options contracts. @@ -515,4 +538,5 @@ def list_options_contracts( params=self._get_params(self.list_options_contracts, locals()), raw=raw, deserializer=OptionsContract.from_dict, + options=options, ) diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 7b58ab9a..b3806e08 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -9,6 +9,8 @@ ) from urllib3 import HTTPResponse +from .models.request import RequestOptionBuilder + def get_locale(market_type: Union[SnapshotMarketType, str]): if market_type == SnapshotMarketType.STOCKS.value: @@ -25,6 +27,7 @@ def get_snapshot_all( params: Optional[Dict[str, Any]] = None, raw: bool = False, include_otc: Optional[bool] = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[List[TickerSnapshot], HTTPResponse]: """ Get the most up-to-date market data for all traded stock symbols. @@ -46,6 +49,7 @@ def get_snapshot_all( deserializer=TickerSnapshot.from_dict, raw=raw, result_key="tickers", + options=options, ) def get_snapshot_direction( @@ -55,6 +59,7 @@ def get_snapshot_direction( params: Optional[Dict[str, Any]] = None, include_otc: Optional[bool] = False, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[List[TickerSnapshot], HTTPResponse]: """ Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets. @@ -76,6 +81,7 @@ def get_snapshot_direction( result_key="tickers", deserializer=TickerSnapshot.from_dict, raw=raw, + options=options, ) def get_snapshot_ticker( @@ -84,6 +90,7 @@ def get_snapshot_ticker( ticker: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[TickerSnapshot, HTTPResponse]: """ Get the most up-to-date market data for all traded stock symbols. @@ -102,6 +109,7 @@ def get_snapshot_ticker( result_key="ticker", deserializer=TickerSnapshot.from_dict, raw=raw, + options=options, ) def get_snapshot_option( @@ -110,6 +118,7 @@ def get_snapshot_option( option_contract: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[OptionContractSnapshot, HTTPResponse]: """ Get the snapshot of an option contract for a stock equity. @@ -125,6 +134,7 @@ def get_snapshot_option( result_key="results", deserializer=OptionContractSnapshot.from_dict, raw=raw, + options=options, ) def get_snapshot_crypto_book( @@ -132,6 +142,7 @@ def get_snapshot_crypto_book( ticker: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[SnapshotTickerFullBook, HTTPResponse]: """ Get the current level 2 book of a single ticker. This is the combined book from all of the exchanges. @@ -148,4 +159,5 @@ def get_snapshot_crypto_book( result_key="data", deserializer=SnapshotTickerFullBook.from_dict, raw=raw, + options=options, ) diff --git a/polygon/rest/trades.py b/polygon/rest/trades.py index 4b3fb287..3aad1d0e 100644 --- a/polygon/rest/trades.py +++ b/polygon/rest/trades.py @@ -4,6 +4,8 @@ from urllib3 import HTTPResponse from datetime import datetime, date +from .models.request import RequestOptionBuilder + class TradesClient(BaseClient): def list_trades( @@ -19,6 +21,7 @@ def list_trades( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[Trade], HTTPResponse]: """ Get trades for a ticker symbol in a given time range. @@ -43,6 +46,7 @@ def list_trades( params=self._get_params(self.list_trades, locals()), raw=raw, deserializer=Trade.from_dict, + options=options, ) def get_last_trade( @@ -50,6 +54,7 @@ def get_last_trade( ticker: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[LastTrade, HTTPResponse]: """ Get the most recent trade for a ticker. @@ -67,6 +72,7 @@ def get_last_trade( result_key="results", deserializer=LastTrade.from_dict, raw=raw, + options=options, ) def get_last_crypto_trade( @@ -75,6 +81,7 @@ def get_last_crypto_trade( to: str, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[CryptoTrade, HTTPResponse]: """ Get the last trade tick for a cryptocurrency pair. @@ -93,4 +100,5 @@ def get_last_crypto_trade( result_key="last", deserializer=CryptoTrade.from_dict, raw=raw, + options=options, ) diff --git a/polygon/rest/vX.py b/polygon/rest/vX.py index 350b0b83..36af52d2 100644 --- a/polygon/rest/vX.py +++ b/polygon/rest/vX.py @@ -4,6 +4,8 @@ from urllib3 import HTTPResponse from datetime import datetime, date +from .models.request import RequestOptionBuilder + class VXClient(BaseClient): def list_stock_financials( @@ -30,6 +32,7 @@ def list_stock_financials( order: Optional[Union[str, Order]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[StockFinancial], HTTPResponse]: """ Get historical financial data for a stock ticker. @@ -65,4 +68,5 @@ def list_stock_financials( params=self._get_params(self.list_stock_financials, locals()), raw=raw, deserializer=StockFinancial.from_dict, + options=options, ) diff --git a/test_rest/models/test_requests.py b/test_rest/models/test_requests.py new file mode 100644 index 00000000..e7233933 --- /dev/null +++ b/test_rest/models/test_requests.py @@ -0,0 +1,104 @@ +import unittest + +from polygon import RESTClient +from polygon.rest.models.request import ( + RequestOptionBuilder, + X_POLYGON_EDGE_ID, + X_POLYGON_EDGE_USER_AGENT, + X_POLYGON_EDGE_IP_ADDRESS, +) + + +class RequestTest(unittest.TestCase): + def test_empty_request_options(self): + options = RequestOptionBuilder() + + expected_edge_headers = None + assert expected_edge_headers == options.headers + + def test_request_options_with_initialized_values(self): + options = RequestOptionBuilder( + edge_id="test", edge_ip_address="test", edge_user="test" + ) + + expected_object = { + X_POLYGON_EDGE_ID: "test", + X_POLYGON_EDGE_IP_ADDRESS: "test", + X_POLYGON_EDGE_USER_AGENT: "test", + } + + assert expected_object == options.headers + + def test_request_options_builder(self): + options = RequestOptionBuilder().edge_headers( + edge_id="test", edge_ip_address="test" + ) + + required_options = { + X_POLYGON_EDGE_ID: "test", + X_POLYGON_EDGE_IP_ADDRESS: "test", + } + print(options.headers, required_options) + self.assertDictEqual(required_options, options.headers) + + all_options = { + X_POLYGON_EDGE_ID: "test", + X_POLYGON_EDGE_IP_ADDRESS: "test", + X_POLYGON_EDGE_USER_AGENT: "test", + } + + options = options.update_edge_header(edge_user="test") + self.assertDictEqual(all_options, options.headers) + + def test_header_update(self): + + options = RequestOptionBuilder( + edge_id="test", edge_ip_address="test", edge_user="test" + ) + + # this mocks the expected behavior during the request.get function call + # in the BaseClient. + headers = options.headers + + expected_headers = { + "X-Polygon-Edge-ID": "test", + "X-Polygon-Edge-IP-Address": "test", + "X-Polygon-Edge-User-Agent": "test", + } + + self.assertDictEqual(headers, expected_headers) + + expected_headers = { + "X-Polygon-Edge-ID": "test2", + "X-Polygon-Edge-IP-Address": "test2", + "X-Polygon-Edge-User-Agent": "test2", + } + + options = options.update_edge_header( + edge_id="test2", edge_ip_address="test2", edge_user="test2" + ) + + self.assertDictEqual(options.headers, expected_headers) + + def test_clint_headers_concat(self): + client = RESTClient(api_key="test") + options = RequestOptionBuilder("test", "test", "test") + concat_headers = client._concat_headers(options.headers) + + expected = { + "Authorization": "Bearer test", + "User-Agent": "Polygon.io PythonClient/0.0.0", + "X-Polygon-Edge-ID": "test", + "X-Polygon-Edge-IP-Address": "test", + "X-Polygon-Edge-User-Agent": "test", + } + + self.assertDictEqual(concat_headers, expected) + + headers = None + expected = { + "Authorization": "Bearer test", + "User-Agent": "Polygon.io PythonClient/0.0.0", + } + + self.assertDictEqual(expected, client._concat_headers(headers)) From 5d33f34b31d81286172657ee02fd85ab1c12f00b Mon Sep 17 00:00:00 2001 From: Chai Gangavarapu <7276836+chaig15@users.noreply.github.com> Date: Mon, 12 Dec 2022 11:39:57 -0800 Subject: [PATCH 198/448] add summaries endpoint (#340) * summaries endpoint framework * summaries endpoint framework * add models * lint * add test * Fix any_of being a list * Test fixes * lint * fix list tickers * fix list tickers * add new tests * lint * remove test and format json * lint * fix test expected response for summaries Co-authored-by: jbonzo <8647805+jbonzo@users.noreply.github.com> --- polygon/rest/__init__.py | 2 + polygon/rest/base.py | 5 +- polygon/rest/models/__init__.py | 1 + polygon/rest/models/summaries.py | 70 ++++++++++++ polygon/rest/summaries.py | 33 ++++++ ...05000%2CC%3AEURUSD%2CX%3ABTCUSD%2CAPx.json | 101 +++++++++++++++++ test_rest/test_summaries.py | 106 ++++++++++++++++++ 7 files changed, 317 insertions(+), 1 deletion(-) create mode 100644 polygon/rest/models/summaries.py create mode 100644 polygon/rest/summaries.py create mode 100644 test_rest/mocks/v1/summaries&ticker.any_of=NCLH%2CO%3ANCLH221014C00005000%2CC%3AEURUSD%2CX%3ABTCUSD%2CAPx.json create mode 100644 test_rest/test_summaries.py diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index 98bdf27b..aa8722e3 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -3,6 +3,7 @@ from .quotes import QuotesClient from .snapshot import SnapshotClient from .indicators import IndicatorsClient +from .summaries import SummariesClient from .reference import ( MarketsClient, TickersClient, @@ -34,6 +35,7 @@ class RESTClient( ExchangesClient, ContractsClient, IndicatorsClient, + SummariesClient, ): def __init__( self, diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 75b91716..dce4aed0 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -151,8 +151,11 @@ def _get_params( or argname.endswith("_lte") or argname.endswith("_gt") or argname.endswith("_gte") + or argname.endswith("_any_of") ): - argname = ".".join(argname.rsplit("_", 1)) + argname = ".".join(argname.split("_", 1)) + if argname.endswith("any_of"): + val = ",".join(val) params[argname] = val return params diff --git a/polygon/rest/models/__init__.py b/polygon/rest/models/__init__.py index c76311bb..2c9a8086 100644 --- a/polygon/rest/models/__init__.py +++ b/polygon/rest/models/__init__.py @@ -12,3 +12,4 @@ from .splits import * from .tickers import * from .trades import * +from .summaries import * diff --git a/polygon/rest/models/summaries.py b/polygon/rest/models/summaries.py new file mode 100644 index 00000000..549c6fe0 --- /dev/null +++ b/polygon/rest/models/summaries.py @@ -0,0 +1,70 @@ +from sqlite3 import Timestamp +from typing import Optional +from ...modelclass import modelclass +from .tickers import Branding + + +@modelclass +class Session: + "Contains Session data for the summaries endpoint." + change: Optional[float] = None + change_percent: Optional[float] = None + early_trading_change: Optional[float] = None + early_trading_change_percent: Optional[float] = None + late_trading_change: Optional[float] = None + late_trading_change_percent: Optional[float] = None + close: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + open: Optional[float] = None + previous_close: Optional[float] = None + volume: Optional[float] = None + + @staticmethod + def from_dict(d): + return Session(**d) + + +@modelclass +class Options: + "Contains options data for the summaries endpoint" + contract_type: Optional[str] = None + exercise_style: Optional[str] = None + expiration_date: Optional[str] = None + shares_per_contract: Optional[float] = None + strike_price: Optional[float] = None + underlying_ticker: Optional[float] = None + + @staticmethod + def from_dict(d): + return Options(**d) + + +@modelclass +class SummaryResult: + "Contains summary result data for a list of tickers" + price: Optional[float] = None + name: Optional[str] = None + ticker: Optional[str] = None + branding: Optional[Branding] = None + market_status: Optional[str] = None + type: Optional[str] = None + session: Optional[Session] = None + options: Optional[Options] = None + error: Optional[str] = None + message: Optional[str] = None + + @staticmethod + def from_dict(d): + return SummaryResult( + price=d.get("price", None), + name=d.get("name", None), + ticker=d.get("ticker", None), + branding=None if "branding" not in d else Branding.from_dict(d["branding"]), + market_status=d.get("market_status", None), + type=d.get("type", None), + session=None if "session" not in d else Session.from_dict(d["session"]), + options=None if "options" not in d else Options.from_dict(d["options"]), + error=d.get("error", None), + message=d.get("message", None), + ) diff --git a/polygon/rest/summaries.py b/polygon/rest/summaries.py new file mode 100644 index 00000000..110f8fbe --- /dev/null +++ b/polygon/rest/summaries.py @@ -0,0 +1,33 @@ +from polygon.rest.models.summaries import SummaryResult +from .base import BaseClient +from typing import Optional, Any, Dict, List, Union, Iterator +from .models import Order +from urllib3 import HTTPResponse +from datetime import datetime, date + + +class SummariesClient(BaseClient): + def get_summaries( + self, + ticker_any_of: Optional[List[str]] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + ) -> Union[List[SummaryResult], HTTPResponse]: + """ + GetSummaries retrieves summaries for the ticker list with the given params. + For more details see https://polygon.io/docs/stocks/get_v1_summaries. + + :param ticker_any_of: The ticker symbol + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: SummaryResults + """ + + url = f"/v1/summaries" + return self._get( + path=url, + params=self._get_params(self.get_summaries, locals()), + result_key="results", + deserializer=SummaryResult.from_dict, + raw=raw, + ) diff --git a/test_rest/mocks/v1/summaries&ticker.any_of=NCLH%2CO%3ANCLH221014C00005000%2CC%3AEURUSD%2CX%3ABTCUSD%2CAPx.json b/test_rest/mocks/v1/summaries&ticker.any_of=NCLH%2CO%3ANCLH221014C00005000%2CC%3AEURUSD%2CX%3ABTCUSD%2CAPx.json new file mode 100644 index 00000000..3d4e504c --- /dev/null +++ b/test_rest/mocks/v1/summaries&ticker.any_of=NCLH%2CO%3ANCLH221014C00005000%2CC%3AEURUSD%2CX%3ABTCUSD%2CAPx.json @@ -0,0 +1,101 @@ +{ + "request_id":"abc123", + "results":[ + { + "branding":{ + "icon_url":"https://api.polygon.io/icon.png", + "logo_url":"https://api.polygon.io/logo.svg" + }, + "market_status":"closed", + "name":"Norwegian Cruise Lines", + "price":22.3, + "session":{ + "change":-1.05, + "change_percent":-4.67, + "close":21.4, + "early_trading_change":-0.39, + "early_trading_change_percent":-0.07, + "high":22.49, + "late_trading_change":1.2, + "late_trading_change_percent":3.92, + "low":21.35, + "open":22.49, + "previous_close":22.45, + "volume":37 + }, + "ticker":"NCLH", + "type":"stocks" + }, + { + "market_status":"closed", + "name":"NCLH $5 Call", + "options":{ + "contract_type":"call", + "exercise_style":"american", + "expiration_date":"2022-10-14", + "shares_per_contract":100, + "strike_price":5, + "underlying_ticker":"NCLH" + }, + "price":6.6, + "session":{ + "change":-0.05, + "change_percent":-1.07, + "close":6.65, + "early_trading_change":-0.01, + "early_trading_change_percent":-0.03, + "high":7.01, + "late_trading_change":-0.4, + "late_trading_change_percent":-0.02, + "low":5.42, + "open":6.7, + "previous_close":6.71, + "volume":67 + }, + "ticker":"O:NCLH221014C00005000", + "type":"options" + }, + { + "market_status":"open", + "name":"Euro - United States Dollar", + "price":0.97989, + "session":{ + "change":-0.0001, + "change_percent":-0.67, + "close":0.97989, + "high":0.98999, + "low":0.96689, + "open":0.97889, + "previous_close":0.98001 + }, + "ticker":"C:EURUSD", + "type":"fx" + }, + { + "branding":{ + "icon_url":"https://api.polygon.io/icon.png", + "logo_url":"https://api.polygon.io/logo.svg" + }, + "market_status":"open", + "name":"Bitcoin - United States Dollar", + "price":32154.68, + "session":{ + "change":-201.23, + "change_percent":-0.77, + "close":32154.68, + "high":33124.28, + "low":28182.88, + "open":31129.32, + "previous_close":33362.18 + }, + "ticker":"X:BTCUSD", + "type":"crypto" + }, + { + "error":"NOT_FOUND", + "message":"Ticker not found.", + "ticker":"APx" + } + ], + "status":"OK" +} \ No newline at end of file diff --git a/test_rest/test_summaries.py b/test_rest/test_summaries.py new file mode 100644 index 00000000..97737eee --- /dev/null +++ b/test_rest/test_summaries.py @@ -0,0 +1,106 @@ +from polygon.rest.models import SummaryResult, Branding, Session, Options +from base import BaseTest + + +class SummariesTest(BaseTest): + def test_get_summaries_list(self): + ticker_any_of = ["NCLH", "O:NCLH221014C00005000", "C:EURUSD", "X:BTCUSD", "APx"] + summary_results = self.c.get_summaries(ticker_any_of) + expected = [ + SummaryResult( + price=22.3, + name="Norwegian Cruise Lines", + ticker="NCLH", + branding=Branding( + icon_url="https://api.polygon.io/icon.png", + logo_url="https://api.polygon.io/logo.svg", + ), + market_status="closed", + type="stocks", + session=Session( + change=-1.05, + change_percent=-4.67, + close=21.4, + early_trading_change=-0.39, + early_trading_change_percent=-0.07, + high=22.49, + late_trading_change=1.2, + late_trading_change_percent=3.92, + low=21.35, + open=22.49, + previous_close=22.45, + volume=37, + ), + ), + SummaryResult( + price=6.6, + name="NCLH $5 Call", + ticker="O:NCLH221014C00005000", + market_status="closed", + type="options", + session=Session( + change=-0.05, + change_percent=-1.07, + close=6.65, + early_trading_change=-0.01, + early_trading_change_percent=-0.03, + high=7.01, + late_trading_change=-0.4, + late_trading_change_percent=-0.02, + low=5.42, + open=6.7, + previous_close=6.71, + volume=67, + ), + options=Options( + contract_type="call", + exercise_style="american", + expiration_date="2022-10-14", + shares_per_contract=100, + strike_price=5, + underlying_ticker="NCLH", + ), + ), + SummaryResult( + price=0.97989, + name="Euro - United States Dollar", + ticker="C:EURUSD", + market_status="open", + type="fx", + session=Session( + change=-0.0001, + change_percent=-0.67, + close=0.97989, + high=0.98999, + low=0.96689, + open=0.97889, + previous_close=0.98001, + ), + ), + SummaryResult( + price=32154.68, + name="Bitcoin - United States Dollar", + ticker="X:BTCUSD", + branding=Branding( + icon_url="https://api.polygon.io/icon.png", + logo_url="https://api.polygon.io/logo.svg", + ), + market_status="open", + type="crypto", + session=Session( + change=-201.23, + change_percent=-0.77, + close=32154.68, + high=33124.28, + low=28182.88, + open=31129.32, + previous_close=33362.18, + ), + ), + SummaryResult( + ticker="APx", + error="NOT_FOUND", + message="Ticker not found.", + ), + ] + self.assertEqual(summary_results, expected) From 0bad448cd56be6f8d717b422b2726617e6e380a2 Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Mon, 12 Dec 2022 16:21:02 -0800 Subject: [PATCH 199/448] Param handling (#348) * replaced params with get_params which is standard * lint * refactors * Bump black from 22.10.0 to 22.12.0 (#346) Bumps [black](https://github.com/psf/black) from 22.10.0 to 22.12.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/22.10.0...22.12.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump types-setuptools from 65.6.0.1 to 65.6.0.2 (#347) * Edge headers (#343) * removed formatting from docs and unwated comment dupe * Add headers from options * Added options parameter to rest api functions. * handle headers from options * edge-headers push * Attempting to use with options * created response options class * handle headers from options * merge headers * parameter type cleanup and None value handling in request. * attempting to revert conf.py changes * added concat_method to baseclient and test for requestoptions * refactored and introduced more optionals for stricter use * added type hinting to builder method returns. removed optional from edge_headers method * removed one example from ./example/launchpad and renamed function * lint * Update polygon/rest/base.py remove redundancy. * Update examples/launchpad/launchpad.py Co-authored-by: jbonzo <8647805+jbonzo@users.noreply.github.com> * param handling and refactor cleanup * removed named param * lint Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: jbonzo <8647805+jbonzo@users.noreply.github.com> --- polygon/rest/base.py | 5 ----- polygon/rest/quotes.py | 9 +++------ polygon/rest/reference.py | 9 +++++---- .../{events.json => events&types=ticker_change.json} | 0 test_rest/test_tickers.py | 2 +- 5 files changed, 9 insertions(+), 16 deletions(-) rename test_rest/mocks/vX/reference/tickers/META/{events.json => events&types=ticker_change.json} (100%) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index dce4aed0..3507ed02 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -74,11 +74,6 @@ def _get( raw: bool = False, options: Optional[RequestOptionBuilder] = None, ) -> Any: - if params is None: - params = {} - params = {str(k): str(v) for k, v in params.items() if v is not None} - logger.debug("_get %s params %s", path, params) - option = options if options is not None else RequestOptionBuilder() resp = self.client.request( diff --git a/polygon/rest/quotes.py b/polygon/rest/quotes.py index 7dda6846..31f46047 100644 --- a/polygon/rest/quotes.py +++ b/polygon/rest/quotes.py @@ -115,7 +115,7 @@ def get_real_time_currency_conversion( self, from_: str, to: str, - amount: float, + amount: Optional[float] = None, precision: Union[int, Precision] = 2, params: Optional[Dict[str, Any]] = None, raw: bool = False, @@ -133,13 +133,10 @@ def get_real_time_currency_conversion( :return: Real-Time Currency Conversion """ url = f"/v1/conversion/{from_}/{to}" - if params is None: - params = {} - params["amount"] = amount - params["precision"] = precision + return self._get( path=url, - params=params, + params=self._get_params(self.get_real_time_currency_conversion, locals()), deserializer=RealTimeCurrencyConversion.from_dict, raw=raw, options=options, diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 3c01c324..8741e8a0 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -152,7 +152,8 @@ def get_ticker_details( def get_ticker_events( self, - ticker: Optional[str] = None, + ticker: str, + types: Optional[str] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, options: Optional[RequestOptionBuilder] = None, @@ -169,7 +170,7 @@ def get_ticker_events( return self._get( path=url, - params=params, + params=self._get_params(self.get_ticker_events, locals()), deserializer=TickerChangeResults.from_dict, result_key="results", raw=raw, @@ -238,7 +239,7 @@ def get_ticker_types( return self._get( path=url, - params=params, + params=self._get_params(self.get_ticker_types, locals()), deserializer=TickerTypes.from_dict, raw=raw, result_key="results", @@ -451,7 +452,7 @@ def get_exchanges( return self._get( path=url, - params=params, + params=self._get_params(self.get_exchanges, locals()), deserializer=Exchange.from_dict, raw=raw, result_key="results", diff --git a/test_rest/mocks/vX/reference/tickers/META/events.json b/test_rest/mocks/vX/reference/tickers/META/events&types=ticker_change.json similarity index 100% rename from test_rest/mocks/vX/reference/tickers/META/events.json rename to test_rest/mocks/vX/reference/tickers/META/events&types=ticker_change.json diff --git a/test_rest/test_tickers.py b/test_rest/test_tickers.py index f45b487a..bac9eaa8 100644 --- a/test_rest/test_tickers.py +++ b/test_rest/test_tickers.py @@ -239,7 +239,7 @@ def test_get_ticker_types(self): self.assertEqual(types, expected) def test_get_ticker_events_ticker_change(self): - events = self.c.get_ticker_events(ticker="META") + events = self.c.get_ticker_events(ticker="META", types="ticker_change") expected = TickerChangeResults( name="Meta Platforms, Inc. Class A Common Stock", figi="BBG000MM2P62", From dafd940bfc51a886b350e4475abb9aace0701d3a Mon Sep 17 00:00:00 2001 From: Garrett Edel Date: Thu, 15 Dec 2022 12:14:18 -0500 Subject: [PATCH 200/448] Updated get_aggs docstring to change _from to from_ (#350) --- polygon/rest/aggs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index efa6fab2..cd204259 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -29,7 +29,7 @@ def get_aggs( :param ticker: The ticker symbol. :param multiplier: The size of the timespan multiplier. :param timespan: The size of the time window. - :param _from: The start of the aggregate time window as YYYY-MM-DD, a date, Unix MS Timestamp, or a datetime. + :param from_: The start of the aggregate time window as YYYY-MM-DD, a date, Unix MS Timestamp, or a datetime. :param to: The end of the aggregate time window as YYYY-MM-DD, a date, Unix MS Timestamp, or a datetime. :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. :param sort: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window. From 425bdd4af960ae223cdef66777c7617d7fc0b049 Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Wed, 4 Jan 2023 18:19:45 -0800 Subject: [PATCH 201/448] add options chain endpoint (#352) * add options chain endpoint * fixed response * changed to pagination * doc changes --- polygon/rest/snapshot.py | 25 ++++++++- test_rest/mocks/v3/snapshot/options/AAPL.json | 52 ++++++++++++++++++ test_rest/test_snapshots.py | 53 +++++++++++++++++++ 3 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 test_rest/mocks/v3/snapshot/options/AAPL.json diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index b3806e08..54376a39 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -1,5 +1,5 @@ from .base import BaseClient -from typing import Optional, Any, Dict, List, Union +from typing import Optional, Any, Dict, List, Union, Iterator from .models import ( TickerSnapshot, Direction, @@ -137,6 +137,29 @@ def get_snapshot_option( options=options, ) + def list_snapshot_options_chain( + self, + underlying_asset: str, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[Iterator[OptionContractSnapshot], HTTPResponse]: + """ + Get the snapshot of all options contracts for an underlying ticker. + + :param underlying_asset: The underlying ticker symbol of the option contract. + :return: List of Snapshots + """ + url = f"/v3/snapshot/options/{underlying_asset}" + return self._paginate( + path=url, + params=self._get_params(self.list_snapshot_options_chain, locals()), + result_key="results", + deserializer=OptionContractSnapshot.from_dict, + raw=raw, + options=options, + ) + def get_snapshot_crypto_book( self, ticker: str, diff --git a/test_rest/mocks/v3/snapshot/options/AAPL.json b/test_rest/mocks/v3/snapshot/options/AAPL.json new file mode 100644 index 00000000..677b39ea --- /dev/null +++ b/test_rest/mocks/v3/snapshot/options/AAPL.json @@ -0,0 +1,52 @@ + + { + "request_id": "104d9b901d0c9e81d284cb8b41c5cdd3", + "results": [{ + "break_even_price": 179.075, + "day": { + "change": -2.3999999999999986, + "change_percent": -7.643312101910824, + "close": 29, + "high": 32.25, + "last_updated": 1651204800000000000, + "low": 29, + "open": 29.99, + "previous_close": 31.4, + "volume": 8, + "vwap": 30.7738 + }, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2023-06-16", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:AAPL230616C00150000" + }, + "greeks": { + "delta": 0.6436614934293701, + "gamma": 0.0061735291012820675, + "theta": -0.028227189324641973, + "vega": 0.6381159723175714 + }, + "implied_volatility": 0.3570277203465058, + "last_quote": { + "ask": 29.25, + "ask_size": 209, + "bid": 28.9, + "bid_size": 294, + "last_updated": 1651254260800059648, + "midpoint": 29.075, + "timeframe": "REAL-TIME" + }, + "open_interest": 8133, + "underlying_asset": { + "change_to_break_even": 19.11439999999999, + "last_updated": 1651254263172073152, + "price": 159.9606, + "ticker": "AAPL", + "timeframe": "REAL-TIME" + } + }], + "status": "OK" +} \ No newline at end of file diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index 498fb966..8051d398 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -210,6 +210,59 @@ def test_get_snapshot_option(self): ) self.assertEqual(snapshots, expected) + def test_list_snapshot_options_chain(self): + snapshots = [s for s in self.c.list_snapshot_options_chain("AAPL")] + expected = [ + OptionContractSnapshot( + break_even_price=179.075, + day=DayOptionContractSnapshot( + change=-2.3999999999999986, + change_percent=-7.643312101910824, + close=29, + high=32.25, + last_updated=1651204800000000000, + low=29, + open=29.99, + previous_close=31.4, + volume=8, + vwap=30.7738, + ), + details=OptionDetails( + contract_type="call", + exercise_style="american", + expiration_date="2023-06-16", + shares_per_contract=100, + strike_price=150, + ticker="O:AAPL230616C00150000", + ), + greeks=Greeks( + delta=0.6436614934293701, + gamma=0.0061735291012820675, + theta=-0.028227189324641973, + vega=0.6381159723175714, + ), + implied_volatility=0.3570277203465058, + last_quote=LastQuoteOptionContractSnapshot( + ask=29.25, + ask_size=209, + bid=28.9, + bid_size=294, + last_updated=1651254260800059648, + midpoint=29.075, + timeframe="REAL-TIME", + ), + open_interest=8133, + underlying_asset=UnderlyingAsset( + change_to_break_even=19.11439999999999, + last_updated=1651254263172073152, + price=159.9606, + ticker="AAPL", + timeframe="REAL-TIME", + ), + ) + ] + self.assertEqual(snapshots, expected) + def test_get_snapshot_crypto_book(self): snapshots = self.c.get_snapshot_crypto_book("X:BTCUSD") expected = SnapshotTickerFullBook( From 075a73e301ff66f50552297a926f9ee2c25153eb Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Tue, 17 Jan 2023 14:07:04 -0800 Subject: [PATCH 202/448] options param added to get_summaries (#363) * options param added to get_summaries * deleted unused imports --- polygon/rest/summaries.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/polygon/rest/summaries.py b/polygon/rest/summaries.py index 110f8fbe..bc91825c 100644 --- a/polygon/rest/summaries.py +++ b/polygon/rest/summaries.py @@ -1,9 +1,9 @@ from polygon.rest.models.summaries import SummaryResult from .base import BaseClient -from typing import Optional, Any, Dict, List, Union, Iterator -from .models import Order +from typing import Optional, Any, Dict, List, Union from urllib3 import HTTPResponse -from datetime import datetime, date + +from .models.request import RequestOptionBuilder class SummariesClient(BaseClient): @@ -12,6 +12,7 @@ def get_summaries( ticker_any_of: Optional[List[str]] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + options: Optional[RequestOptionBuilder] = None, ) -> Union[List[SummaryResult], HTTPResponse]: """ GetSummaries retrieves summaries for the ticker list with the given params. @@ -30,4 +31,5 @@ def get_summaries( result_key="results", deserializer=SummaryResult.from_dict, raw=raw, + options=options, ) From 3c1570ca16d070a19e881046ff033a05b55b2449 Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Thu, 19 Jan 2023 14:06:47 -0800 Subject: [PATCH 203/448] Update readme (#365) * options param added to get_summaries * deleted unused imports * README update --- README.md | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 99 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1fc3b5de..cf510e6d 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,111 @@ Python client for the [Polygon.io API](https://polygon.io). ## Install -`pip install polygon-api-client` - +``` +pip install polygon-api-client +``` Requires Python >= 3.8. ## Getting started See the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) -section in our docs or view the [examples](./examples) directory. - -#### Launchpad Usage - -Users of the Launchpad product will need to pass in certain headers in order to make API requests. +section in our docs or view the [examples](./examples) directory for additional examples. +## REST API Client +Import the RESTClient. +```python +from polygon import RESTClient +``` +Create a new client with your [API key](https://polygon.io/dashboard/api-keys) +```python +client = RESTClient(api_key="") +``` +### Using the Client +Request data using client methods. +```python +ticker = "AAPL" + +# List Aggregates (Bars) +bars = client.get_aggs(ticker=ticker, multiplier=1, timespan="day", from_="2023-01-09", to="2023-01-10") +for bar in bars: + print(bar) + +# Get Last Trade +trade = client.get_last_trade(ticker=ticker) +print(trade) + +# List Trades +trades = client.list_trades(ticker=ticker, timestamp="2022-01-04") +for trade in trades: + print(trade) + +# Get Last Quote +quote = client.get_last_quote(ticker=ticker) +print(quote) + +# List Quotes +quotes = client.list_quotes(ticker=ticker, timestamp="2022-01-04") +for quote in quotes: + print(quote) +``` +Note: For parameter argument examples check out our docs. All required arguments are annotated with red asterisks " * " and argument examples are set. +Check out an example for Aggregates(client.get_aggs) [here](https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to) + +## Launchpad +Users of the Launchpad product will need to pass in certain headers in order to make API requests using the RequestOptionBuilder. Example can be found [here](./examples/launchpad). +Import classes +```python +from polygon import RESTClient +from polygon.rest.models.request import RequestOptionBuilder +``` +### Using the client +Create client and set options +```python +# create client +c = RESTClient(api_key="API_KEY") + +# create request options +options = RequestOptionBuilder().edge_headers( + edge_id="YOUR_EDGE_ID", # required + edge_ip_address="IP_ADDRESS", # required +) +``` +Request data using client methods. +```python +# get response +res = c.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04", options=options) + +# do something with response +``` +Checkout Launchpad readme for more details on RequestOptionBuilder [here](./examples/launchpad) + +## WebSocket Client + +Import classes +```python +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List +``` +### Using the client +Create a new client with your [API key](https://polygon.io/dashboard/api-keys) and subscription options. +```python +# Note: Multiple subscriptions can be added to the array +# For example, if you want to subscribe to AAPL and META, +# you can do so by adding "T.META" to the subscriptions array. ["T.AAPL", "T.META"] +# If you want to subscribe to all tickers, place an asterisk in place of the symbol. ["T.*"] +ws = WebSocketClient(api_key=, subscriptions=["T.AAPL"]) +``` +Create a handler function and run the WebSocket. +```python +def handle_msg(msg: List[WebSocketMessage]): + for m in msg: + print(m) + +ws.run(handle_msg=handle_msg) +``` +Check out more detailed examples [here](https://github.com/polygon-io/client-python/tree/master/examples/websocket). + ## Contributing If you found a bug or have an idea for a new feature, please first discuss it with us by From d2de685f2d5db896ce59af092a4961f942a8ff83 Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Thu, 19 Jan 2023 14:40:37 -0800 Subject: [PATCH 204/448] Update readme launchpad (#366) * options param added to get_summaries * deleted unused imports * README update * re-ordering readme sections --- README.md | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index cf510e6d..49209d73 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,33 @@ for quote in quotes: Note: For parameter argument examples check out our docs. All required arguments are annotated with red asterisks " * " and argument examples are set. Check out an example for Aggregates(client.get_aggs) [here](https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to) +## WebSocket Client + +Import classes +```python +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List +``` +### Using the client +Create a new client with your [API key](https://polygon.io/dashboard/api-keys) and subscription options. +```python +# Note: Multiple subscriptions can be added to the array +# For example, if you want to subscribe to AAPL and META, +# you can do so by adding "T.META" to the subscriptions array. ["T.AAPL", "T.META"] +# If you want to subscribe to all tickers, place an asterisk in place of the symbol. ["T.*"] +ws = WebSocketClient(api_key=, subscriptions=["T.AAPL"]) +``` +Create a handler function and run the WebSocket. +```python +def handle_msg(msg: List[WebSocketMessage]): + for m in msg: + print(m) + +ws.run(handle_msg=handle_msg) +``` +Check out more detailed examples [here](https://github.com/polygon-io/client-python/tree/master/examples/websocket). + ## Launchpad Users of the Launchpad product will need to pass in certain headers in order to make API requests using the RequestOptionBuilder. Example can be found [here](./examples/launchpad). @@ -85,32 +112,6 @@ res = c.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04", options=options) ``` Checkout Launchpad readme for more details on RequestOptionBuilder [here](./examples/launchpad) -## WebSocket Client - -Import classes -```python -from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage -from typing import List -``` -### Using the client -Create a new client with your [API key](https://polygon.io/dashboard/api-keys) and subscription options. -```python -# Note: Multiple subscriptions can be added to the array -# For example, if you want to subscribe to AAPL and META, -# you can do so by adding "T.META" to the subscriptions array. ["T.AAPL", "T.META"] -# If you want to subscribe to all tickers, place an asterisk in place of the symbol. ["T.*"] -ws = WebSocketClient(api_key=, subscriptions=["T.AAPL"]) -``` -Create a handler function and run the WebSocket. -```python -def handle_msg(msg: List[WebSocketMessage]): - for m in msg: - print(m) - -ws.run(handle_msg=handle_msg) -``` -Check out more detailed examples [here](https://github.com/polygon-io/client-python/tree/master/examples/websocket). ## Contributing From 20d7c33c053b31fb13cb4bebe759b165ce3969bb Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Thu, 19 Jan 2023 14:48:30 -0800 Subject: [PATCH 205/448] adding support for locale change in get_grouped_daily_aggs (#367) --- polygon/rest/aggs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index cd204259..4c92a990 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -62,6 +62,7 @@ def get_grouped_daily_aggs( adjusted: Optional[bool] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, + locale: str = "us", market_type: str = "stocks", include_otc: bool = False, options: Optional[RequestOptionBuilder] = None, @@ -75,7 +76,7 @@ def get_grouped_daily_aggs( :param raw: Return raw object instead of results object :return: List of grouped daily aggregates """ - url = f"/v2/aggs/grouped/locale/us/market/{market_type}/{date}" + url = f"/v2/aggs/grouped/locale/{locale}/market/{market_type}/{date}" return self._get( path=url, From 0971ba2ee685f56f93c0cff97778a8bf7919cc8f Mon Sep 17 00:00:00 2001 From: antdjohns <114414459+antdjohns@users.noreply.github.com> Date: Thu, 26 Jan 2023 13:35:20 -0800 Subject: [PATCH 206/448] financial update limit doc 1 to 10 (#357) --- .polygon/rest.json | 5890 +++++++++++++++++++++++++++++++++----------- polygon/rest/vX.py | 2 +- 2 files changed, 4395 insertions(+), 1497 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 92a41f15..1ea641d1 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -445,6 +445,13 @@ "type": "string" } }, + "required": [ + "id", + "type", + "market", + "name", + "url" + ], "type": "object" }, "type": "array" @@ -497,6 +504,15 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t", + "T" + ], "type": "object" }, "type": "array" @@ -557,11 +573,26 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], "type": "object" }, "type": "array" } }, + "required": [ + "day", + "map", + "msLatency", + "symbol", + "ticks" + ], "type": "object" }, "CryptoLastTrade": { @@ -595,6 +626,13 @@ "type": "integer" } }, + "required": [ + "conditions", + "exchange", + "price", + "size", + "timestamp" + ], "type": "object" }, "symbol": { @@ -602,6 +640,9 @@ "type": "string" } }, + "required": [ + "symbol" + ], "type": "object" }, "CryptoOpenClose": { @@ -645,6 +686,14 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], "type": "object" }, "type": "array" @@ -697,6 +746,14 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], "type": "object" }, "type": "array" @@ -706,6 +763,15 @@ "type": "string" } }, + "required": [ + "symbol", + "isUTC", + "day", + "open", + "close", + "openTrades", + "closingTrades" + ], "type": "object" }, "CryptoSnapshotMinute": { @@ -741,6 +807,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "CryptoSnapshotTicker": { @@ -781,6 +855,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastTrade": { @@ -819,6 +901,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, { @@ -865,6 +955,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -901,6 +999,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -922,6 +1028,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastTrade", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" } }, @@ -949,6 +1065,10 @@ "type": "object" } }, + "required": [ + "p", + "x" + ], "type": "object" }, "type": "array" @@ -971,6 +1091,10 @@ "type": "object" } }, + "required": [ + "p", + "x" + ], "type": "object" }, "type": "array" @@ -989,6 +1113,15 @@ "type": "integer" } }, + "required": [ + "ticker", + "bids", + "asks", + "bidCount", + "askCount", + "spread", + "updated" + ], "type": "object" } }, @@ -1033,6 +1166,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastTrade": { @@ -1071,6 +1212,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, { @@ -1117,6 +1266,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -1153,6 +1310,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -1174,6 +1339,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastTrade", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" }, "type": "array" @@ -1214,6 +1389,14 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], "type": "object" }, "CryptoTradeExchange": { @@ -1791,6 +1974,12 @@ "type": "integer" } }, + "required": [ + "ask", + "bid", + "exchange", + "timestamp" + ], "type": "object" }, "to": { @@ -1798,6 +1987,12 @@ "type": "string" } }, + "required": [ + "from", + "to", + "initialAmount", + "converted" + ], "type": "object" }, "ForexExchangeId": { @@ -1852,6 +2047,15 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t", + "T" + ], "type": "object" }, "type": "array" @@ -1900,11 +2104,24 @@ "type": "integer" } }, + "required": [ + "a", + "b", + "x", + "t" + ], "type": "object" }, "type": "array" } }, + "required": [ + "day", + "map", + "msLatency", + "pair", + "ticks" + ], "type": "object" }, "ForexPairLastQuote": { @@ -1930,6 +2147,12 @@ "type": "integer" } }, + "required": [ + "ask", + "bid", + "exchange", + "timestamp" + ], "type": "object" }, "symbol": { @@ -1937,6 +2160,9 @@ "type": "string" } }, + "required": [ + "symbol" + ], "type": "object" }, "ForexPreviousClose": { @@ -1987,6 +2213,15 @@ "type": "number" } }, + "required": [ + "T", + "v", + "o", + "c", + "h", + "l", + "t" + ], "type": "object" }, "type": "array" @@ -2015,6 +2250,12 @@ "type": "integer" } }, + "required": [ + "a", + "b", + "t", + "x" + ], "type": "object" }, "ForexSnapshotPrevDay": { @@ -2050,6 +2291,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ForexSnapshotTicker": { @@ -2085,6 +2334,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "lastQuote": { @@ -2109,6 +2365,12 @@ "type": "integer" } }, + "required": [ + "a", + "b", + "t", + "x" + ], "type": "object" }, "min": { @@ -2140,6 +2402,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "prevDay": { @@ -2176,6 +2445,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -2197,6 +2474,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastQuote", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" } }, @@ -2236,6 +2523,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "lastQuote": { @@ -2260,6 +2554,12 @@ "type": "integer" } }, + "required": [ + "a", + "b", + "t", + "x" + ], "type": "object" }, "min": { @@ -2291,6 +2591,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "prevDay": { @@ -2327,6 +2634,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -2348,6 +2663,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastQuote", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" }, "type": "array" @@ -2399,6 +2724,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -2716,6 +3049,9 @@ "type": "string" } }, + "required": [ + "request_id" + ], "type": "object" }, "SequenceNumber": { @@ -2759,6 +3095,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, "SnapshotOHLCV": { @@ -2789,6 +3133,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "SnapshotOHLCVVW": { @@ -2824,6 +3175,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "SnapshotOHLCVVWOtc": { @@ -2863,6 +3222,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "StandardBase": { @@ -2874,6 +3241,9 @@ "type": "string" } }, + "required": [ + "request_id" + ], "type": "object" }, { @@ -2887,6 +3257,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" } ] @@ -2902,6 +3275,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, "StatusCountBase": { @@ -2915,6 +3291,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, "StockSymbol": { @@ -2973,6 +3352,15 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "t", + "v", + "T" + ], "type": "object" }, "type": "array" @@ -3034,6 +3422,16 @@ "type": "number" } }, + "required": [ + "status", + "from", + "symbol", + "open", + "high", + "low", + "close", + "volume" + ], "type": "object" }, "StocksSnapshotLastQuote": { @@ -3061,6 +3459,13 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "P", + "S", + "t" + ], "type": "object" }, "StocksSnapshotMinute": { @@ -3100,6 +3505,15 @@ "type": "number" } }, + "required": [ + "av", + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "StocksSnapshotMinuteOTC": { @@ -3143,6 +3557,15 @@ "type": "number" } }, + "required": [ + "av", + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "StocksSnapshotTicker": { @@ -3187,6 +3610,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastQuote": { @@ -3215,6 +3646,13 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "P", + "S", + "t" + ], "type": "object" }, "lastTrade": { @@ -3249,6 +3687,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, "min": { @@ -3293,6 +3739,15 @@ "type": "number" } }, + "required": [ + "av", + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -3333,6 +3788,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -3402,6 +3865,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastQuote": { @@ -3430,6 +3901,13 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "P", + "S", + "t" + ], "type": "object" }, "lastTrade": { @@ -3464,6 +3942,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, "min": { @@ -3508,6 +3994,15 @@ "type": "number" } }, + "required": [ + "av", + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -3548,6 +4043,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -3624,6 +4127,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -3655,6 +4166,13 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "f", + "q" + ], "type": "object" }, "StocksV2NBBO": { @@ -3683,6 +4201,13 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "f", + "q" + ], "type": "object" }, { @@ -3748,6 +4273,17 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "x", + "P", + "S", + "X", + "z" + ], "type": "object" } ] @@ -3781,6 +4317,13 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "f", + "q" + ], "type": "object" }, { @@ -3846,6 +4389,17 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "x", + "P", + "S", + "X", + "z" + ], "type": "object" } ] @@ -3881,6 +4435,13 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "f", + "q" + ], "type": "object" }, { @@ -3924,6 +4485,16 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "e", + "x", + "r", + "z" + ], "type": "object" } ] @@ -3957,6 +4528,13 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "f", + "q" + ], "type": "object" }, { @@ -4000,6 +4578,16 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "e", + "x", + "r", + "z" + ], "type": "object" } ] @@ -4024,6 +4612,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, "TickerResults": { @@ -4070,6 +4661,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -4147,6 +4746,11 @@ "type": "string" } }, + "required": [ + "symbol", + "status", + "request_id" + ], "type": "object" }, "V2AggsBase": { @@ -4172,6 +4776,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, "V2LastBase": { @@ -4185,6 +4796,10 @@ "type": "string" } }, + "required": [ + "status", + "request_id" + ], "type": "object" }, "V2TicksBase": { @@ -4234,224 +4849,159 @@ }, "openapi": "3.0.3", "paths": { - "/v1/conversion/{from}/{to}": { + "/delete-me/{underlyingAsset}": { "get": { - "description": "Get currency conversions using the latest market conversion rates. Note than you can convert in both directions. For example USD to CAD or CAD to USD.", - "operationId": "RealTimeCurrencyConversion", + "description": "Get the snapshot of all options contracts for an underlying ticker.", + "operationId": "OptionsChain", "parameters": [ { - "description": "The \"from\" symbol of the pair.", - "example": "AUD", + "description": "The underlying ticker symbol of the option contract.", + "example": "AAPL", "in": "path", - "name": "from", + "name": "underlyingAsset", "required": true, "schema": { "type": "string" } }, { - "description": "The \"to\" symbol of the pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "Query by strike price of a contract.", + "in": "query", + "name": "strike_price", "schema": { - "type": "string" + "type": "number" + }, + "x-polygon-filter-field": { + "range": true, + "type": "number" } }, { - "description": "The amount to convert, with a decimal.", - "example": 100, + "description": "Query by contract expiration with date format YYYY-MM-DD.", "in": "query", - "name": "amount", - "required": true, + "name": "expiration_date", "schema": { - "default": 100, - "type": "number" + "type": "string" + }, + "x-polygon-filter-field": { + "range": true } }, { - "description": "The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy.", - "example": 2, + "description": "Query by the type of contract.", "in": "query", - "name": "precision", + "name": "contract_type", "schema": { - "default": 2, "enum": [ - 0, - 1, - 2, - 3, - 4 + "call", + "put" ], - "type": "integer" + "type": "string" } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "converted": 73.14, - "from": "AUD", - "initialAmount": 100, - "last": { - "ask": 1.3673344, - "bid": 1.3672596, - "exchange": 48, - "timestamp": 1605555313000 - }, - "status": "success", - "to": "USD" - }, - "schema": { - "properties": { - "converted": { - "description": "The result of the conversion.", - "format": "double", - "type": "number" - }, - "from": { - "description": "The \"from\" currency symbol.", - "type": "string" - }, - "initialAmount": { - "description": "The amount to convert.", - "format": "double", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, - "last": { - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "exchange": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" - }, - "timestamp": { - "description": "The Unix millisecond timestamp.", - "type": "integer", - "x-polygon-go-type": { - "name": "IMilliseconds", - "path": "github.com/polygon-io/ptime" - } - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastQuoteCurrencies" - } - }, - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" - }, - "to": { - "description": "The \"to\" currency symbol.", - "type": "string" - } - }, - "type": "object" - } - }, - "text/csv": { - "example": "ask,bid,exchange,timestamp\n1.3673344,1.3672596,48,1605555313000\n", - "schema": { - "type": "string" - } - } - }, - "description": "The last tick for this currency pair, plus the converted amount for the requested amount." }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Real-time Currency Conversion", - "tags": [ - "fx:conversion" - ], - "x-polygon-entitlement-data-type": { - "description": "NBBO data", - "name": "nbbo" - }, - "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" - } - } - }, - "/v1/historic/crypto/{from}/{to}/{date}": { - "get": { - "description": "Get historic trade ticks for a cryptocurrency pair.\n", - "parameters": [ { - "description": "The \"from\" symbol of the crypto pair.", - "example": "BTC", - "in": "path", - "name": "from", - "required": true, + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gte", + "schema": { + "type": "number" + } + }, + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gt", + "schema": { + "type": "number" + } + }, + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lte", + "schema": { + "type": "number" + } + }, + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lt", + "schema": { + "type": "number" + } + }, + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gte", "schema": { "type": "string" } }, { - "description": "The \"to\" symbol of the crypto pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gt", "schema": { "type": "string" } }, { - "description": "The date/day of the historic ticks to retrieve.", - "example": "2020-10-14", - "in": "path", - "name": "date", - "required": true, + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.lte", "schema": { - "format": "date", "type": "string" } }, { - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "description": "Search by expiration_date.", "in": "query", - "name": "offset", + "name": "expiration_date.lt", "schema": { - "type": "integer" + "type": "string" } }, { - "description": "Limit the size of the response, max 10000.", - "example": 100, + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", "in": "query", "name": "limit", "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, "type": "integer" } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker", + "expiration_date", + "strike_price" + ], + "example": "ticker", + "type": "string" + } } ], "responses": { @@ -4459,450 +5009,592 @@ "content": { "application/json": { "example": { - "day": "2020-10-14T00:00:00.000Z", - "map": { - "c": "conditions", - "p": "price", - "s": "size", - "t": "timestamp", - "x": "exchange" - }, - "msLatency": 1, - "status": "success", - "symbol": "BTC-USD", - "ticks": [ - { - "c": [ - 2 - ], - "p": 15482.89, - "s": 0.00188217, - "t": 1604880000067, - "x": 1 - }, + "request_id": "6a7e466379af0a71039d60cc78e72282", + "results": [ { - "c": [ - 2 - ], - "p": 15482.11, - "s": 0.00161739, - "t": 1604880000167, - "x": 1 + "break_even_price": 151.2, + "day": { + "change": 4.5, + "change_percent": 6.76, + "close": 120.73, + "high": 120.81, + "last_updated": 1605195918507251700, + "low": 118.9, + "open": 119.32, + "previous_close": 119.12, + "volume": 868, + "vwap": 119.31 + }, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-01-21", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "AAPL211022C000150000" + }, + "greeks": { + "delta": 1, + "gamma": 0, + "implied_volatility": 5, + "theta": 0.00229, + "vega": 0 + }, + "last_quote": { + "ask": 120.3, + "ask_size": 4, + "bid": 120.28, + "bid_size": 8, + "last_updated": 1605195918507251700, + "midpoint": 120.29 + }, + "open_interest": 1543, + "underlying_asset": { + "change_to_break_even": 4.2, + "last_updated": 1605195918507251700, + "price": 147, + "ticker": "AAPL", + "timeframe": "DELAYED" + } } ], - "type": "crypto" + "status": "OK" }, "schema": { - "allOf": [ - { - "description": "The status of this request's response.", + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", "type": "string" }, - { - "properties": { - "day": { - "description": "The date that was evaluated from the request.", - "format": "date", - "type": "string" - }, - "map": { - "description": "A map for shortened result keys.", - "type": "object" - }, - "msLatency": { - "description": "The milliseconds of latency for the query results.", - "type": "integer" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" - }, - "ticks": { - "items": { + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "break_even_price": { + "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "format": "double", + "type": "number" + }, + "day": { + "description": "The most recent daily bar for this contract.", "properties": { - "c": { - "description": "A list of condition codes.\n", - "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", - "type": "integer" - }, - "type": "array" + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" }, - "i": { - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", - "type": "string" + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" }, - "p": { - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "close": { + "description": "The closing price for the contract of the day.", "format": "double", "type": "number" }, - "s": { - "description": "The size of a trade (also known as volume).\n", + "high": { + "description": "The highest price for the contract of the day.", "format": "double", "type": "number" }, - "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", - "type": "integer" + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } }, - "x": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - } - ] - } - } - }, - "description": "An array of crypto trade ticks." - }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Historic Crypto Trades", - "tags": [ - "crypto:trades" - ], - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "name": "Trades v3", - "path": "get_v3_trades__cryptoticker" - } - }, - "x-polygon-entitlement-data-type": { - "description": "Trade data", - "name": "trades" - }, - "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" - } - } - }, - "/v1/historic/forex/{from}/{to}/{date}": { - "get": { - "description": "Get historic ticks for a forex currency pair.\n", - "parameters": [ - { - "description": "The \"from\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `from` would be **USD**.\n", - "example": "AUD", - "in": "path", - "name": "from", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The \"to\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `to` would be **JPY**.\n", - "example": "USD", - "in": "path", - "name": "to", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The date/day of the historic ticks to retrieve.", - "example": "2020-10-14", - "in": "path", - "name": "date", - "required": true, - "schema": { - "format": "date", - "type": "string" - } - }, - { - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", - "in": "query", - "name": "offset", - "schema": { - "type": "integer" - } - }, - { - "description": "Limit the size of the response, max 10000.", - "example": 100, - "in": "query", - "name": "limit", - "schema": { - "type": "integer" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "day": "2020-10-14", - "map": { - "ap": "ask", - "bp": "bid", - "t": "timestamp" - }, - "msLatency": "0", - "pair": "AUD/USD", - "status": "success", - "ticks": [ - { - "ap": 0.71703, - "bp": 0.71701, - "t": 1602633600000, - "x": 48 - }, - { - "ap": 0.71703, - "bp": 0.717, - "t": 1602633600000, - "x": 48 - }, - { - "ap": 0.71702, - "bp": 0.717, - "t": 1602633600000, - "x": 48 - } - ], - "type": "forex" - }, - "schema": { - "allOf": [ - { - "properties": { - "status": { - "description": "The status of this request's response.", - "type": "string" - } - }, - "type": "object" - }, - { - "properties": { - "day": { - "description": "The date that was evaluated from the request.", - "format": "date", - "type": "string" - }, - "map": { - "description": "A map for shortened result keys.", - "type": "object" - }, - "msLatency": { - "description": "The milliseconds of latency for the query results.", - "type": "integer" - }, - "pair": { - "description": "The currency pair that was evaluated from the request.", - "type": "string" - }, - "ticks": { - "items": { - "properties": { - "a": { - "description": "The ask price.", + "low": { + "description": "The lowest price for the contract of the day.", "format": "double", "type": "number" }, - "b": { - "description": "The bid price.", + "open": { + "description": "The open price for the contract of the day.", "format": "double", "type": "number" }, - "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", - "type": "integer" + "previous_close": { + "description": "The closing price for the contract of previous trading day.", + "format": "double", + "type": "number" }, - "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" + "volume": { + "description": "The trading volume for the contract of the day.", + "format": "double", + "type": "number" + }, + "vwap": { + "description": "The trading volume weighted average price for the contract of the day.", + "format": "double", + "type": "number", + "x-polygon-go-id": "VWAP" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "Day" + } + }, + "details": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See this link for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "Details" + } + }, + "greeks": { + "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "properties": { + "delta": { + "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "gamma": { + "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "theta": { + "description": "The change in the option's price per day.", + "format": "double", + "type": "number" + }, + "vega": { + "description": "The change in the option's price per 1% increment in volatility.", + "format": "double", + "type": "number" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "Greeks" + } + }, + "implied_volatility": { + "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", + "format": "double", + "type": "number" + }, + "last_quote": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "midpoint": { + "description": "The average of the bid and ask price.", + "format": "double", + "type": "number" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastQuote" + } + }, + "open_interest": { + "description": "The quantity of this contract held at the end of the last trading day.", + "format": "double", + "type": "number" + }, + "underlying_asset": { + "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", + "properties": { + "change_to_break_even": { + "description": "The change in price for the contract to break even.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol for the contract's underlying asset.", + "type": "string" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "UnderlyingAsset" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "OptionSnapshotResult" + } + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } - ] + }, + "type": "object" } } }, - "description": "An array of forex ticks" - }, - "default": { - "description": "Unexpected error" + "description": "Snapshots for options contracts of the underlying ticker" } }, - "summary": "Historic Forex Ticks", + "summary": "Options Chain", "tags": [ - "fx:trades" + "options:snapshot" ], - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "name": "Quotes (BBO) v3", - "path": "get_v3_quotes__fxticker" + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" + }, + { + "description": "15 minute delayed data", + "name": "delayed" } - }, + ], "x-polygon-entitlement-data-type": { - "description": "NBBO data", - "name": "nbbo" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Options data", + "name": "options" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 1000 + }, + "sort": { + "default": "ticker", + "enum": [ + "ticker", + "expiration_date", + "strike_price" + ] + } } - } + }, + "x-polygon-draft": true }, - "/v1/indicators/ema/{cryptoTicker}": { + "/v1/conversion/{from}/{to}": { "get": { - "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "CryptoEMA", + "description": "Get currency conversions using the latest market conversion rates. Note than you can convert in both directions. For example USD to CAD or CAD to USD.", + "operationId": "RealTimeCurrencyConversion", "parameters": [ { - "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "X:BTC-USD", + "description": "The \"from\" symbol of the pair.", + "example": "AUD", "in": "path", - "name": "cryptoTicker", + "name": "from", "required": true, "schema": { "type": "string" - }, - "x-polygon-go-id": "Ticker" - }, - { - "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "in": "query", - "name": "timestamp", - "schema": { - "type": "string" - }, - "x-polygon-filter-field": { - "range": true } }, { - "description": "The size of the aggregate time window.", - "example": "day", - "in": "query", - "name": "timespan", + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, "schema": { - "default": "day", - "enum": [ - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ], "type": "string" } }, { - "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 50, + "description": "The amount to convert, with a decimal.", + "example": 100, "in": "query", - "name": "window", + "name": "amount", + "required": true, "schema": { - "default": 50, - "type": "integer" + "default": 100, + "type": "number" } }, { - "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", - "example": "close", + "description": "The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy.", + "example": 2, "in": "query", - "name": "series_type", + "name": "precision", "schema": { - "default": "close", + "default": 2, "enum": [ - "open", - "high", - "low", - "close" + 0, + 1, + 2, + 3, + 4 ], - "type": "string" - } - }, - { - "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", - "in": "query", - "name": "expand_underlying", - "schema": { - "default": false, - "type": "boolean" + "type": "integer" } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "converted": 73.14, + "from": "AUD", + "initialAmount": 100, + "last": { + "ask": 1.3673344, + "bid": 1.3672596, + "exchange": 48, + "timestamp": 1605555313000 + }, + "status": "success", + "to": "USD" + }, + "schema": { + "properties": { + "converted": { + "description": "The result of the conversion.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The \"from\" currency symbol.", + "type": "string" + }, + "initialAmount": { + "description": "The amount to convert.", + "format": "double", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "last": { + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastQuoteCurrencies" + } + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + }, + "to": { + "description": "The \"to\" currency symbol.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "ask,bid,exchange,timestamp\n1.3673344,1.3672596,48,1605555313000\n", + "schema": { + "type": "string" + } + } + }, + "description": "The last tick for this currency pair, plus the converted amount for the requested amount." }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Real-time Currency Conversion", + "tags": [ + "fx:conversion" + ], + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + } + }, + "/v1/historic/crypto/{from}/{to}/{date}": { + "get": { + "description": "Get historic trade ticks for a cryptocurrency pair.\n", + "parameters": [ { - "description": "The order in which to return the results, ordered by timestamp.", - "example": "desc", - "in": "query", - "name": "order", + "description": "The \"from\" symbol of the crypto pair.", + "example": "BTC", + "in": "path", + "name": "from", + "required": true, "schema": { - "default": "desc", - "enum": [ - "asc", - "desc" - ], "type": "string" } }, { - "description": "Limit the number of results returned, default is 10 and max is 5000", - "in": "query", - "name": "limit", - "schema": { - "default": 10, - "maximum": 5000, - "type": "integer" - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.gte", + "description": "The \"to\" symbol of the crypto pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, "schema": { "type": "string" } }, { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.gt", + "description": "The date/day of the historic ticks to retrieve.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, "schema": { + "format": "date", "type": "string" } }, { - "description": "Search by timestamp.", + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", "in": "query", - "name": "timestamp.lte", + "name": "offset", "schema": { - "type": "string" + "type": "integer" } }, { - "description": "Search by timestamp.", + "description": "Limit the size of the response, max 10000.", + "example": 100, "in": "query", - "name": "timestamp.lt", + "name": "limit", "schema": { - "type": "string" + "type": "integer" } } ], @@ -4911,191 +5603,366 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", - "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", - "results": { - "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" - }, - "values": [ - { - "timestamp": 1517562000016, - "value": 140.139 - } - ] + "day": "2020-10-14T00:00:00.000Z", + "map": { + "c": "conditions", + "p": "price", + "s": "size", + "t": "timestamp", + "x": "exchange" }, - "status": "OK" + "msLatency": 1, + "status": "success", + "symbol": "BTC-USD", + "ticks": [ + { + "c": [ + 2 + ], + "p": 15482.89, + "s": 0.00188217, + "t": 1604880000067, + "x": 1 + }, + { + "c": [ + 2 + ], + "p": 15482.11, + "s": 0.00161739, + "t": 1604880000167, + "x": 1 + } + ], + "type": "crypto" }, "schema": { - "properties": { - "next_url": { - "description": "If present, this value can be used to fetch the next page of data.", - "type": "string" - }, - "request_id": { - "description": "A request id assigned by the server.", + "allOf": [ + { + "description": "The status of this request's response.", "type": "string" }, - "results": { + { "properties": { - "underlying": { - "properties": { - "aggregates": { - "items": { - "properties": { - "c": { - "description": "The close price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "h": { - "description": "The highest price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "l": { - "description": "The lowest price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "n": { - "description": "The number of transactions in the aggregate window.", - "type": "integer" - }, - "o": { - "description": "The open price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "otc": { - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", - "type": "boolean" - }, - "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", - "format": "float", - "type": "number" - }, - "v": { - "description": "The trading volume of the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "vw": { - "description": "The volume weighted average price.", - "format": "float", - "type": "number" - } - }, - "required": [ - "v", - "vw", - "o", - "c", - "h", - "l", - "t", - "n" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Aggregate", - "path": "github.com/polygon-io/go-lib-models/v2/globals" - } - }, - "type": "array" - }, - "url": { - "description": "The URL which can be used to request the underlying aggregates used in this request.", - "type": "string" - } - }, + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" + }, + "map": { + "description": "A map for shortened result keys.", "type": "object" }, - "values": { + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + }, + "ticks": { "items": { "properties": { - "timestamp": { - "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "IMicroseconds", - "path": "github.com/polygon-io/ptime" - } + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" }, - "value": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" + }, + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", + "format": "double", + "type": "number" + }, + "s": { + "description": "The size of a trade (also known as volume).\n", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", + "type": "integer" } }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], "type": "object" }, "type": "array" } }, - "type": "object", - "x-polygon-go-type": { - "name": "EMAResults" - } - }, - "status": { - "description": "The status of this request's response.", - "type": "string" + "required": [ + "day", + "map", + "msLatency", + "symbol", + "ticks" + ], + "type": "object" } - }, - "type": "object" - } - }, - "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", - "schema": { - "type": "string" + ] } } }, - "description": "Exponential Moving Average (EMA) data for each period." + "description": "An array of crypto trade ticks." + }, + "default": { + "description": "Unexpected error" } }, - "summary": "Exponential Moving Average (EMA)", + "summary": "Historic Crypto Trades", "tags": [ - "crpyto:aggregates" + "crypto:trades" ], + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Trades v3", + "path": "get_v3_trades__cryptoticker" + } + }, "x-polygon-entitlement-data-type": { - "description": "Aggregate data", - "name": "aggregates" + "description": "Trade data", + "name": "trades" }, "x-polygon-entitlement-market-type": { "description": "Crypto data", "name": "crypto" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/ema/{fxTicker}": { + "/v1/historic/forex/{from}/{to}/{date}": { "get": { - "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "ForexEMA", + "description": "Get historic ticks for a forex currency pair.\n", "parameters": [ { - "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "C:EUR-USD", + "description": "The \"from\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `from` would be **USD**.\n", + "example": "AUD", "in": "path", - "name": "fxTicker", + "name": "from", "required": true, "schema": { "type": "string" - }, - "x-polygon-go-id": "Ticker" + } }, { - "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "in": "query", - "name": "timestamp", + "description": "The \"to\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `to` would be **JPY**.\n", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The date/day of the historic ticks to retrieve.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "in": "query", + "name": "offset", + "schema": { + "type": "integer" + } + }, + { + "description": "Limit the size of the response, max 10000.", + "example": 100, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "day": "2020-10-14", + "map": { + "ap": "ask", + "bp": "bid", + "t": "timestamp" + }, + "msLatency": "0", + "pair": "AUD/USD", + "status": "success", + "ticks": [ + { + "ap": 0.71703, + "bp": 0.71701, + "t": 1602633600000, + "x": 48 + }, + { + "ap": 0.71703, + "bp": 0.717, + "t": 1602633600000, + "x": 48 + }, + { + "ap": 0.71702, + "bp": 0.717, + "t": 1602633600000, + "x": 48 + } + ], + "type": "forex" + }, + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + { + "properties": { + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" + }, + "map": { + "description": "A map for shortened result keys.", + "type": "object" + }, + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" + }, + "pair": { + "description": "The currency pair that was evaluated from the request.", + "type": "string" + }, + "ticks": { + "items": { + "properties": { + "a": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "b": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + } + }, + "required": [ + "a", + "b", + "x", + "t" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "day", + "map", + "msLatency", + "pair", + "ticks" + ], + "type": "object" + } + ] + } + } + }, + "description": "An array of forex ticks" + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Historic Forex Ticks", + "tags": [ + "fx:trades" + ], + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Quotes (BBO) v3", + "path": "get_v3_quotes__fxticker" + } + }, + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + } + }, + "/v1/indicators/ema/{cryptoTicker}": { + "get": { + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "CryptoEMA", + "parameters": [ + { + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "X:BTC-USD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", "schema": { "type": "string" }, @@ -5122,16 +5989,6 @@ "type": "string" } }, - { - "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, { "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", "example": 50, @@ -5229,11 +6086,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -5370,7 +6227,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", "schema": { "type": "string" } @@ -5381,29 +6238,29 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "fx:aggregates" + "crpyto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Crypto data", + "name": "crypto" } }, "x-polygon-ignore": true }, - "/v1/indicators/ema/{optionsTicker}": { + "/v1/indicators/ema/{fxTicker}": { "get": { "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "OptionsEMA", + "operationId": "ForexEMA", "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "O:SPY241220P00720000", + "example": "C:EUR-USD", "in": "path", - "name": "optionsTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -5547,11 +6404,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -5688,7 +6545,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,286.1730473491824 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,285.60990642465924 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,285.023780156278 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,284.4137303667383 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,282.43007426223943 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.7141043158811 O:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,286.0778649309446 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,283.77878058578887 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,283.11791448724966 O:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.7544192473781", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", "schema": { "type": "string" } @@ -5699,29 +6556,29 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "options:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/ema/{stockTicker}": { + "/v1/indicators/ema/{optionsTicker}": { "get": { "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "EMA", + "operationId": "OptionsEMA", "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "AAPL", + "example": "O:SPY241220P00720000", "in": "path", - "name": "stockTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -5759,7 +6616,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -5865,11 +6722,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -6006,7 +6863,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.17972071441582\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,160.92194334973746\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,162.5721451116157\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,162.93345715698777\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,161.72552880161066\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,162.18657079351314\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.53481135582055\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,159.78118646009983\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,160.48735733602226\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,161.29590022115534\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,286.1730473491824 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,285.60990642465924 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,285.023780156278 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,284.4137303667383 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,282.43007426223943 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.7141043158811 O:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,286.0778649309446 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,283.77878058578887 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,283.11791448724966 O:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.7544192473781", "schema": { "type": "string" } @@ -6017,28 +6874,29 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "stocks:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Options data", + "name": "options" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/macd/{cryptoTicker}": { + "/v1/indicators/ema/{stockTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "CryptoMACD", + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "EMA", "parameters": [ { - "description": "The ticker symbol for which to get MACD data.", - "example": "X:BTC-USD", + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "AAPL", "in": "path", - "name": "cryptoTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -6076,37 +6934,27 @@ } }, { - "description": "The short window size used to calculate MACD data.", - "example": 12, - "in": "query", - "name": "short_window", - "schema": { - "default": 12, - "type": "integer" - } - }, - { - "description": "The long window size used to calculate MACD data.", - "example": 26, + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "example": true, "in": "query", - "name": "long_window", + "name": "adjusted", "schema": { - "default": 26, - "type": "integer" + "default": true, + "type": "boolean" } }, { - "description": "The window size used to calculate the MACD signal line.", - "example": 9, + "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, "in": "query", - "name": "signal_window", + "name": "window", "schema": { - "default": 9, + "default": 50, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate MACD data. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", "example": "close", "in": "query", "name": "series_type", @@ -6192,24 +7040,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { - "histogram": 38.3801666667, - "signal": 106.9811666667, "timestamp": 1517562000016, - "value": 145.3613333333 - }, - { - "histogram": 41.098859136, - "signal": 102.7386283473, - "timestamp": 1517562001016, - "value": 143.8374874833 + "value": 140.139 } ] }, @@ -6304,22 +7144,6 @@ "values": { "items": { "properties": { - "histogram": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, - "signal": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, "timestamp": { "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", "format": "int64", @@ -6345,7 +7169,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "MACDResults" + "name": "EMAResults" } }, "status": { @@ -6357,40 +7181,39 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,-200.79662915774315,-281.5009533935604,80.70432423581724\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,-264.55324270273195,-316.4388906203941,51.88564791766214\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,-317.75700272815084,-339.5909474061525,21.83394467800167\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,-350.23805379084297,-345.0494335756529,-5.188620215190042\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,-347.75055091027025,-343.7522785218554,-3.9982723884148754\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,-339.51740285673077,-342.7527104247516,3.2353075680208576\nX:BTCUSD,11337.77105153,19346.509,0,19527.23,19487.24,19640,18846.95,1664409600000,142239,,0,,0,0,0,0,0,false,1664409600000,-130.70646519456568,-232.81921860513586,102.11275341057018\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,-165.73322121465026,-258.3474069577784,92.61418574312813\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,-242.62960978099727,-301.6770344525147,59.04742467151743\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,-288.68772337443806,-329.4103025998096,40.72257922537153\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.17972071441582\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,160.92194334973746\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,162.5721451116157\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,162.93345715698777\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,161.72552880161066\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,162.18657079351314\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.53481135582055\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,159.78118646009983\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,160.48735733602226\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,161.29590022115534\n", "schema": { "type": "string" } } }, - "description": "Moving Average Convergence/Divergence (MACD) data for each period." + "description": "Exponential Moving Average (EMA) data for each period." } }, - "summary": "Moving Average Convergence/Divergence (MACD)", + "summary": "Exponential Moving Average (EMA)", "tags": [ - "crypto:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/macd/{fxTicker}": { + "/v1/indicators/macd/{cryptoTicker}": { "get": { "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "ForexMACD", + "operationId": "CryptoMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "C:EUR-USD", + "example": "X:BTC-USD", "in": "path", - "name": "fxTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -6427,16 +7250,6 @@ "type": "string" } }, - { - "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, { "description": "The short window size used to calculate MACD data.", "example": 12, @@ -6468,7 +7281,7 @@ } }, { - "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "description": "The price in the aggregate which will be used to calculate MACD data. i.e. 'close' will result in using close prices to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -6554,11 +7367,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -6719,7 +7532,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nC:USDAUD,687,1.5442,0,1.53763,1.5386983,1.5526022,1.537279,1664409600000,687,,0,,0,0,0,0,0,false,1664409600000,0.0160095063995076,0.016240853664654657,-0.0002313472651470569\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,0.019060448457087098,0.015690709670065223,0.0033697387870218753\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,0.017190795754692623,0.013971241529748895,0.003219554224943728\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,0.014349509127189686,0.010792069356789809,0.0035574397703998766\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,0.0169083298713677,0.016298690480941423,0.0006096393904262767\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,0.017968564486413374,0.016146280633334852,0.001822283853078522\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,0.018356408747553177,0.014848274973309752,0.0035081337742434247\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,0.016441299960100686,0.01316635297351296,0.0032749469865877255\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,0.015245524601038118,0.012347616226866026,0.002897908374172092\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,0.014947418239455779,0.011623139133323003,0.0033242791061327756\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,-200.79662915774315,-281.5009533935604,80.70432423581724\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,-264.55324270273195,-316.4388906203941,51.88564791766214\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,-317.75700272815084,-339.5909474061525,21.83394467800167\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,-350.23805379084297,-345.0494335756529,-5.188620215190042\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,-347.75055091027025,-343.7522785218554,-3.9982723884148754\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,-339.51740285673077,-342.7527104247516,3.2353075680208576\nX:BTCUSD,11337.77105153,19346.509,0,19527.23,19487.24,19640,18846.95,1664409600000,142239,,0,,0,0,0,0,0,false,1664409600000,-130.70646519456568,-232.81921860513586,102.11275341057018\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,-165.73322121465026,-258.3474069577784,92.61418574312813\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,-242.62960978099727,-301.6770344525147,59.04742467151743\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,-288.68772337443806,-329.4103025998096,40.72257922537153\n", "schema": { "type": "string" } @@ -6730,29 +7543,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "fx:aggregates" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Crypto data", + "name": "crypto" } }, "x-polygon-ignore": true }, - "/v1/indicators/macd/{optionsTicker}": { + "/v1/indicators/macd/{fxTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", - "operationId": "OptionsMACD", + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "ForexMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "O:SPY241220P00720000", + "example": "C:EUR-USD", "in": "path", - "name": "optionsTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -6916,11 +7729,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -7081,7 +7894,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,-0.05105556065990413,3.5771695836806834,-3.6282251443405875\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,4.047960862047148,5.247666286053219,-1.199705424006071\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,5.255380647906861,6.466477305754766,-1.2110966578479045\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,5.591072756938104,6.769251470216741,-1.178178713278637\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,1.4304642046162712,4.48422586976583,-3.053761665149559\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,4.32835898317461,5.547592642054737,-1.2192336588801274\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,4.623290999840208,5.852401056774768,-1.2291100569345605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,4.932483632022979,6.159678571008409,-1.2271949389854298\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,5.93821326327344,7.063796148536399,-1.1255828852629595\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,6.294916771166584,7.345191869852139,-1.050275098685555\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nC:USDAUD,687,1.5442,0,1.53763,1.5386983,1.5526022,1.537279,1664409600000,687,,0,,0,0,0,0,0,false,1664409600000,0.0160095063995076,0.016240853664654657,-0.0002313472651470569\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,0.019060448457087098,0.015690709670065223,0.0033697387870218753\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,0.017190795754692623,0.013971241529748895,0.003219554224943728\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,0.014349509127189686,0.010792069356789809,0.0035574397703998766\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,0.0169083298713677,0.016298690480941423,0.0006096393904262767\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,0.017968564486413374,0.016146280633334852,0.001822283853078522\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,0.018356408747553177,0.014848274973309752,0.0035081337742434247\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,0.016441299960100686,0.01316635297351296,0.0032749469865877255\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,0.015245524601038118,0.012347616226866026,0.002897908374172092\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,0.014947418239455779,0.011623139133323003,0.0033242791061327756\n", "schema": { "type": "string" } @@ -7092,29 +7905,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "options:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/macd/{stockTicker}": { + "/v1/indicators/macd/{optionsTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "MACD", + "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", + "operationId": "OptionsMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "AAPL", + "example": "O:SPY241220P00720000", "in": "path", - "name": "stockTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -7152,7 +7965,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -7278,11 +8091,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -7443,7 +8256,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,-5.413804946923619,-3.8291158739479005,-1.5846890729757188\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,-4.63165683097526,-3.098305244715017,-1.5333515862602427\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,-4.581291216131007,-2.7149673481499565,-1.86632386798105\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,-3.6311474313744156,-1.1648824074663984,-2.4662650239080173\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,-2.533545758578896,0.9308104167079131,-3.464356175286809\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,-4.771497049659786,-3.432943605703971,-1.3385534439558149\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,-4.349569413677017,-2.2483863811546936,-2.1011830325223233\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,-3.9559234852549707,-1.7230906230241128,-2.232832862230858\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,-3.2635802145105117,-0.548316151489394,-2.7152640630211176\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,-3.070742345502225,0.13049986426588545,-3.2012422097681106\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,-0.05105556065990413,3.5771695836806834,-3.6282251443405875\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,4.047960862047148,5.247666286053219,-1.199705424006071\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,5.255380647906861,6.466477305754766,-1.2110966578479045\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,5.591072756938104,6.769251470216741,-1.178178713278637\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,1.4304642046162712,4.48422586976583,-3.053761665149559\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,4.32835898317461,5.547592642054737,-1.2192336588801274\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,4.623290999840208,5.852401056774768,-1.2291100569345605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,4.932483632022979,6.159678571008409,-1.2271949389854298\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,5.93821326327344,7.063796148536399,-1.1255828852629595\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,6.294916771166584,7.345191869852139,-1.050275098685555\n", "schema": { "type": "string" } @@ -7454,28 +8267,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "stocks:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Options data", + "name": "options" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/rsi/{cryptoTicker}": { + "/v1/indicators/macd/{stockTicker}": { "get": { - "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "CryptoRSI", + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "MACD", "parameters": [ { - "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "X:BTC-USD", + "description": "The ticker symbol for which to get MACD data.", + "example": "AAPL", "in": "path", - "name": "cryptoTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -7513,17 +8327,47 @@ } }, { - "description": "The window size used to calculate the relative strength index (RSI). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 14, + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "example": true, "in": "query", - "name": "window", + "name": "adjusted", "schema": { - "default": 14, + "default": true, + "type": "boolean" + } + }, + { + "description": "The short window size used to calculate MACD data.", + "example": 12, + "in": "query", + "name": "short_window", + "schema": { + "default": 12, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "description": "The long window size used to calculate MACD data.", + "example": 26, + "in": "query", + "name": "long_window", + "schema": { + "default": 26, + "type": "integer" + } + }, + { + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -7609,16 +8453,24 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { + "histogram": 38.3801666667, + "signal": 106.9811666667, "timestamp": 1517562000016, - "value": 140.139 + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 } ] }, @@ -7713,6 +8565,22 @@ "values": { "items": { "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, "timestamp": { "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", "format": "int64", @@ -7738,7 +8606,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "RSIResults" + "name": "MACDResults" } }, "status": { @@ -7750,40 +8618,39 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,52.040915721136884\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,44.813590401722564\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,44.813590401722564\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,45.22751170711286\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,45.22751170711286\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,37.361825384231004\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,37.361825384231004\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,50.74235333598462\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,50.74235333598462\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,39.159457782344376\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,-5.413804946923619,-3.8291158739479005,-1.5846890729757188\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,-4.63165683097526,-3.098305244715017,-1.5333515862602427\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,-4.581291216131007,-2.7149673481499565,-1.86632386798105\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,-3.6311474313744156,-1.1648824074663984,-2.4662650239080173\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,-2.533545758578896,0.9308104167079131,-3.464356175286809\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,-4.771497049659786,-3.432943605703971,-1.3385534439558149\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,-4.349569413677017,-2.2483863811546936,-2.1011830325223233\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,-3.9559234852549707,-1.7230906230241128,-2.232832862230858\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,-3.2635802145105117,-0.548316151489394,-2.7152640630211176\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,-3.070742345502225,0.13049986426588545,-3.2012422097681106\n", "schema": { "type": "string" } } }, - "description": "Relative strength index data for each period." + "description": "Moving Average Convergence/Divergence (MACD) data for each period." } }, - "summary": "Relative Strength Index (RSI)", + "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "crpyto:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/rsi/{fxTicker}": { + "/v1/indicators/rsi/{cryptoTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "ForexRSI", + "operationId": "CryptoRSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "C:EUR-USD", + "example": "X:BTC-USD", "in": "path", - "name": "fxTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -7821,17 +8688,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, - { - "description": "The window size used to calculate the relative strength index (RSI).", + "description": "The window size used to calculate the relative strength index (RSI). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", "example": 14, "in": "query", "name": "window", @@ -7927,11 +8784,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8068,7 +8925,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,65.97230488287764\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,79.3273623194404\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,79.32736231944038\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,74.64770184023104\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,64.43214811875563\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,64.43214811875563\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,81.95981214984681\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,81.95981214984683\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,74.64770184023104\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,74.98028072374902\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,52.040915721136884\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,44.813590401722564\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,44.813590401722564\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,45.22751170711286\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,45.22751170711286\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,37.361825384231004\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,37.361825384231004\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,50.74235333598462\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,50.74235333598462\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,39.159457782344376\n", "schema": { "type": "string" } @@ -8079,29 +8936,29 @@ }, "summary": "Relative Strength Index (RSI)", "tags": [ - "fx:aggregates" + "crpyto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Crypto data", + "name": "crypto" } }, "x-polygon-ignore": true }, - "/v1/indicators/rsi/{optionsTicker}": { + "/v1/indicators/rsi/{fxTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "OptionsRSI", + "operationId": "ForexRSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "O:SPY241220P00720000", + "example": "C:EUR-USD", "in": "path", - "name": "optionsTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -8245,11 +9102,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8386,40 +9243,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,30.837887188419387\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,15.546598157051605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,88.61520575036505\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,65.97230488287764\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,79.3273623194404\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,79.32736231944038\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,74.64770184023104\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,64.43214811875563\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,64.43214811875563\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,81.95981214984681\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,81.95981214984683\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,74.64770184023104\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,74.98028072374902\n", "schema": { "type": "string" } } }, - "description": "Relative Strength Index (RSI) data for each period." + "description": "Relative strength index data for each period." } }, "summary": "Relative Strength Index (RSI)", "tags": [ - "options:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/rsi/{stockTicker}": { + "/v1/indicators/rsi/{optionsTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "RSI", + "operationId": "OptionsRSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "AAPL", + "example": "O:SPY241220P00720000", "in": "path", - "name": "stockTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -8457,7 +9314,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -8563,11 +9420,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8704,39 +9561,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,23.065352237561996\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,29.877761913419718\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,29.58201330468151\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,30.233508748331047\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,19.857312489527956\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,32.18008680069761\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,28.71109953239781\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,31.140902927103383\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,32.21491128713248\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,35.950871523070575\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,30.837887188419387\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,15.546598157051605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,88.61520575036505\n", "schema": { "type": "string" } } }, - "description": "Relative strength Index data for each period." + "description": "Relative Strength Index (RSI) data for each period." } }, "summary": "Relative Strength Index (RSI)", "tags": [ - "stocks:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Options data", + "name": "options" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/sma/{cryptoTicker}": { + "/v1/indicators/rsi/{stockTicker}": { "get": { - "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "CryptoSMA", + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "RSI", "parameters": [ { - "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "X:BTC-USD", + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "AAPL", "in": "path", - "name": "cryptoTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -8774,17 +9632,27 @@ } }, { - "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 50, + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the relative strength index (RSI).", + "example": 14, "in": "query", "name": "window", "schema": { - "default": 50, + "default": 14, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", "example": "close", "in": "query", "name": "series_type", @@ -8870,33 +9738,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "aggregates": [ - { - "c": 75.0875, - "h": 75.15, - "l": 73.7975, - "n": 1, - "o": 74.06, - "t": 1577941200000, - "v": 135647456, - "vw": 74.6099 - }, - { - "c": 74.3575, - "h": 75.145, - "l": 74.125, - "n": 1, - "o": 74.2875, - "t": 1578027600000, - "v": 146535512, - "vw": 74.7026 - } - ], - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9021,7 +9867,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "SMAResults" + "name": "RSIResults" } }, "status": { @@ -9033,40 +9879,39 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,23.065352237561996\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,29.877761913419718\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,29.58201330468151\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,30.233508748331047\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,19.857312489527956\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,32.18008680069761\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,28.71109953239781\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,31.140902927103383\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,32.21491128713248\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,35.950871523070575\n", "schema": { "type": "string" } } }, - "description": "Simple Moving Average (SMA) data for each period." + "description": "Relative strength Index data for each period." } }, - "summary": "Simple Moving Average (SMA)", + "summary": "Relative Strength Index (RSI)", "tags": [ - "crpyto:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/sma/{fxTicker}": { + "/v1/indicators/sma/{cryptoTicker}": { "get": { "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "ForexSMA", + "operationId": "CryptoSMA", "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "C:EUR-USD", + "example": "X:BTC-USD", "in": "path", - "name": "fxTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -9103,16 +9948,6 @@ "type": "string" } }, - { - "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, { "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", "example": 50, @@ -9210,7 +10045,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -9236,7 +10071,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9373,7 +10208,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", "schema": { "type": "string" } @@ -9384,29 +10219,29 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "fx:aggregates" + "crpyto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Crypto data", + "name": "crypto" } }, "x-polygon-ignore": true }, - "/v1/indicators/sma/{optionsTicker}": { + "/v1/indicators/sma/{fxTicker}": { "get": { "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "OptionsSMA", + "operationId": "ForexSMA", "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "O:SPY241220P00720000", + "example": "C:EUR-USD", "in": "path", - "name": "optionsTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -9550,7 +10385,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -9576,7 +10411,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9713,7 +10548,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.0121999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,284.61099999999965\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,282.50919999999974\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,281.80859999999973\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,281.1079999999998\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.4949999999996\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,285.6801999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,285.31159999999966\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,283.9103999999997\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,283.2097999999997\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", "schema": { "type": "string" } @@ -9724,29 +10559,29 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "options:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/sma/{stockTicker}": { + "/v1/indicators/sma/{optionsTicker}": { "get": { "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "SMA", + "operationId": "OptionsSMA", "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "AAPL", + "example": "O:SPY241220P00720000", "in": "path", - "name": "stockTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -9890,7 +10725,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -9916,7 +10751,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -10053,7 +10888,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,164.19240000000005\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,164.40360000000007\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,164.42680000000007\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,164.33300000000006\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,164.13680000000005\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,164.32100000000005\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,164.28180000000003\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,163.97960000000006\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.73900000000006\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.59020000000007\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.0121999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,284.61099999999965\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,282.50919999999974\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,281.80859999999973\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,281.1079999999998\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.4949999999996\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,285.6801999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,285.31159999999966\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,283.9103999999997\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,283.2097999999997\n", "schema": { "type": "string" } @@ -10064,170 +10899,162 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "stocks:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Options data", + "name": "options" } - } + }, + "x-polygon-ignore": true }, - "/v1/last/crypto/{from}/{to}": { + "/v1/indicators/sma/{stockTicker}": { "get": { - "description": "Get the last trade tick for a cryptocurrency pair.", - "operationId": "LastTradeCrypto", + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "SMA", "parameters": [ { - "description": "The \"from\" symbol of the pair.", - "example": "BTC", + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "AAPL", "in": "path", - "name": "from", + "name": "stockTicker", "required": true, "schema": { "type": "string" - } + }, + "x-polygon-go-id": "Ticker" }, { - "description": "The \"to\" symbol of the pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", "schema": { "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "last": { - "conditions": [ - 1 - ], - "exchange": 4, - "price": 16835.42, - "size": 0.006909, - "timestamp": 1605560885027 - }, - "request_id": "d2d779df015fe2b7fbb8e58366610ef7", - "status": "success", - "symbol": "BTC-USD" - }, - "schema": { - "properties": { - "last": { - "properties": { - "conditions": { - "description": "A list of condition codes.", - "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", - "format": "int32", - "type": "integer" - }, - "type": "array", - "x-polygon-go-type": { - "name": "Int32Array" - } - }, - "exchange": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.", - "type": "integer" - }, - "price": { - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", - "format": "double", - "type": "number" - }, - "size": { - "description": "The size of a trade (also known as volume).", - "format": "double", - "type": "number" - }, - "timestamp": { - "description": "The Unix millisecond timestamp.", - "type": "integer", - "x-polygon-go-type": { - "name": "IMilliseconds", - "path": "github.com/polygon-io/ptime" - } - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastTradeCrypto" - } - }, - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" - } - }, - "type": "object" - } - }, - "text/csv": { - "example": "conditions,exchange,price,size,timestamp\n1,4,16835.42,0.006909,1605560885027\n", - "schema": { - "type": "string" - } - } }, - "description": "The last tick for this currency pair." + "x-polygon-filter-field": { + "range": true + } }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Last Trade for a Crypto Pair", - "tags": [ - "crypto:last:trade" - ], - "x-polygon-entitlement-data-type": { - "description": "Trade data", - "name": "trades" - }, - "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" - } - } - }, - "/v1/last_quote/currencies/{from}/{to}": { - "get": { - "description": "Get the last quote tick for a forex currency pair.", - "operationId": "LastQuoteCurrencies", - "parameters": [ { - "description": "The \"from\" symbol of the pair.", - "example": "AUD", - "in": "path", - "name": "from", - "required": true, + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], "type": "string" } }, { - "description": "The \"to\" symbol of the pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", "schema": { "type": "string" } @@ -10238,133 +11065,481 @@ "content": { "application/json": { "example": { - "last": { - "ask": 0.73124, - "bid": 0.73122, - "exchange": 48, - "timestamp": 1605557756000 - }, - "request_id": "a73a29dbcab4613eeaf48583d3baacf0", - "status": "success", - "symbol": "AUD/USD" - }, - "schema": { - "properties": { - "last": { - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "exchange": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" + "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 }, - "timestamp": { - "description": "The Unix millisecond timestamp.", - "type": "integer", - "x-polygon-go-type": { - "name": "IMilliseconds", - "path": "github.com/polygon-io/ptime" - } + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastQuoteCurrencies" + ], + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, "request_id": { "description": "A request id assigned by the server.", "type": "string" }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, "status": { "description": "The status of this request's response.", "type": "string" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" } }, "type": "object" } }, "text/csv": { - "example": "ask,bid,exchange,timestamp\n0.73124,0.73122,48,1605557756000\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,164.19240000000005\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,164.40360000000007\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,164.42680000000007\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,164.33300000000006\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,164.13680000000005\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,164.32100000000005\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,164.28180000000003\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,163.97960000000006\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.73900000000006\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.59020000000007\n", "schema": { "type": "string" } } }, - "description": "The last quote tick for this currency pair." - }, - "default": { - "description": "Unexpected error" + "description": "Simple Moving Average (SMA) data for each period." } }, - "summary": "Last Quote for a Currency Pair", + "summary": "Simple Moving Average (SMA)", "tags": [ - "fx:last:quote" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { - "description": "NBBO data", - "name": "nbbo" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Stocks data", + "name": "stocks" } } }, - "/v1/marketstatus/now": { + "/v1/last/crypto/{from}/{to}": { "get": { - "description": "Get the current trading status of the exchanges and overall financial markets.\n", + "description": "Get the last trade tick for a cryptocurrency pair.", + "operationId": "LastTradeCrypto", + "parameters": [ + { + "description": "The \"from\" symbol of the pair.", + "example": "BTC", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "content": { "application/json": { "example": { - "afterHours": true, - "currencies": { - "crypto": "open", - "fx": "open" - }, - "earlyHours": false, - "exchanges": { - "nasdaq": "extended-hours", - "nyse": "extended-hours", - "otc": "closed" + "last": { + "conditions": [ + 1 + ], + "exchange": 4, + "price": 16835.42, + "size": 0.006909, + "timestamp": 1605560885027 }, - "market": "extended-hours", - "serverTime": "2020-11-10T22:37:37.000Z" + "request_id": "d2d779df015fe2b7fbb8e58366610ef7", + "status": "success", + "symbol": "BTC-USD" }, "schema": { "properties": { - "afterHours": { - "description": "Whether or not the market is in post-market hours.", - "type": "boolean" - }, - "currencies": { + "last": { "properties": { - "crypto": { - "description": "The status of the crypto market.", - "type": "string" - }, - "fx": { - "description": "The status of the forex market.", - "type": "string" - } - }, - "type": "object" - }, - "earlyHours": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } + }, + "exchange": { + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.", + "type": "integer" + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastTradeCrypto" + } + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "conditions,exchange,price,size,timestamp\n1,4,16835.42,0.006909,1605560885027\n", + "schema": { + "type": "string" + } + } + }, + "description": "The last tick for this currency pair." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Last Trade for a Crypto Pair", + "tags": [ + "crypto:last:trade" + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + } + }, + "/v1/last_quote/currencies/{from}/{to}": { + "get": { + "description": "Get the last quote tick for a forex currency pair.", + "operationId": "LastQuoteCurrencies", + "parameters": [ + { + "description": "The \"from\" symbol of the pair.", + "example": "AUD", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "last": { + "ask": 0.73124, + "bid": 0.73122, + "exchange": 48, + "timestamp": 1605557756000 + }, + "request_id": "a73a29dbcab4613eeaf48583d3baacf0", + "status": "success", + "symbol": "AUD/USD" + }, + "schema": { + "properties": { + "last": { + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastQuoteCurrencies" + } + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "ask,bid,exchange,timestamp\n0.73124,0.73122,48,1605557756000\n", + "schema": { + "type": "string" + } + } + }, + "description": "The last quote tick for this currency pair." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Last Quote for a Currency Pair", + "tags": [ + "fx:last:quote" + ], + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + } + }, + "/v1/marketstatus/now": { + "get": { + "description": "Get the current trading status of the exchanges and overall financial markets.\n", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "afterHours": true, + "currencies": { + "crypto": "open", + "fx": "open" + }, + "earlyHours": false, + "exchanges": { + "nasdaq": "extended-hours", + "nyse": "extended-hours", + "otc": "closed" + }, + "market": "extended-hours", + "serverTime": "2020-11-10T22:37:37.000Z" + }, + "schema": { + "properties": { + "afterHours": { + "description": "Whether or not the market is in post-market hours.", + "type": "boolean" + }, + "currencies": { + "properties": { + "crypto": { + "description": "The status of the crypto market.", + "type": "string" + }, + "fx": { + "description": "The status of the forex market.", + "type": "string" + } + }, + "type": "object" + }, + "earlyHours": { "description": "Whether or not the market is in pre-market hours.", "type": "boolean" }, @@ -10664,6 +11839,14 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], "type": "object" }, "type": "array" @@ -10716,6 +11899,14 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], "type": "object" }, "type": "array" @@ -10725,6 +11916,15 @@ "type": "string" } }, + "required": [ + "symbol", + "isUTC", + "day", + "open", + "close", + "openTrades", + "closingTrades" + ], "type": "object" } }, @@ -10860,6 +12060,16 @@ "type": "number" } }, + "required": [ + "status", + "from", + "symbol", + "open", + "high", + "low", + "close", + "volume" + ], "type": "object" } }, @@ -10932,7 +12142,7 @@ "example": { "afterHours": 322.1, "close": 325.12, - "from": "2020-10-14T00:00:00.000Z", + "from": "2020-10-14", "high": 326.2, "low": 322.3, "open": 324.66, @@ -10995,6 +12205,16 @@ "type": "number" } }, + "required": [ + "status", + "from", + "symbol", + "open", + "high", + "low", + "close", + "volume" + ], "type": "object" } }, @@ -11946,12 +13166,370 @@ }, "x-polygon-draft": true }, - "/v2/aggs/grouped/locale/global/market/crypto/{date}": { + "/v1/summaries": { "get": { - "description": "Get the daily open, high, low, and close (OHLC) for the entire cryptocurrency markets.\n", + "description": "Get everything needed to visualize the tick-by-tick movement of a list of tickers.", + "operationId": "SnapshotSummary", "parameters": [ { - "description": "The beginning date for the aggregate window.", + "description": "Comma separated list of tickers. This API currently supports Stocks/Equities, Crypto, Options, and Forex. See the tickers endpoint for more details on supported tickers. If no tickers are passed then no results will be returned.", + "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD", + "in": "query", + "name": "ticker.any_of", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "abc123", + "results": [ + { + "branding": { + "icon_url": "https://api.polygon.io/icon.png", + "logo_url": "https://api.polygon.io/logo.svg" + }, + "market_status": "closed", + "name": "Norwegian Cruise Lines", + "price": 22.3, + "session": { + "change": -1.05, + "change_percent": -4.67, + "close": 21.4, + "early_trading_change": -0.39, + "early_trading_change_percent": -0.07, + "high": 22.49, + "late_trading_change": 1.2, + "late_trading_change_percent": 3.92, + "low": 21.35, + "open": 22.49, + "previous_close": 22.45, + "volume": 37 + }, + "ticker": "NCLH", + "type": "stock" + }, + { + "market_status": "closed", + "name": "NCLH $5 Call", + "options": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-10-14", + "shares_per_contract": 100, + "strike_price": 5, + "underlying_ticker": "NCLH" + }, + "price": 6.6, + "session": { + "change": -0.05, + "change_percent": -1.07, + "close": 6.65, + "early_trading_change": -0.01, + "early_trading_change_percent": -0.03, + "high": 7.01, + "late_trading_change": -0.4, + "late_trading_change_percent": -0.02, + "low": 5.42, + "open": 6.7, + "previous_close": 6.71, + "volume": 67 + }, + "ticker": "O:NCLH221014C00005000", + "type": "options" + }, + { + "market_status": "open", + "name": "Euro - United States Dollar", + "price": 0.97989, + "session": { + "change": -0.0001, + "change_percent": -0.67, + "close": 0.97989, + "high": 0.98999, + "low": 0.96689, + "open": 0.97889, + "previous_close": 0.98001 + }, + "ticker": "C:EURUSD", + "type": "forex" + }, + { + "branding": { + "icon_url": "https://api.polygon.io/icon.png", + "logo_url": "https://api.polygon.io/logo.svg" + }, + "market_status": "open", + "name": "Bitcoin - United States Dollar", + "price": 32154.68, + "session": { + "change": -201.23, + "change_percent": -0.77, + "close": 32154.68, + "high": 33124.28, + "low": 28182.88, + "open": 31129.32, + "previous_close": 33362.18 + }, + "ticker": "X:BTCUSD", + "type": "crypto" + }, + { + "error": "NOT_FOUND", + "message": "Ticker not found.", + "ticker": "APx" + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "branding": { + "properties": { + "icon_url": { + "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", + "type": "string" + }, + "logo_url": { + "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "Branding" + } + }, + "error": { + "description": "The error while looking for this ticker.", + "type": "string" + }, + "market_status": { + "description": "The market status for the market that trades this ticker.", + "type": "string" + }, + "message": { + "description": "The error message while looking for this ticker.", + "type": "string" + }, + "name": { + "description": "Name of ticker, forex, or crypto asset.", + "type": "string" + }, + "options": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See this link for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "format": "double", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract", + "format": "double", + "type": "number" + }, + "underlying_ticker": { + "description": "The ticker for the option contract.", + "type": "string" + } + }, + "required": [ + "contract_type", + "expiration_date", + "exercise_style", + "shares_per_contract", + "strike_price", + "underlying_ticker" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Options" + } + }, + "price": { + "description": "The most up to date ticker price.", + "format": "double", + "type": "number" + }, + "session": { + "properties": { + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price for the asset of the day.", + "format": "double", + "type": "number" + }, + "early_trading_change": { + "description": "Today\u2019s early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", + "format": "double", + "type": "number" + }, + "early_trading_change_percent": { + "description": "Today\u2019s early trading change as a percentage.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price for the asset of the day.", + "format": "double", + "type": "number" + }, + "late_trading_change": { + "description": "Today\u2019s late trading change amount, difference between price and today\u2019s close if in late trading hours, otherwise difference between last price during late trading and today\u2019s close.", + "format": "double", + "type": "number" + }, + "late_trading_change_percent": { + "description": "Today\u2019s late trading change as a percentage.", + "format": "double", + "type": "number" + }, + "low": { + "description": "The lowest price for the asset of the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the asset of the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price for the asset of previous trading day.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the asset of the day.", + "format": "double", + "type": "number" + } + }, + "required": [ + "change", + "change_percent", + "close", + "high", + "low", + "open", + "previous_close" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Session" + } + }, + "ticker": { + "description": "Ticker of asset queried.", + "type": "string" + }, + "type": { + "description": "The market for this ticker, of stock, crypto, forex, option.", + "enum": [ + "stocks", + "crypto", + "options", + "fx" + ], + "type": "string" + } + }, + "required": [ + "ticker", + "name", + "price", + "branding", + "market_status", + "type", + "session", + "options" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SummaryResult" + } + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "Snapshot Summary for ticker list" + } + }, + "summary": "Summaries", + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, + "/v2/aggs/grouped/locale/global/market/crypto/{date}": { + "get": { + "description": "Get the daily open, high, low, and close (OHLC) for the entire cryptocurrency markets.\n", + "parameters": [ + { + "description": "The beginning date for the aggregate window.", "example": "2020-10-14", "in": "path", "name": "date", @@ -12040,6 +13618,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -12090,6 +13675,15 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t", + "T" + ], "type": "object" }, "type": "array" @@ -12221,6 +13815,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -12271,6 +13872,15 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t", + "T" + ], "type": "object" }, "type": "array" @@ -12410,6 +14020,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -12464,6 +14081,15 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "t", + "v", + "T" + ], "type": "object" }, "type": "array" @@ -12558,6 +14184,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -12583,6 +14212,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -12633,6 +14269,15 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t", + "T" + ], "type": "object" }, "type": "array" @@ -12807,6 +14452,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -12832,6 +14480,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -12878,6 +14533,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -12973,6 +14636,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -12998,6 +14664,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -13048,6 +14721,15 @@ "type": "number" } }, + "required": [ + "T", + "v", + "o", + "c", + "h", + "l", + "t" + ], "type": "object" }, "type": "array" @@ -13212,6 +14894,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -13237,7 +14922,14 @@ "type": "string" } }, - "type": "object" + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], + "type": "object" }, { "properties": { @@ -13283,6 +14975,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -13378,6 +15078,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -13403,6 +15106,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -13449,6 +15159,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -13624,6 +15342,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -13649,6 +15370,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -13695,6 +15423,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -13789,6 +15525,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -13814,6 +15553,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -13860,6 +15606,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -14034,6 +15788,9 @@ "type": "string" } }, + "required": [ + "ticker" + ], "type": "object" }, { @@ -14059,6 +15816,13 @@ "type": "string" } }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], "type": "object" }, { @@ -14109,6 +15873,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t" + ], "type": "object" }, "type": "array" @@ -15124,6 +16896,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -15165,6 +16940,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastTrade": { @@ -15203,6 +16986,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, { @@ -15249,6 +17040,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -15285,6 +17084,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -15306,6 +17113,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastTrade", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" }, "type": "array" @@ -15425,6 +17242,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -15434,6 +17254,9 @@ "type": "string" } }, + "required": [ + "request_id" + ], "type": "object" }, { @@ -15474,6 +17297,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastTrade": { @@ -15512,6 +17343,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, { @@ -15558,6 +17397,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -15594,6 +17441,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -15615,6 +17470,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastTrade", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" } }, @@ -15746,6 +17611,10 @@ "type": "object" } }, + "required": [ + "p", + "x" + ], "type": "object" }, "type": "array" @@ -15768,6 +17637,10 @@ "type": "object" } }, + "required": [ + "p", + "x" + ], "type": "object" }, "type": "array" @@ -15786,6 +17659,15 @@ "type": "integer" } }, + "required": [ + "ticker", + "bids", + "asks", + "bidCount", + "askCount", + "spread", + "updated" + ], "type": "object" } }, @@ -15944,6 +17826,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastTrade": { @@ -15982,6 +17872,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, { @@ -16028,6 +17926,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -16064,6 +17970,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -16085,6 +17999,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastTrade", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" }, "type": "array" @@ -16200,6 +18124,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -16236,6 +18163,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "lastQuote": { @@ -16260,6 +18194,12 @@ "type": "integer" } }, + "required": [ + "a", + "b", + "t", + "x" + ], "type": "object" }, "min": { @@ -16291,6 +18231,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "prevDay": { @@ -16327,6 +18274,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -16348,6 +18303,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastQuote", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" }, "type": "array" @@ -16462,6 +18427,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -16471,6 +18439,9 @@ "type": "string" } }, + "required": [ + "request_id" + ], "type": "object" }, { @@ -16506,6 +18477,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "lastQuote": { @@ -16530,6 +18508,12 @@ "type": "integer" } }, + "required": [ + "a", + "b", + "t", + "x" + ], "type": "object" }, "min": { @@ -16561,6 +18545,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "prevDay": { @@ -16597,6 +18588,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -16618,6 +18617,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastQuote", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" } }, @@ -16734,6 +18743,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -16770,6 +18782,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "lastQuote": { @@ -16794,6 +18813,12 @@ "type": "integer" } }, + "required": [ + "a", + "b", + "t", + "x" + ], "type": "object" }, "min": { @@ -16825,6 +18850,13 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v" + ], "type": "object" }, "prevDay": { @@ -16861,6 +18893,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -16882,6 +18922,16 @@ "type": "integer" } }, + "required": [ + "day", + "lastQuote", + "min", + "prevDay", + "ticker", + "todaysChange", + "todaysChangePerc", + "updated" + ], "type": "object" }, "type": "array" @@ -17027,6 +19077,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -17072,6 +19125,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastQuote": { @@ -17100,6 +19161,13 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "P", + "S", + "t" + ], "type": "object" }, "lastTrade": { @@ -17134,6 +19202,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, "min": { @@ -17178,6 +19254,15 @@ "type": "number" } }, + "required": [ + "av", + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -17218,6 +19303,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -17367,6 +19460,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -17376,6 +19472,9 @@ "type": "string" } }, + "required": [ + "request_id" + ], "type": "object" }, { @@ -17420,6 +19519,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastQuote": { @@ -17448,6 +19555,13 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "P", + "S", + "t" + ], "type": "object" }, "lastTrade": { @@ -17482,6 +19596,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, "min": { @@ -17526,6 +19648,15 @@ "type": "number" } }, + "required": [ + "av", + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -17566,6 +19697,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -17725,6 +19864,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" }, { @@ -17770,6 +19912,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "lastQuote": { @@ -17798,6 +19948,13 @@ "type": "integer" } }, + "required": [ + "p", + "s", + "P", + "S", + "t" + ], "type": "object" }, "lastTrade": { @@ -17832,6 +19989,14 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "t", + "x" + ], "type": "object" }, "min": { @@ -17876,6 +20041,15 @@ "type": "number" } }, + "required": [ + "av", + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "prevDay": { @@ -17916,6 +20090,14 @@ "type": "number" } }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "vw" + ], "type": "object" }, "ticker": { @@ -18192,6 +20374,13 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "f", + "q" + ], "type": "object" }, { @@ -18257,6 +20446,17 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "x", + "P", + "S", + "X", + "z" + ], "type": "object" } ] @@ -18503,6 +20703,13 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "f", + "q" + ], "type": "object" }, { @@ -18546,6 +20753,16 @@ "type": "integer" } }, + "required": [ + "c", + "i", + "p", + "s", + "e", + "x", + "r", + "z" + ], "type": "object" } ] @@ -23000,13 +25217,13 @@ } }, { - "description": "Limit the number of results returned, default is 10 and max is 1000.", + "description": "Limit the number of results returned, default is 10 and max is 250.", "in": "query", "name": "limit", "schema": { "default": 10, "example": 10, - "maximum": 1000, + "maximum": 250, "minimum": 1, "type": "integer" } @@ -23059,10 +25276,10 @@ "greeks": { "delta": 1, "gamma": 0, - "implied_volatility": 5, "theta": 0.00229, "vega": 0 }, + "implied_volatility": 5, "last_quote": { "ask": 120.3, "ask_size": 4, @@ -23159,6 +25376,18 @@ "x-polygon-go-id": "VWAP" } }, + "required": [ + "last_updated", + "open", + "high", + "low", + "close", + "previous_close", + "volume", + "vwap", + "change_percent", + "change" + ], "type": "object", "x-polygon-go-type": { "name": "Day" @@ -23207,6 +25436,14 @@ "type": "string" } }, + "required": [ + "ticker", + "contract_type", + "exercise_style", + "expiration_date", + "shares_per_contract", + "strike_price" + ], "type": "object", "x-polygon-go-type": { "name": "Details" @@ -23292,7 +25529,16 @@ "type": "string" } }, - "type": "object", + "required": [ + "last_updated", + "timeframe", + "ask", + "ask_size", + "bid_size", + "bid", + "midpoint" + ], + "type": "object", "x-polygon-go-type": { "name": "LastQuote" } @@ -23337,12 +25583,28 @@ "type": "string" } }, + "required": [ + "last_updated", + "timeframe", + "ticker", + "price", + "change_to_break_even" + ], "type": "object", "x-polygon-go-type": { "name": "UnderlyingAsset" } } }, + "required": [ + "day", + "last_quote", + "underlying_asset", + "details", + "break_even_price", + "implied_volatility", + "open_interest" + ], "type": "object", "x-polygon-go-type": { "name": "OptionSnapshotResult" @@ -23355,6 +25617,10 @@ "type": "string" } }, + "required": [ + "status", + "request_id" + ], "type": "object" } } @@ -23387,7 +25653,7 @@ "x-polygon-paginate": { "limit": { "default": 10, - "max": 1000 + "max": 250 }, "sort": { "default": "ticker", @@ -23398,8 +25664,7 @@ ] } } - }, - "x-polygon-draft": true + } }, "/v3/snapshot/options/{underlyingAsset}/{optionContract}": { "get": { @@ -24719,12 +26984,12 @@ } }, { - "description": "Limit the number of results returned, default is 1 and max is 100.", + "description": "Limit the number of results returned, default is 10 and max is 100.", "in": "query", "name": "limit", "schema": { - "default": 1, - "example": 1, + "default": 10, + "example": 10, "maximum": 100, "minimum": 1, "type": "integer" @@ -24749,128 +27014,294 @@ "200": { "content": { "application/json": { - "count": 1, "description": "FIXME", "example": { - "cik": "0000789019", - "company_name": "MICROSOFT CORPORATION", - "end_date": "2020-12-31", - "financials": { - "balance_sheet": { - "assets": { - "label": "Assets", - "order": 100, - "unit": "USD", - "value": 304137000000, - "xpath": "//*[local-name()='Assets' and @id='F_000165']" - }, - "equity": { - "formula": "BS-Impute-07", - "label": "Equity", - "order": 1400, - "unit": "USD", - "value": 130236000000 - }, - "liabilities": { - "label": "Liabilities", - "order": 600, - "unit": "USD", - "value": 173901000000, - "xpath": "//*[local-name()='Liabilities' and @id='F_000193']" - } - }, - "cash_flow_statement": { - "exchange_gains_losses": { - "label": "Exchange Gains/Losses", - "order": 1000, - "unit": "USD", - "value": 14000000, - "xpath": "//*[local-name()='EffectOfExchangeRateOnCashAndCashEquivalents' and @id='F_000327']" - }, - "net_cash_flow": { - "formula": "CF-Impute-20", - "label": "Net Cash Flow", - "order": 1100, - "unit": "USD", - "value": -2773000000 - }, - "net_cash_flow_from_financing_activities": { - "label": "Net Cash Flow From Financing Activities", - "order": 700, - "unit": "USD", - "value": -13634000000, - "xpath": "//*[local-name()='NetCashProvidedByUsedInFinancingActivities' and @id='F_000295']" - } - }, - "comprehensive_income": { - "comprehensive_income_loss": { - "formula": "CI-Impute-04", - "label": "Comprehensive Income/Loss", - "order": 100, - "unit": "USD", - "value": 15720000000 - }, - "comprehensive_income_loss_attributable_to_parent": { - "label": "Comprehensive Income/Loss Attributable To Parent", - "order": 300, - "unit": "USD", - "value": 15720000000, - "xpath": "//*[local-name()='ComprehensiveIncomeNetOfTax' and @id='F_000135']" - }, - "other_comprehensive_income_loss": { - "formula": "CI-Impute-07", - "label": "Other Comprehensive Income/Loss", - "order": 400, - "unit": "USD", - "value": 15720000000 - } - }, - "income_statement": { - "basic_earnings_per_share": { - "label": "Basic Earnings Per Share", - "order": 4200, - "unit": "USD / shares", - "value": 2.05, - "xpath": "//*[local-name()='EarningsPerShareBasic' and @id='F_000099']" - }, - "cost_of_revenue": { - "label": "Cost Of Revenue", - "order": 300, - "unit": "USD", - "value": 14194000000, - "xpath": "//*[local-name()='CostOfGoodsAndServicesSold' and @id='F_000059']" - }, - "gross_profit": { - "label": "Gross Profit", - "order": 800, - "unit": "USD", - "value": 28882000000, - "xpath": "//*[local-name()='GrossProfit' and @id='F_000063']" - }, - "operating_expenses": { - "formula": "IS-Impute-22", - "label": "Operating Expenses", - "order": 1000, - "unit": "USD", - "value": 10985000000 + "count": 1, + "next_url": "https://api.polygon.io/vX/reference/financials?", + "request_id": "55eb92ed43b25568ab0cce159830ea34", + "results": [ + { + "cik": "0001650729", + "company_name": "SiteOne Landscape Supply, Inc.", + "end_date": "2022-04-03", + "filing_date": "2022-05-04", + "financials": { + "balance_sheet": { + "assets": { + "label": "Assets", + "order": 100, + "unit": "USD", + "value": 2407400000 + }, + "current_assets": { + "label": "Current Assets", + "order": 200, + "unit": "USD", + "value": 1385900000 + }, + "current_liabilities": { + "label": "Current Liabilities", + "order": 700, + "unit": "USD", + "value": 597500000 + }, + "equity": { + "label": "Equity", + "order": 1400, + "unit": "USD", + "value": 1099200000 + }, + "equity_attributable_to_noncontrolling_interest": { + "label": "Equity Attributable To Noncontrolling Interest", + "order": 1500, + "unit": "USD", + "value": 0 + }, + "equity_attributable_to_parent": { + "label": "Equity Attributable To Parent", + "order": 1600, + "unit": "USD", + "value": 1099200000 + }, + "liabilities": { + "label": "Liabilities", + "order": 600, + "unit": "USD", + "value": 1308200000 + }, + "liabilities_and_equity": { + "label": "Liabilities And Equity", + "order": 1900, + "unit": "USD", + "value": 2407400000 + }, + "noncurrent_assets": { + "label": "Noncurrent Assets", + "order": 300, + "unit": "USD", + "value": 1021500000 + }, + "noncurrent_liabilities": { + "label": "Noncurrent Liabilities", + "order": 800, + "unit": "USD", + "value": 710700000 + } + }, + "cash_flow_statement": { + "exchange_gains_losses": { + "label": "Exchange Gains/Losses", + "order": 1000, + "unit": "USD", + "value": 100000 + }, + "net_cash_flow": { + "label": "Net Cash Flow", + "order": 1100, + "unit": "USD", + "value": -8600000 + }, + "net_cash_flow_continuing": { + "label": "Net Cash Flow, Continuing", + "order": 1200, + "unit": "USD", + "value": -8700000 + }, + "net_cash_flow_from_financing_activities": { + "label": "Net Cash Flow From Financing Activities", + "order": 700, + "unit": "USD", + "value": 150600000 + }, + "net_cash_flow_from_financing_activities_continuing": { + "label": "Net Cash Flow From Financing Activities, Continuing", + "order": 800, + "unit": "USD", + "value": 150600000 + }, + "net_cash_flow_from_investing_activities": { + "label": "Net Cash Flow From Investing Activities", + "order": 400, + "unit": "USD", + "value": -41000000 + }, + "net_cash_flow_from_investing_activities_continuing": { + "label": "Net Cash Flow From Investing Activities, Continuing", + "order": 500, + "unit": "USD", + "value": -41000000 + }, + "net_cash_flow_from_operating_activities": { + "label": "Net Cash Flow From Operating Activities", + "order": 100, + "unit": "USD", + "value": -118300000 + }, + "net_cash_flow_from_operating_activities_continuing": { + "label": "Net Cash Flow From Operating Activities, Continuing", + "order": 200, + "unit": "USD", + "value": -118300000 + } + }, + "comprehensive_income": { + "comprehensive_income_loss": { + "label": "Comprehensive Income/Loss", + "order": 100, + "unit": "USD", + "value": 40500000 + }, + "comprehensive_income_loss_attributable_to_noncontrolling_interest": { + "label": "Comprehensive Income/Loss Attributable To Noncontrolling Interest", + "order": 200, + "unit": "USD", + "value": 0 + }, + "comprehensive_income_loss_attributable_to_parent": { + "label": "Comprehensive Income/Loss Attributable To Parent", + "order": 300, + "unit": "USD", + "value": 40500000 + }, + "other_comprehensive_income_loss": { + "label": "Other Comprehensive Income/Loss", + "order": 400, + "unit": "USD", + "value": 40500000 + }, + "other_comprehensive_income_loss_attributable_to_parent": { + "label": "Other Comprehensive Income/Loss Attributable To Parent", + "order": 600, + "unit": "USD", + "value": 8200000 + } + }, + "income_statement": { + "basic_earnings_per_share": { + "label": "Basic Earnings Per Share", + "order": 4200, + "unit": "USD / shares", + "value": 0.72 + }, + "benefits_costs_expenses": { + "label": "Benefits Costs and Expenses", + "order": 200, + "unit": "USD", + "value": 768400000 + }, + "cost_of_revenue": { + "label": "Cost Of Revenue", + "order": 300, + "unit": "USD", + "value": 536100000 + }, + "costs_and_expenses": { + "label": "Costs And Expenses", + "order": 600, + "unit": "USD", + "value": 768400000 + }, + "diluted_earnings_per_share": { + "label": "Diluted Earnings Per Share", + "order": 4300, + "unit": "USD / shares", + "value": 0.7 + }, + "gross_profit": { + "label": "Gross Profit", + "order": 800, + "unit": "USD", + "value": 269200000 + }, + "income_loss_from_continuing_operations_after_tax": { + "label": "Income/Loss From Continuing Operations After Tax", + "order": 1400, + "unit": "USD", + "value": 32300000 + }, + "income_loss_from_continuing_operations_before_tax": { + "label": "Income/Loss From Continuing Operations Before Tax", + "order": 1500, + "unit": "USD", + "value": 36900000 + }, + "income_tax_expense_benefit": { + "label": "Income Tax Expense/Benefit", + "order": 2200, + "unit": "USD", + "value": 4600000 + }, + "interest_expense_operating": { + "label": "Interest Expense, Operating", + "order": 2700, + "unit": "USD", + "value": 4300000 + }, + "net_income_loss": { + "label": "Net Income/Loss", + "order": 3200, + "unit": "USD", + "value": 32300000 + }, + "net_income_loss_attributable_to_noncontrolling_interest": { + "label": "Net Income/Loss Attributable To Noncontrolling Interest", + "order": 3300, + "unit": "USD", + "value": 0 + }, + "net_income_loss_attributable_to_parent": { + "label": "Net Income/Loss Attributable To Parent", + "order": 3500, + "unit": "USD", + "value": 32300000 + }, + "net_income_loss_available_to_common_stockholders_basic": { + "label": "Net Income/Loss Available To Common Stockholders, Basic", + "order": 3700, + "unit": "USD", + "value": 32300000 + }, + "operating_expenses": { + "label": "Operating Expenses", + "order": 1000, + "unit": "USD", + "value": 228000000 + }, + "operating_income_loss": { + "label": "Operating Income/Loss", + "order": 1100, + "unit": "USD", + "value": 41200000 + }, + "participating_securities_distributed_and_undistributed_earnings_loss_basic": { + "label": "Participating Securities, Distributed And Undistributed Earnings/Loss, Basic", + "order": 3800, + "unit": "USD", + "value": 0 + }, + "preferred_stock_dividends_and_other_adjustments": { + "label": "Preferred Stock Dividends And Other Adjustments", + "order": 3900, + "unit": "USD", + "value": 0 + }, + "revenues": { + "label": "Revenues", + "order": 100, + "unit": "USD", + "value": 805300000 + } + } }, - "revenues": { - "label": "Revenues", - "order": 100, - "unit": "USD", - "value": 43076000000, - "xpath": "//*[local-name()='RevenueFromContractWithCustomerExcludingAssessedTax' and @id='F_000047']" - } + "fiscal_period": "Q1", + "fiscal_year": "2022", + "source_filing_file_url": "https://api.polygon.io/v1/reference/sec/filings/0001650729-22-000010/files/site-20220403_htm.xml", + "source_filing_url": "https://api.polygon.io/v1/reference/sec/filings/0001650729-22-000010", + "start_date": "2022-01-03" } - }, - "fiscal_period": "Q2", - "fiscal_year": "2021", - "source_filing_file_url": "https:/api.polygon.io/v1/reference/sec/filings/0001564590-21-002316/files/0001564590-21-002316:12:msft-10q_20201231_htm.xml", - "source_filing_url": "https://api.polygon.io/v1/reference/sec/filings/0001564590-21-002316", - "start_date": "2020-10-01" + ], + "status": "OK" }, - "next_url": "https:/api.polygon.io/vX/reference/financials?", - "request_id": "28173f20a0751f3479afd9e2cc9246ea", "schema": { "properties": { "count": { @@ -24888,6 +27319,9 @@ "results": { "items": { "properties": { + "acceptance_datetime": { + "description": "The datetime (EST timezone) the filing was accepted by EDGAR in YYYYMMDDHHMMSS format." + }, "cik": { "description": "The CIK number for the company.", "type": "string" @@ -24958,46 +27392,605 @@ "type": "object" } }, - "type": "object" - }, - "fiscal_period": { - "description": "Fiscal period of the report according to the company (Q1, Q2, Q3, Q4, or FY).", - "type": "string" - }, - "fiscal_year": { - "description": "Fiscal year of the report according to the company.", - "type": "string" - }, - "source_filing_file_url": { - "description": "The URL of the specific XBRL instance document within the SEC filing that these financials were derived from." - }, - "source_filing_url": { - "description": "The URL of the SEC filing that these financials were derived from.", - "type": "string" + "type": "object" + }, + "fiscal_period": { + "description": "Fiscal period of the report according to the company (Q1, Q2, Q3, Q4, or FY).", + "type": "string" + }, + "fiscal_year": { + "description": "Fiscal year of the report according to the company.", + "type": "string" + }, + "source_filing_file_url": { + "description": "The URL of the specific XBRL instance document within the SEC filing that these financials were derived from." + }, + "source_filing_url": { + "description": "The URL of the SEC filing that these financials were derived from.", + "type": "string" + }, + "start_date": { + "description": "The start date of the period that these financials cover in YYYYMMDD format.", + "type": "string" + } + }, + "required": [ + "reporting_period", + "cik", + "company_name", + "financials", + "fiscal_period", + "fiscal_year", + "filing_type", + "source_filing_url", + "source_filing_file_url" + ], + "type": "object", + "x-polygon-go-type": { + "name": "ResolvedFinancials", + "path": "github.com/polygon-io/go-app-api-financials/extract" + } + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status", + "request_id", + "count", + "results" + ], + "type": "object" + } + } + }, + "description": "FIXME" + } + }, + "summary": "Stock Financials vX", + "tags": [ + "reference:stocks" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-experimental": {}, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 100 + }, + "sort": { + "default": "period_of_report_date", + "enum": [ + "filing_date", + "period_of_report_date" + ] + } + } + } + }, + "/vX/reference/tickers/{id}/events": { + "get": { + "description": "Get a timeline of events for the entity associated with the given ticker, CUSIP, or Composite FIGI.", + "operationId": "GetEvents", + "parameters": [ + { + "description": "Identifier of an asset. This can currently be a Ticker, CUSIP, or Composite FIGI.\nWhen given a ticker, we return events for the entity currently represented by that ticker.\nTo find events for entities previously associated with a ticker, find the relevant identifier using the \n[Ticker Details Endpoint](https://polygon.io/docs/stocks/get_v3_reference_tickers__ticker)", + "example": "META", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "A comma-separated list of the types of event to include. Currently ticker_change is the only supported event_type.\nLeave blank to return all supported event_types.", + "in": "query", + "name": "types", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "results": { + "events": [ + { + "date": "2022-06-09", + "ticker_change": { + "ticker": "META" + }, + "type": "ticker_change" + }, + { + "date": "2012-05-18", + "ticker_change": { + "ticker": "FB" + }, + "type": "ticker_change" + } + ], + "name": "Meta Platforms, Inc. Class A Common Stock" + }, + "status": "OK" + }, + "schema": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "events": { + "items": { + "oneOf": [ + { + "properties": { + "date": { + "description": "The date the event took place", + "format": "date", + "type": "string" + }, + "event_type": { + "description": "The type of historical event for the asset", + "type": "string" + }, + "ticker_change": { + "properties": { + "ticker": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "event_type", + "date" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "EventsResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Ticker Events." + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "summary": "Ticker Events", + "tags": [ + "reference:tickers:get" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-experimental": {} + } + }, + "/vX/snapshot/options/{underlyingAsset}/{optionContract}": { + "get": { + "description": "Get the snapshot of an option contract for a stock equity.", + "operationId": "OptionContract", + "parameters": [ + { + "description": "The underlying ticker symbol of the option contract.", + "example": "AAPL", + "in": "path", + "name": "underlyingAsset", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The option contract identifier.", + "example": "O:AAPL230616C00150000", + "in": "path", + "name": "optionContract", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "d9ff18dac69f55c218f69e4753706acd", + "results": { + "break_even_price": 171.075, + "day": { + "change": -1.05, + "change_percent": -4.67, + "close": 21.4, + "high": 22.49, + "last_updated": 1636520400000000000, + "low": 21.35, + "open": 22.49, + "previous_close": 22.45, + "volume": 37, + "vwap": 21.6741 + }, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2023-06-16", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:AAPL230616C00150000" + }, + "greeks": { + "delta": 0.5520187372272933, + "gamma": 0.00706756515659829, + "theta": -0.018532772783847958, + "vega": 0.7274811132998142 + }, + "implied_volatility": 0.3048997097864957, + "last_quote": { + "ask": 21.25, + "ask_size": 110, + "bid": 20.9, + "bid_size": 172, + "last_updated": 1636573458756383500, + "midpoint": 21.075, + "timeframe": "REAL-TIME" + }, + "open_interest": 8921, + "underlying_asset": { + "change_to_break_even": 23.123999999999995, + "last_updated": 1636573459862384600, + "price": 147.951, + "ticker": "AAPL", + "timeframe": "REAL-TIME" + } + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "properties": { + "break_even_price": { + "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "format": "double", + "type": "number" + }, + "day": { + "description": "The most recent daily bar for this contract.", + "properties": { + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price for the contract of the day.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "low": { + "description": "The lowest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the contract of the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price for the contract of previous trading day.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the contract of the day.", + "format": "double", + "type": "number" + }, + "vwap": { + "description": "The trading volume weighted average price for the contract of the day.", + "format": "double", + "type": "number", + "x-polygon-go-id": "VWAP" + } + }, + "required": [ + "last_updated", + "open", + "high", + "low", + "close", + "previous_close", + "volume", + "vwap", + "change_percent", + "change" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Day" + } + }, + "details": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See this link for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" + } + }, + "required": [ + "ticker", + "contract_type", + "exercise_style", + "expiration_date", + "shares_per_contract", + "strike_price" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Details" + } + }, + "greeks": { + "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "properties": { + "delta": { + "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "gamma": { + "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "theta": { + "description": "The change in the option's price per day.", + "format": "double", + "type": "number" + }, + "vega": { + "description": "The change in the option's price per 1% increment in volatility.", + "format": "double", + "type": "number" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "Greeks" + } + }, + "implied_volatility": { + "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", + "format": "double", + "type": "number" + }, + "last_quote": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "midpoint": { + "description": "The average of the bid and ask price.", + "format": "double", + "type": "number" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "required": [ + "last_updated", + "timeframe", + "ask", + "ask_size", + "bid_size", + "bid", + "midpoint" + ], + "type": "object", + "x-polygon-go-type": { + "name": "LastQuote" + } + }, + "open_interest": { + "description": "The quantity of this contract held at the end of the last trading day.", + "format": "double", + "type": "number" + }, + "underlying_asset": { + "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", + "properties": { + "change_to_break_even": { + "description": "The change in price for the contract to break even.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol for the contract's underlying asset.", + "type": "string" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } }, - "start_date": { - "description": "The start date of the period that these financials cover in YYYYMMDD format.", - "type": "string" + "required": [ + "last_updated", + "timeframe", + "ticker", + "price", + "change_to_break_even" + ], + "type": "object", + "x-polygon-go-type": { + "name": "UnderlyingAsset" } - }, - "required": [ - "reporting_period", - "cik", - "company_name", - "financials", - "fiscal_period", - "fiscal_year", - "filing_type", - "source_filing_url", - "source_filing_file_url" - ], - "type": "object", - "x-polygon-go-type": { - "name": "ResolvedFinancials", - "path": "github.com/polygon-io/go-app-api-financials/extract" } }, - "type": "array" + "required": [ + "day", + "last_quote", + "underlying_asset", + "details", + "break_even_price", + "implied_volatility", + "open_interest" + ], + "type": "object", + "x-polygon-go-type": { + "name": "OptionSnapshotResult" + } }, "status": { "description": "The status of this request's response.", @@ -25006,168 +27999,45 @@ }, "required": [ "status", - "request_id", - "count", - "results" + "request_id" ], "type": "object" - }, - "status": "OK" + } + }, + "text/csv": { + "schema": { + "example": "break_even_price,day_close,day_high,day_last_updated,day_low,day_open,day_previous_close,day_volume,day_vwap,day_change,day_change_percent,details_contract_type,details_exercise_style,details_expiration_date,details_shares_per_contract,details_strike_price,details_ticker,greeks_delta,greeks_gamma,greeks_theta,greeks_vega,implied_volatility,last_quote_ask,last_quote_ask_size,last_quote_bid,last_quote_bid_size,last_quote_last_updated,last_quote_midpoint,last_quote_timeframe,open_interest,underlying_asset_change_to_break_even,underlying_asset_last_updated,underlying_asset_price,underlying_asset_ticker,underlying_asset_timeframe\n0,171.075,21.4,22.49,1636520400000000000,21.35,22.49,22.45,37,21.6741,-1.05,-4.67,call,american,2023-06-16,100,150,O:AAPL230616C00150000,0.5520187372272933,0.00706756515659829,-0.018532772783847958,0.7274811132998142,0.3048997097864957,21.25,110,20.9,172,1636573458756383500,21.075,REAL-TIME,8921,23.123999999999995,1636573459862384600,147.951,AAPL,REAL-TIME\n", + "type": "string" + } } }, - "description": "FIXME" + "description": "Snapshot of the option contract." } }, - "summary": "Stock Financials vX", + "summary": "Option Contract", "tags": [ - "reference:stocks" + "options:snapshot" ], - "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" - }, - "x-polygon-experimental": {}, - "x-polygon-paginate": { - "limit": { - "default": 1, - "max": 100 - }, - "sort": { - "default": "period_of_report_date", - "enum": [ - "filing_date", - "period_of_report_date" - ] - } - } - } - }, - "/vX/reference/tickers/{id}/events": { - "get": { - "description": "Get a timeline of events for the entity associated with the given ticker, CUSIP, or Composite FIGI.", - "operationId": "GetEvents", - "parameters": [ + "x-polygon-entitlement-allowed-timeframes": [ { - "description": "Identifier of an asset. This can currently be a Ticker, CUSIP, or Composite FIGI.\nWhen given a ticker, we return events for the entity currently represented by that ticker.\nTo find events for entities previously associated with a ticker, find the relevant identifier using the \n[Ticker Details Endpoint](https://polygon.io/docs/stocks/get_v3_reference_tickers__ticker)", - "example": "META", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } + "description": "Real Time Data", + "name": "realtime" }, { - "description": "A comma-separated list of the types of event to include. Currently ticker_change is the only supported event_type.\nLeave blank to return all supported event_types.", - "in": "query", - "name": "types", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", - "results": { - "events": [ - { - "date": "2022-06-09", - "ticker_change": { - "ticker": "META" - }, - "type": "ticker_change" - }, - { - "date": "2012-05-18", - "ticker_change": { - "ticker": "FB" - }, - "type": "ticker_change" - } - ], - "name": "Meta Platforms, Inc. Class A Common Stock" - }, - "status": "OK" - }, - "schema": { - "properties": { - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - }, - "results": { - "properties": { - "events": { - "items": { - "oneOf": [ - { - "properties": { - "date": { - "description": "The date the event took place", - "format": "date", - "type": "string" - }, - "event_type": { - "description": "The type of historical event for the asset", - "type": "string" - }, - "ticker_change": { - "properties": { - "ticker": { - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "event_type", - "date" - ], - "type": "object" - } - ] - }, - "type": "array" - }, - "name": { - "type": "string" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "EventsResults" - } - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Ticker Events." - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" + "description": "15 minute delayed data", + "name": "delayed" } - }, - "summary": "Ticker Events", - "tags": [ - "reference:tickers:get" ], "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" + "description": "Aggregate data", + "name": "aggregates" }, - "x-polygon-experimental": {} - } + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + }, + "x-polygon-draft": true } }, "security": [ @@ -25263,10 +28133,17 @@ "crypto": { "market": [ { + "launchpad": "shared", "paths": [ "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}" ] }, + { + "launchpad": "exclusive", + "paths": [ + "/v1/summaries" + ] + }, { "paths": [ "/v2/aggs/grouped/locale/global/market/crypto/{date}" @@ -25347,10 +28224,17 @@ "fx": { "market": [ { + "launchpad": "shared", "paths": [ "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}" ] }, + { + "launchpad": "exclusive", + "paths": [ + "/v1/summaries" + ] + }, { "paths": [ "/v2/aggs/grouped/locale/global/market/fx/{date}" @@ -25430,10 +28314,17 @@ "options": { "market": [ { + "launchpad": "shared", "paths": [ "/v2/aggs/ticker/{optionsTicker}/range/{multiplier}/{timespan}/{from}/{to}" ] }, + { + "launchpad": "exclusive", + "paths": [ + "/v1/summaries" + ] + }, { "paths": [ "/v1/open-close/{optionsTicker}/{date}" @@ -25537,10 +28428,17 @@ "stocks": { "market": [ { + "launchpad": "shared", "paths": [ "/v2/aggs/ticker/{stocksTicker}/range/{multiplier}/{timespan}/{from}/{to}" ] }, + { + "launchpad": "exclusive", + "paths": [ + "/v1/summaries" + ] + }, { "paths": [ "/v2/aggs/grouped/locale/us/market/stocks/{date}" diff --git a/polygon/rest/vX.py b/polygon/rest/vX.py index 36af52d2..a7c13a2f 100644 --- a/polygon/rest/vX.py +++ b/polygon/rest/vX.py @@ -54,7 +54,7 @@ def list_stock_financials( :param period_of_report_date_gte: period_of_report_date greater than or equal to. :param timeframe: Query by timeframe. :param include_sources: Whether or not to include the xpath and formula attributes for each financial data point. - :param limit: Limit the number of results returned per-page, default is 1 and max is 100. + :param limit: Limit the number of results returned per-page, default is 10 and max is 100. :param sort: Sort field used for ordering. :param order: Order results based on the sort field. :param params: Any additional query params From 72b1a9e9d38272daa32c5a281c9515b92adb8658 Mon Sep 17 00:00:00 2001 From: Vera Harless <53271741+morningvera@users.noreply.github.com> Date: Mon, 30 Jan 2023 10:39:01 -0500 Subject: [PATCH 207/448] implement list aggs (#369) --- polygon/rest/aggs.py | 47 ++++++++++++++++++- .../range/1/day/2005-04-02/2005-04-04.json | 31 ++++++++++++ test_rest/test_aggs.py | 28 +++++++++++ 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 test_rest/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-02/2005-04-04.json diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 4c92a990..71d05d18 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -1,5 +1,5 @@ from .base import BaseClient -from typing import Optional, Any, Dict, List, Union +from typing import Optional, Any, Dict, List, Union, Iterator from .models import Agg, GroupedDailyAgg, DailyOpenCloseAgg, PreviousCloseAgg, Sort from urllib3 import HTTPResponse from datetime import datetime, date @@ -8,6 +8,51 @@ class AggsClient(BaseClient): + def list_aggs( + self, + ticker: str, + multiplier: int, + timespan: str, + # "from" is a keyword in python https://www.w3schools.com/python/python_ref_keywords.asp + from_: Union[str, int, datetime, date], + to: Union[str, int, datetime, date], + adjusted: Optional[bool] = None, + sort: Optional[Union[str, Sort]] = None, + limit: Optional[int] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[Iterator[Agg], HTTPResponse]: + """ + List aggregate bars for a ticker over a given date range in custom time window sizes. + + :param ticker: The ticker symbol. + :param multiplier: The size of the timespan multiplier. + :param timespan: The size of the time window. + :param from_: The start of the aggregate time window as YYYY-MM-DD, a date, Unix MS Timestamp, or a datetime. + :param to: The end of the aggregate time window as YYYY-MM-DD, a date, Unix MS Timestamp, or a datetime. + :param adjusted: Whether or not the results are adjusted for splits. By default, results are adjusted. Set this to false to get results that are NOT adjusted for splits. + :param sort: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window. + :param limit: Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000. Read more about how limit is used to calculate aggregate results in our article on Aggregate Data API Improvements. + :param params: Any additional query params + :param raw: Return raw object instead of results object + :return: Iterator of aggregates + """ + if isinstance(from_, datetime): + from_ = int(from_.timestamp() * self.time_mult("millis")) + + if isinstance(to, datetime): + to = int(to.timestamp() * self.time_mult("millis")) + url = f"/v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_}/{to}" + + return self._paginate( + path=url, + params=self._get_params(self.list_aggs, locals()), + raw=raw, + deserializer=Agg.from_dict, + options=options, + ) + def get_aggs( self, ticker: str, diff --git a/test_rest/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-02/2005-04-04.json b/test_rest/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-02/2005-04-04.json new file mode 100644 index 00000000..82c09f8b --- /dev/null +++ b/test_rest/mocks/v2/aggs/ticker/AAPL/range/1/day/2005-04-02/2005-04-04.json @@ -0,0 +1,31 @@ +{ + "ticker": "AAPL", + "queryCount": 2, + "resultsCount": 2, + "adjusted": true, + "results": [ + { + "v": 642646396.0, + "vw": 1.469, + "o": 1.5032, + "c": 1.4604, + "h": 1.5064, + "l": 1.4489, + "t": 1112331600000, + "n": 82132 + }, + { + "v": 578172308.0, + "vw": 1.4589, + "o": 1.4639, + "c": 1.4675, + "h": 1.4754, + "l": 1.4343, + "t": 1112587200000, + "n": 65543 + } + ], + "status": "OK", + "request_id": "12afda77aab3b1936c5fb6ef4241ae42", + "count": 2 +} \ No newline at end of file diff --git a/test_rest/test_aggs.py b/test_rest/test_aggs.py index 08706c53..a589fe33 100644 --- a/test_rest/test_aggs.py +++ b/test_rest/test_aggs.py @@ -8,6 +8,34 @@ class AggsTest(BaseTest): + def test_list_aggs(self): + aggs = [ + a for a in self.c.list_aggs("AAPL", 1, "day", "2005-04-02", "2005-04-04") + ] + expected = [ + Agg( + open=1.5032, + high=1.5064, + low=1.4489, + close=1.4604, + volume=642646396.0, + vwap=1.469, + timestamp=1112331600000, + transactions=82132, + ), + Agg( + open=1.4639, + high=1.4754, + low=1.4343, + close=1.4675, + volume=578172308.0, + vwap=1.4589, + timestamp=1112587200000, + transactions=65543, + ), + ] + self.assertEqual(aggs, expected) + def test_get_aggs(self): aggs = self.c.get_aggs("AAPL", 1, "day", "2005-04-01", "2005-04-04") expected = [ From e1ae81486bcdd6b74729fa116ad264a96cf4230a Mon Sep 17 00:00:00 2001 From: Anthony Johnson <114414459+antdjohns@users.noreply.github.com> Date: Wed, 1 Feb 2023 06:37:47 -0800 Subject: [PATCH 208/448] added ticker_suffix to TickerDetails model class (#371) --- polygon/rest/models/tickers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 448bfd11..595c3a97 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -85,6 +85,7 @@ class TickerDetails: delisted_utc: Optional[str] = None description: Optional[str] = None ticker_root: Optional[str] = None + ticker_suffix: Optional[str] = None homepage_url: Optional[str] = None list_date: Optional[str] = None locale: Optional[str] = None @@ -119,6 +120,7 @@ def from_dict(d): delisted_utc=d.get("delisted_utc", None), description=d.get("description", None), ticker_root=d.get("ticker_root", None), + ticker_suffix=d.get("ticker_suffix", None), homepage_url=d.get("homepage_url", None), list_date=d.get("list_date", None), locale=d.get("locale", None), From 4d8ab1c45da67a036e1460b1a25cb5158598a846 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 13 Feb 2023 07:55:04 -0800 Subject: [PATCH 209/448] Add stocks demo scripts (#377) * added demo scripts --- examples/rest/stocks-aggregates_bars.py | 27 ++++++ examples/rest/stocks-aggregates_bars_extra.py | 78 ++++++++++++++++++ examples/rest/stocks-conditions.py | 13 +++ examples/rest/stocks-daily_open_close.py | 16 ++++ examples/rest/stocks-dividends.py | 13 +++ examples/rest/stocks-exchanges.py | 27 ++++++ examples/rest/stocks-grouped_daily_bars.py | 20 +++++ examples/rest/stocks-last_quote.py | 14 ++++ examples/rest/stocks-last_trade.py | 14 ++++ examples/rest/stocks-market_holidays.py | 22 +++++ examples/rest/stocks-market_status.py | 11 +++ examples/rest/stocks-previous_close.py | 14 ++++ examples/rest/stocks-quotes.py | 21 +++++ examples/rest/stocks-snapshots_all.py | 49 +++++++++++ .../rest/stocks-snapshots_gainers_losers.py | 43 ++++++++++ examples/rest/stocks-snapshots_ticker.py | 11 +++ examples/rest/stocks-stock_financials.py | 13 +++ examples/rest/stocks-stock_splits.py | 13 +++ .../rest/stocks-technical_indicators_ema.py | 11 +++ .../rest/stocks-technical_indicators_macd.py | 11 +++ .../rest/stocks-technical_indicators_rsi.py | 11 +++ .../rest/stocks-technical_indicators_sma.py | 11 +++ examples/rest/stocks-ticker_details.py | 11 +++ examples/rest/stocks-ticker_events.py | 11 +++ examples/rest/stocks-ticker_news.py | 28 +++++++ examples/rest/stocks-ticker_types.py | 11 +++ examples/rest/stocks-tickers.py | 13 +++ examples/rest/stocks-trades.py | 21 +++++ examples/rest/stocks-trades_extra.py | 30 +++++++ examples/websocket/stocks-ws.py | 30 +++++++ examples/websocket/stocks-ws_extra.py | 82 +++++++++++++++++++ 31 files changed, 700 insertions(+) create mode 100644 examples/rest/stocks-aggregates_bars.py create mode 100644 examples/rest/stocks-aggregates_bars_extra.py create mode 100644 examples/rest/stocks-conditions.py create mode 100644 examples/rest/stocks-daily_open_close.py create mode 100644 examples/rest/stocks-dividends.py create mode 100644 examples/rest/stocks-exchanges.py create mode 100644 examples/rest/stocks-grouped_daily_bars.py create mode 100644 examples/rest/stocks-last_quote.py create mode 100644 examples/rest/stocks-last_trade.py create mode 100644 examples/rest/stocks-market_holidays.py create mode 100644 examples/rest/stocks-market_status.py create mode 100644 examples/rest/stocks-previous_close.py create mode 100644 examples/rest/stocks-quotes.py create mode 100644 examples/rest/stocks-snapshots_all.py create mode 100644 examples/rest/stocks-snapshots_gainers_losers.py create mode 100644 examples/rest/stocks-snapshots_ticker.py create mode 100644 examples/rest/stocks-stock_financials.py create mode 100644 examples/rest/stocks-stock_splits.py create mode 100644 examples/rest/stocks-technical_indicators_ema.py create mode 100644 examples/rest/stocks-technical_indicators_macd.py create mode 100644 examples/rest/stocks-technical_indicators_rsi.py create mode 100644 examples/rest/stocks-technical_indicators_sma.py create mode 100644 examples/rest/stocks-ticker_details.py create mode 100644 examples/rest/stocks-ticker_events.py create mode 100644 examples/rest/stocks-ticker_news.py create mode 100644 examples/rest/stocks-ticker_types.py create mode 100644 examples/rest/stocks-tickers.py create mode 100644 examples/rest/stocks-trades.py create mode 100644 examples/rest/stocks-trades_extra.py create mode 100644 examples/websocket/stocks-ws.py create mode 100644 examples/websocket/stocks-ws_extra.py diff --git a/examples/rest/stocks-aggregates_bars.py b/examples/rest/stocks-aggregates_bars.py new file mode 100644 index 00000000..9fb2625b --- /dev/null +++ b/examples/rest/stocks-aggregates_bars.py @@ -0,0 +1,27 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs + +# API key injected below for easy use. If not provided, the script will attempt +# to use the environment variable "POLYGON_API_KEY". +# +# setx POLYGON_API_KEY "" <- windows +# export POLYGON_API_KEY="" <- mac/linux +# +# Note: To persist the environment variable you need to add the above command +# to the shell startup script (e.g. .bashrc or .bash_profile. +# +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_aggs( + "AAPL", + 1, + "day", + "2023-01-30", + "2023-02-03", +) + +print(aggs) diff --git a/examples/rest/stocks-aggregates_bars_extra.py b/examples/rest/stocks-aggregates_bars_extra.py new file mode 100644 index 00000000..5936fdb3 --- /dev/null +++ b/examples/rest/stocks-aggregates_bars_extra.py @@ -0,0 +1,78 @@ +# This code retrieves stock market data for a specific stock using the +# Polygon REST API and writes it to a CSV file. It uses the "polygon" +# library to communicate with the API and the "csv" library to write +# the data to a CSV file. The script retrieves data for the stock "AAPL" +# for the dates "2023-01-30" to "2023-02-03" in 1 hour intervals. The +# resulting data includes the open, high, low, close, volume, vwap, +# timestamp, transactions, and otc values for each hour. The output is +# then printed to the console. +from polygon import RESTClient +from polygon.rest.models import ( + Agg, +) +import csv +import datetime +import io + +# docs +# https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_aggs( + "AAPL", + 1, + "hour", + "2023-01-30", + "2023-02-03", +) + +print(aggs) + +# headers +headers = [ + "timestamp", + "open", + "high", + "low", + "close", + "volume", + "vwap", + "transactions", + "otc", +] + +# creating the csv string +csv_string = io.StringIO() +writer = csv.DictWriter(csv_string, fieldnames=headers) + +# writing headers +writer.writeheader() + +# writing data +for agg in aggs: + + # verify this is an agg + if isinstance(agg, Agg): + + # verify this is an int + if isinstance(agg.timestamp, int): + + writer.writerow( + { + "timestamp": datetime.datetime.fromtimestamp(agg.timestamp / 1000), + "open": agg.open, + "high": agg.high, + "low": agg.low, + "close": agg.close, + "volume": agg.volume, + "vwap": agg.vwap, + "transactions": agg.transactions, + "otc": agg.otc, + } + ) + +# printing the csv string +print(csv_string.getvalue()) diff --git a/examples/rest/stocks-conditions.py b/examples/rest/stocks-conditions.py new file mode 100644 index 00000000..1be9b483 --- /dev/null +++ b/examples/rest/stocks-conditions.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_reference_conditions +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-conditions + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +conditions = [] +for c in client.list_conditions(limit=1000): + conditions.append(c) +print(conditions) diff --git a/examples/rest/stocks-daily_open_close.py b/examples/rest/stocks-daily_open_close.py new file mode 100644 index 00000000..65c96265 --- /dev/null +++ b/examples/rest/stocks-daily_open_close.py @@ -0,0 +1,16 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v1_open-close__stocksticker___date +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-daily-open-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# make request +request = client.get_daily_open_close_agg( + "AAPL", + "2023-02-07", +) + +print(request) diff --git a/examples/rest/stocks-dividends.py b/examples/rest/stocks-dividends.py new file mode 100644 index 00000000..75cd795c --- /dev/null +++ b/examples/rest/stocks-dividends.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_reference_dividends +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-dividends + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +dividends = [] +for d in client.list_dividends("MSFT", limit=1000): + dividends.append(d) +print(dividends) diff --git a/examples/rest/stocks-exchanges.py b/examples/rest/stocks-exchanges.py new file mode 100644 index 00000000..b65938e2 --- /dev/null +++ b/examples/rest/stocks-exchanges.py @@ -0,0 +1,27 @@ +from polygon import RESTClient +from polygon.rest.models import ( + Exchange, +) + +# docs +# https://polygon.io/docs/stocks/get_v3_reference_exchanges +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-exchanges + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +exchanges = client.get_exchanges() +print(exchanges) + +# loop over exchanges +for exchange in exchanges: + + # verify this is an exchange + if isinstance(exchange, Exchange): + + # print exchange info + print( + "{:<15}{} ({})".format( + exchange.asset_class, exchange.name, exchange.operating_mic + ) + ) diff --git a/examples/rest/stocks-grouped_daily_bars.py b/examples/rest/stocks-grouped_daily_bars.py new file mode 100644 index 00000000..8d9e92c5 --- /dev/null +++ b/examples/rest/stocks-grouped_daily_bars.py @@ -0,0 +1,20 @@ +from polygon import RESTClient +import pprint + +# docs +# https://polygon.io/docs/stocks/get_v2_aggs_grouped_locale_us_market_stocks__date +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-grouped-daily-aggs + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +grouped = client.get_grouped_daily_aggs( + "2023-02-07", +) + +# print(grouped) + +# pprint (short for "pretty-print") is a module that provides a more human- +# readable output format for data structures. +pp = pprint.PrettyPrinter(indent=2) +pp.pprint(grouped) diff --git a/examples/rest/stocks-last_quote.py b/examples/rest/stocks-last_quote.py new file mode 100644 index 00000000..15b83e55 --- /dev/null +++ b/examples/rest/stocks-last_quote.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v2_last_nbbo__stocksticker +# https://polygon-api-client.readthedocs.io/en/latest/Quotes.html#get-last-quote + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +quote = client.get_last_quote( + "AAPL", +) + +print(quote) diff --git a/examples/rest/stocks-last_trade.py b/examples/rest/stocks-last_trade.py new file mode 100644 index 00000000..42278ba0 --- /dev/null +++ b/examples/rest/stocks-last_trade.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v2_last_trade__stocksticker +# https://polygon-api-client.readthedocs.io/en/latest/Trades.html#get-last-trade + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +trade = client.get_last_trade( + "AAPL", +) + +print(trade) diff --git a/examples/rest/stocks-market_holidays.py b/examples/rest/stocks-market_holidays.py new file mode 100644 index 00000000..bd39bd67 --- /dev/null +++ b/examples/rest/stocks-market_holidays.py @@ -0,0 +1,22 @@ +from polygon import RESTClient +from polygon.rest.models import ( + MarketHoliday, +) + +# docs +# https://polygon.io/docs/stocks/get_v1_marketstatus_upcoming +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-holidays + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +holidays = client.get_market_holidays() +# print(holidays) + +# print date, name, and exchange +for holiday in holidays: + + # verify this is an exchange + if isinstance(holiday, MarketHoliday): + + print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/stocks-market_status.py b/examples/rest/stocks-market_status.py new file mode 100644 index 00000000..bd4362b3 --- /dev/null +++ b/examples/rest/stocks-market_status.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v1_marketstatus_now +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-status + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +result = client.get_market_status() +print(result) diff --git a/examples/rest/stocks-previous_close.py b/examples/rest/stocks-previous_close.py new file mode 100644 index 00000000..9785ab2e --- /dev/null +++ b/examples/rest/stocks-previous_close.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__prev +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-previous-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_previous_close_agg( + "AAPL", +) + +print(aggs) diff --git a/examples/rest/stocks-quotes.py b/examples/rest/stocks-quotes.py new file mode 100644 index 00000000..4d615dab --- /dev/null +++ b/examples/rest/stocks-quotes.py @@ -0,0 +1,21 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_quotes__stockticker +# https://polygon-api-client.readthedocs.io/en/latest/Quotes.html#list-quotes + +# NBBO (National Best Bid and Offer) is a term used in the financial industry +# to describe the best bid and offer prices for a particular stock or security +# being traded on all the available stock exchanges in the United States. It +# provides information on the highest price a buyer is willing to pay (best +# bid) and the lowest price a seller is willing to accept (best offer) for a +# particular security. This information is used by traders to make informed +# investment decisions and execute trades at the best available price. + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +quotes = [] +for t in client.list_quotes("IBIO", "2023-02-01", limit=50000): + quotes.append(t) +print(quotes) diff --git a/examples/rest/stocks-snapshots_all.py b/examples/rest/stocks-snapshots_all.py new file mode 100644 index 00000000..4f6e0157 --- /dev/null +++ b/examples/rest/stocks-snapshots_all.py @@ -0,0 +1,49 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerSnapshot, + Agg, +) + +# docs +# https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-all-snapshots + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# tickers we are interested in +tickers = ["TSLA", "AAPL", "MSFT", "META"] + +# snapshot = client.get_snapshot_all("stocks") # all tickers +snapshot = client.get_snapshot_all("stocks", tickers) + +# print raw values +print(snapshot) + +# crunch some numbers +for item in snapshot: + + # verify this is an TickerSnapshot + if isinstance(item, TickerSnapshot): + + # verify this is an Agg + if isinstance(item.prev_day, Agg): + + # verify this is a float + if isinstance(item.prev_day.open, float) and isinstance( + item.prev_day.close, float + ): + + percent_change = ( + (item.prev_day.close - item.prev_day.open) + / item.prev_day.open + * 100 + ) + print( + "{:<15}{:<15}{:<15}{:.2f} %".format( + item.ticker, + item.prev_day.open, + item.prev_day.close, + percent_change, + ) + ) diff --git a/examples/rest/stocks-snapshots_gainers_losers.py b/examples/rest/stocks-snapshots_gainers_losers.py new file mode 100644 index 00000000..b0194bfa --- /dev/null +++ b/examples/rest/stocks-snapshots_gainers_losers.py @@ -0,0 +1,43 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerSnapshot, +) + +# docs +# https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks__direction +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-gainers-losers-snapshot + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# get gainers +gainers = client.get_snapshot_direction("stocks", "gainers") +# print(gainers) + +# print ticker with % change +for gainer in gainers: + + # verify this is a TickerSnapshot + if isinstance(gainer, TickerSnapshot): + + # verify this is a float + if isinstance(gainer.todays_change_percent, float): + + print("{:<15}{:.2f} %".format(gainer.ticker, gainer.todays_change_percent)) + +print() + +# get losers +losers = client.get_snapshot_direction("stocks", "losers") +# print(losers) + +# print ticker with % change +for loser in losers: + + # verify this is a TickerSnapshot + if isinstance(loser, TickerSnapshot): + + # verify this is a float + if isinstance(loser.todays_change_percent, float): + + print("{:<15}{:.2f} %".format(loser.ticker, loser.todays_change_percent)) diff --git a/examples/rest/stocks-snapshots_ticker.py b/examples/rest/stocks-snapshots_ticker.py new file mode 100644 index 00000000..2b264338 --- /dev/null +++ b/examples/rest/stocks-snapshots_ticker.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks_tickers__stocksticker +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-ticker-snapshot + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ticker = client.get_snapshot_ticker("stocks", "AAPL") +print(ticker) diff --git a/examples/rest/stocks-stock_financials.py b/examples/rest/stocks-stock_financials.py new file mode 100644 index 00000000..dc356494 --- /dev/null +++ b/examples/rest/stocks-stock_financials.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_vx_reference_financials +# https://polygon-api-client.readthedocs.io/en/latest/vX.html#list-stock-financials + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +financials = [] +for f in client.vx.list_stock_financials("AAPL"): + financials.append(f) +print(financials) diff --git a/examples/rest/stocks-stock_splits.py b/examples/rest/stocks-stock_splits.py new file mode 100644 index 00000000..55980973 --- /dev/null +++ b/examples/rest/stocks-stock_splits.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_reference_splits +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-splits + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +splits = [] +for s in client.list_splits("TSLA", limit=1000): + splits.append(s) +print(splits) diff --git a/examples/rest/stocks-technical_indicators_ema.py b/examples/rest/stocks-technical_indicators_ema.py new file mode 100644 index 00000000..0b87d48d --- /dev/null +++ b/examples/rest/stocks-technical_indicators_ema.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v1_indicators_ema__stockticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ema = client.get_ema("AAPL") +print(ema) diff --git a/examples/rest/stocks-technical_indicators_macd.py b/examples/rest/stocks-technical_indicators_macd.py new file mode 100644 index 00000000..45221926 --- /dev/null +++ b/examples/rest/stocks-technical_indicators_macd.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v1_indicators_macd__stockticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +macd = client.get_macd("AAPL") +print(macd) diff --git a/examples/rest/stocks-technical_indicators_rsi.py b/examples/rest/stocks-technical_indicators_rsi.py new file mode 100644 index 00000000..4fd62d29 --- /dev/null +++ b/examples/rest/stocks-technical_indicators_rsi.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v1_indicators_rsi__stockticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +rsi = client.get_rsi("AAPL") +print(rsi) diff --git a/examples/rest/stocks-technical_indicators_sma.py b/examples/rest/stocks-technical_indicators_sma.py new file mode 100644 index 00000000..bfc0796f --- /dev/null +++ b/examples/rest/stocks-technical_indicators_sma.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v1_indicators_sma__stockticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +sma = client.get_sma("AAPL") +print(sma) diff --git a/examples/rest/stocks-ticker_details.py b/examples/rest/stocks-ticker_details.py new file mode 100644 index 00000000..5f81b4bc --- /dev/null +++ b/examples/rest/stocks-ticker_details.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_reference_tickers__ticker +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-ticker-details + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +details = client.get_ticker_details("AAPL") +print(details) diff --git a/examples/rest/stocks-ticker_events.py b/examples/rest/stocks-ticker_events.py new file mode 100644 index 00000000..09b13432 --- /dev/null +++ b/examples/rest/stocks-ticker_events.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_vx_reference_tickers__id__events +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/reference.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +events = client.get_ticker_events("META") +print(events) diff --git a/examples/rest/stocks-ticker_news.py b/examples/rest/stocks-ticker_news.py new file mode 100644 index 00000000..41e08653 --- /dev/null +++ b/examples/rest/stocks-ticker_news.py @@ -0,0 +1,28 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerNews, +) + +# docs +# https://polygon.io/docs/stocks/get_v2_reference_news +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-ticker-news + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +news = [] +for n in client.list_ticker_news("BBBY", order="desc", limit=1000): + news.append(n) + +# print(news) + +# print date + title +for index, item in enumerate(news): + + # verify this is an agg + if isinstance(item, TickerNews): + + print("{:<25}{:<15}".format(item.published_utc, item.title)) + + if index == 20: + break diff --git a/examples/rest/stocks-ticker_types.py b/examples/rest/stocks-ticker_types.py new file mode 100644 index 00000000..fa09338d --- /dev/null +++ b/examples/rest/stocks-ticker_types.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_reference_tickers_types +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-ticker-types + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +types = client.get_ticker_types() +print(types) diff --git a/examples/rest/stocks-tickers.py b/examples/rest/stocks-tickers.py new file mode 100644 index 00000000..bffd518e --- /dev/null +++ b/examples/rest/stocks-tickers.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_reference_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-tickers + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +tickers = [] +for t in client.list_tickers(limit=1000): + tickers.append(t) +print(tickers) diff --git a/examples/rest/stocks-trades.py b/examples/rest/stocks-trades.py new file mode 100644 index 00000000..8f2f147b --- /dev/null +++ b/examples/rest/stocks-trades.py @@ -0,0 +1,21 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v3_trades__stockticker +# https://polygon-api-client.readthedocs.io/en/latest/Trades.html#polygon.RESTClient.list_trades + +# Trade data refers to the tick records of individual transactions that have +# taken place in a financial market, such as the price, size, and time of +# each trade. It provides a high-frequency, granular view of market activity, +# and is used by traders, investors, and researchers to gain insights into +# market behavior and inform their investment decisions. + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +trades = [] +for t in client.list_trades("IBIO", "2023-02-01", limit=50000): + trades.append(t) + +# prints each trade that took place +print(trades) diff --git a/examples/rest/stocks-trades_extra.py b/examples/rest/stocks-trades_extra.py new file mode 100644 index 00000000..1015f22a --- /dev/null +++ b/examples/rest/stocks-trades_extra.py @@ -0,0 +1,30 @@ +# This code retrieves trade records and counts the amount of money that changes hands. +from polygon import RESTClient +from polygon.rest.models import ( + Trade, +) + +# docs +# https://polygon.io/docs/stocks/get_v3_trades__stockticker +# https://polygon-api-client.readthedocs.io/en/latest/Trades.html#polygon.RESTClient.list_trades + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# used to track money across trades +money = float(0) + +# loop through and count price * volume +for t in client.list_trades("DIS", "2023-02-07", limit=50000): + + # verify this is an Trade + if isinstance(t, Trade): + + # verify these are float + if isinstance(t.price, float) and isinstance(t.size, float): + + money += t.price * t.size + +# format the number so it's human readable +formatted_number = "{:,.2f}".format(money) +print("Roughly " + formatted_number + " changed hands for DIS on 2023-02-07.") diff --git a/examples/websocket/stocks-ws.py b/examples/websocket/stocks-ws.py new file mode 100644 index 00000000..98064ece --- /dev/null +++ b/examples/websocket/stocks-ws.py @@ -0,0 +1,30 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List + +client = WebSocketClient("N_4QqOFs3X_pCHeIJjW4pCETSOBerS4_") # api_key is used + +# docs +# https://polygon.io/docs/stocks/ws_stocks_am +# https://polygon-api-client.readthedocs.io/en/latest/WebSocket.html# + +# aggregates +# client.subscribe("AM.*") # aggregates (per minute) +# client.subscribe("A.*") # aggregates (per second) + +# trades +# client.subscribe("T.*") # all trades +# client.subscribe("T.TSLA", "T.UBER") # limited trades + +# quotes +# client.subscribe("Q.*") # all quotes +# client.subscribe("Q.TSLA", "Q.UBER") # limited quotes + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + +# print messages +client.run(handle_msg) diff --git a/examples/websocket/stocks-ws_extra.py b/examples/websocket/stocks-ws_extra.py new file mode 100644 index 00000000..59883e6c --- /dev/null +++ b/examples/websocket/stocks-ws_extra.py @@ -0,0 +1,82 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from typing import List +from typing import Dict +import time +import threading + + +# docs +# https://polygon.io/docs/stocks/ws_stocks_am +# https://polygon-api-client.readthedocs.io/en/latest/WebSocket.html# + +# This program connects to the Polygon WebSocket API, authenticates the +# connection, and subscribes to receive trades. Every 5 seconds, it counts +# the number of trades per symbol and stores the results in a map. The +# program then prints the map, which gives a readout of the top stocks +# traded in the past 5 seconds. + +# aggregates +# client.subscribe("AM.*") # aggregates (per minute) +# client.subscribe("A.*") # aggregates (per second) + +# trades +# client.subscribe("T.*") # all trades +# client.subscribe("T.TSLA", "T.UBER") # limited trades + +# quotes +# client.subscribe("Q.*") # all quotes +# client.subscribe("Q.TSLA", "Q.UBER") # limited quotes + + +def run_websocket_client(): + # client = WebSocketClient("XXXXXX") # hardcoded api_key is used + client = WebSocketClient() # POLYGON_API_KEY environment variable is used + client.subscribe("T.*") # all trades + client.run(handle_msg) + + +string_map: Dict[str, int] +string_map = {} # + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + # print(m) + + # verify this is a string + if isinstance(m, str): + + if m.symbol in string_map: + string_map[m.symbol] += 1 + else: + string_map[m.symbol] = 1 + + +# print messages +# client.run(handle_msg) + + +def top_function(): + sorted_string_map = sorted(string_map.items(), key=lambda x: x[1], reverse=True) + print("\033c", end="") # ANSI escape sequence to clear the screen + + for index, item in sorted_string_map[:10]: + print("{:<15}{:<15}".format(index, item)) + string_map.clear() # clear map for next loop + + +def run_function_periodically(): + while True: + top_function() + time.sleep(5) + + +thread1 = threading.Thread(target=run_function_periodically) +thread2 = threading.Thread(target=run_websocket_client) + +thread1.start() +thread2.start() + +thread1.join() +thread2.join() From 78359dd345b572802b60d5d044626e9a4f4873b0 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 20 Feb 2023 07:30:23 -0800 Subject: [PATCH 210/448] Updated getting started section (#385) Added link to blog that has the demo videos. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 49209d73..c707afb6 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,9 @@ pip install polygon-api-client Requires Python >= 3.8. ## Getting started -See the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) -section in our docs or view the [examples](./examples) directory for additional examples. + +To get started, please see the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) section in our docs, view the [examples](./examples) directory for code snippets, or view the [blog post with videos](https://polygon.io/blog/polygon-io-with-python-for-stock-market-data/) to learn more. + ## REST API Client Import the RESTClient. ```python From c23cf2d54c79035a24d4137ff18836f3ae6556dc Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 23 Feb 2023 12:50:43 -0800 Subject: [PATCH 211/448] Fix malformed query filter params (#389) --- polygon/rest/base.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 3507ed02..3885db18 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -141,14 +141,12 @@ def _get_params( elif isinstance(val, datetime): val = int(val.timestamp() * self.time_mult(datetime_res)) if val is not None: - if ( - argname.endswith("_lt") - or argname.endswith("_lte") - or argname.endswith("_gt") - or argname.endswith("_gte") - or argname.endswith("_any_of") - ): - argname = ".".join(argname.split("_", 1)) + for ext in ["lt", "lte", "gt", "gte", "any_of"]: + if argname.endswith(f"_{ext}"): + # lop off ext, then rebuild argname with ext, + # using ., and not _ (removesuffix would work) + # but that is python 3.9+ + argname = argname[: -len(f"_{ext}")] + f".{ext}" if argname.endswith("any_of"): val = ",".join(val) params[argname] = val From 0ed7defdf1b18961be8629ee92e8a43f7ee358da Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 23 Feb 2023 14:33:33 -0800 Subject: [PATCH 212/448] Added options demo scripts (#390) --- examples/rest/options-aggregates_bars.py | 27 ++++++++++++++++ examples/rest/options-conditions.py | 13 ++++++++ examples/rest/options-contract.py | 13 ++++++++ examples/rest/options-contracts.py | 13 ++++++++ examples/rest/options-daily_open_close.py | 16 ++++++++++ examples/rest/options-exchanges.py | 27 ++++++++++++++++ examples/rest/options-last_trade.py | 14 ++++++++ examples/rest/options-market_holidays.py | 22 +++++++++++++ examples/rest/options-market_status.py | 11 +++++++ examples/rest/options-previous_close.py | 14 ++++++++ examples/rest/options-quotes.py | 13 ++++++++ .../rest/options-snapshots_option_contract.py | 13 ++++++++ .../rest/options-snapshots_options_chain.py | 13 ++++++++ .../rest/options-technical_indicators_ema.py | 14 ++++++++ .../rest/options-technical_indicators_macd.py | 19 +++++++++++ .../rest/options-technical_indicators_rsi.py | 14 ++++++++ .../rest/options-technical_indicators_sma.py | 14 ++++++++ examples/rest/options-ticker_details.py | 11 +++++++ examples/rest/options-ticker_news.py | 26 +++++++++++++++ examples/rest/options-tickers.py | 13 ++++++++ examples/rest/options-trades.py | 15 +++++++++ examples/websocket/options-ws.py | 32 +++++++++++++++++++ 22 files changed, 367 insertions(+) create mode 100644 examples/rest/options-aggregates_bars.py create mode 100644 examples/rest/options-conditions.py create mode 100644 examples/rest/options-contract.py create mode 100644 examples/rest/options-contracts.py create mode 100644 examples/rest/options-daily_open_close.py create mode 100644 examples/rest/options-exchanges.py create mode 100644 examples/rest/options-last_trade.py create mode 100644 examples/rest/options-market_holidays.py create mode 100644 examples/rest/options-market_status.py create mode 100644 examples/rest/options-previous_close.py create mode 100644 examples/rest/options-quotes.py create mode 100644 examples/rest/options-snapshots_option_contract.py create mode 100644 examples/rest/options-snapshots_options_chain.py create mode 100644 examples/rest/options-technical_indicators_ema.py create mode 100644 examples/rest/options-technical_indicators_macd.py create mode 100644 examples/rest/options-technical_indicators_rsi.py create mode 100644 examples/rest/options-technical_indicators_sma.py create mode 100644 examples/rest/options-ticker_details.py create mode 100644 examples/rest/options-ticker_news.py create mode 100644 examples/rest/options-tickers.py create mode 100644 examples/rest/options-trades.py create mode 100644 examples/websocket/options-ws.py diff --git a/examples/rest/options-aggregates_bars.py b/examples/rest/options-aggregates_bars.py new file mode 100644 index 00000000..943fae88 --- /dev/null +++ b/examples/rest/options-aggregates_bars.py @@ -0,0 +1,27 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v2_aggs_ticker__optionsticker__range__multiplier___timespan___from___to +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs + +# API key injected below for easy use. If not provided, the script will attempt +# to use the environment variable "POLYGON_API_KEY". +# +# setx POLYGON_API_KEY "" <- windows +# export POLYGON_API_KEY="" <- mac/linux +# +# Note: To persist the environment variable you need to add the above command +# to the shell startup script (e.g. .bashrc or .bash_profile. +# +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_aggs( + "O:SPY251219C00650000", + 1, + "day", + "2023-01-30", + "2023-02-03", +) + +print(aggs) diff --git a/examples/rest/options-conditions.py b/examples/rest/options-conditions.py new file mode 100644 index 00000000..3d72e3e7 --- /dev/null +++ b/examples/rest/options-conditions.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_reference_conditions +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-conditions + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +conditions = [] +for c in client.list_conditions("options", limit=1000): + conditions.append(c) +print(conditions) diff --git a/examples/rest/options-contract.py b/examples/rest/options-contract.py new file mode 100644 index 00000000..f87c161e --- /dev/null +++ b/examples/rest/options-contract.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_reference_options_contracts__options_ticker +# https://polygon-api-client.readthedocs.io/en/latest/Contracts.html + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +contract = client.get_options_contract("O:EVRI240119C00002500") + +# print raw values +print(contract) diff --git a/examples/rest/options-contracts.py b/examples/rest/options-contracts.py new file mode 100644 index 00000000..34d7327b --- /dev/null +++ b/examples/rest/options-contracts.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_reference_options_contracts +# https://polygon-api-client.readthedocs.io/en/latest/Contracts.html#list-options-contracts + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +contracts = [] +for c in client.list_options_contracts("HCP"): + contracts.append(c) +print(contracts) diff --git a/examples/rest/options-daily_open_close.py b/examples/rest/options-daily_open_close.py new file mode 100644 index 00000000..54a700ce --- /dev/null +++ b/examples/rest/options-daily_open_close.py @@ -0,0 +1,16 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v1_open-close__optionsticker___date +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-daily-open-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# make request +request = client.get_daily_open_close_agg( + "O:SPY251219C00650000", + "2023-02-22", +) + +print(request) diff --git a/examples/rest/options-exchanges.py b/examples/rest/options-exchanges.py new file mode 100644 index 00000000..a1affada --- /dev/null +++ b/examples/rest/options-exchanges.py @@ -0,0 +1,27 @@ +from polygon import RESTClient +from polygon.rest.models import ( + Exchange, +) + +# docs +# https://polygon.io/docs/options/get_v3_reference_exchanges +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-exchanges + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +exchanges = client.get_exchanges("options") +print(exchanges) + +# loop over exchanges +for exchange in exchanges: + + # verify this is an exchange + if isinstance(exchange, Exchange): + + # print exchange info + print( + "{:<15}{} ({})".format( + exchange.asset_class, exchange.name, exchange.operating_mic + ) + ) diff --git a/examples/rest/options-last_trade.py b/examples/rest/options-last_trade.py new file mode 100644 index 00000000..bf3e7662 --- /dev/null +++ b/examples/rest/options-last_trade.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v2_last_trade__optionsticker +# https://polygon-api-client.readthedocs.io/en/latest/Trades.html#get-last-trade + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +trade = client.get_last_trade( + "O:TSLA210903C00700000", +) + +print(trade) diff --git a/examples/rest/options-market_holidays.py b/examples/rest/options-market_holidays.py new file mode 100644 index 00000000..d54b8758 --- /dev/null +++ b/examples/rest/options-market_holidays.py @@ -0,0 +1,22 @@ +from polygon import RESTClient +from polygon.rest.models import ( + MarketHoliday, +) + +# docs +# https://polygon.io/docs/options/get_v1_marketstatus_upcoming +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-holidays + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +holidays = client.get_market_holidays() +# print(holidays) + +# print date, name, and exchange +for holiday in holidays: + + # verify this is an exchange + if isinstance(holiday, MarketHoliday): + + print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/options-market_status.py b/examples/rest/options-market_status.py new file mode 100644 index 00000000..fb8e5ccd --- /dev/null +++ b/examples/rest/options-market_status.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v1_marketstatus_now +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-status + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +result = client.get_market_status() +print(result) diff --git a/examples/rest/options-previous_close.py b/examples/rest/options-previous_close.py new file mode 100644 index 00000000..f7b9d06b --- /dev/null +++ b/examples/rest/options-previous_close.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v2_aggs_ticker__optionsticker__prev +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-previous-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_previous_close_agg( + "O:SPY251219C00650000", +) + +print(aggs) diff --git a/examples/rest/options-quotes.py b/examples/rest/options-quotes.py new file mode 100644 index 00000000..71d2577a --- /dev/null +++ b/examples/rest/options-quotes.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_quotes__optionsticker +# https://polygon-api-client.readthedocs.io/en/latest/Quotes.html#list-quotes + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +quotes = [] +for t in client.list_quotes("O:SPY241220P00720000", limit=50000): + quotes.append(t) +print(quotes) diff --git a/examples/rest/options-snapshots_option_contract.py b/examples/rest/options-snapshots_option_contract.py new file mode 100644 index 00000000..280e3315 --- /dev/null +++ b/examples/rest/options-snapshots_option_contract.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_snapshot_options__underlyingasset___optioncontract +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +snapshot = client.get_snapshot_option("AAPL", "O:AAPL230616C00150000") + +# print raw values +print(snapshot) diff --git a/examples/rest/options-snapshots_options_chain.py b/examples/rest/options-snapshots_options_chain.py new file mode 100644 index 00000000..85a69d02 --- /dev/null +++ b/examples/rest/options-snapshots_options_chain.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_snapshot_options__underlyingasset +# ttps://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-all-snapshots + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +options_chain = [] +for o in client.list_snapshot_options_chain("HCP"): + options_chain.append(o) +print(options_chain) diff --git a/examples/rest/options-technical_indicators_ema.py b/examples/rest/options-technical_indicators_ema.py new file mode 100644 index 00000000..ff04ff76 --- /dev/null +++ b/examples/rest/options-technical_indicators_ema.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v1_indicators_ema__optionsticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ema = client.get_ema( + ticker="O:SPY241220P00720000", timespan="day", window=50, series_type="close" +) + +print(ema) diff --git a/examples/rest/options-technical_indicators_macd.py b/examples/rest/options-technical_indicators_macd.py new file mode 100644 index 00000000..e7961c8f --- /dev/null +++ b/examples/rest/options-technical_indicators_macd.py @@ -0,0 +1,19 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v1_indicators_macd__optionsticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +macd = client.get_macd( + ticker="O:SPY241220P00720000", + timespan="day", + short_window=12, + long_window=26, + signal_window=9, + series_type="close", +) + +print(macd) diff --git a/examples/rest/options-technical_indicators_rsi.py b/examples/rest/options-technical_indicators_rsi.py new file mode 100644 index 00000000..4bf9ebde --- /dev/null +++ b/examples/rest/options-technical_indicators_rsi.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v1_indicators_rsi__optionsticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +rsi = client.get_rsi( + ticker="O:SPY241220P00720000", timespan="day", window=14, series_type="close" +) + +print(rsi) diff --git a/examples/rest/options-technical_indicators_sma.py b/examples/rest/options-technical_indicators_sma.py new file mode 100644 index 00000000..ce6f3d0c --- /dev/null +++ b/examples/rest/options-technical_indicators_sma.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v1_indicators_sma__optionsticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +sma = client.get_sma( + ticker="O:SPY241220P00720000", timespan="day", window=50, series_type="close" +) + +print(sma) diff --git a/examples/rest/options-ticker_details.py b/examples/rest/options-ticker_details.py new file mode 100644 index 00000000..43d59156 --- /dev/null +++ b/examples/rest/options-ticker_details.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_reference_tickers__ticker +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-ticker-details + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +details = client.get_ticker_details("TSLA") +print(details) diff --git a/examples/rest/options-ticker_news.py b/examples/rest/options-ticker_news.py new file mode 100644 index 00000000..099ee264 --- /dev/null +++ b/examples/rest/options-ticker_news.py @@ -0,0 +1,26 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerNews, +) + +# docs +# https://polygon.io/docs/options/get_v2_reference_news +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-ticker-news + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +news = [] +for n in client.list_ticker_news("AAPL", order="desc", limit=1000): + news.append(n) + +# print date + title +for index, item in enumerate(news): + + # verify this is an agg + if isinstance(item, TickerNews): + + print("{:<25}{:<15}".format(item.published_utc, item.title)) + + if index == 20: + break diff --git a/examples/rest/options-tickers.py b/examples/rest/options-tickers.py new file mode 100644 index 00000000..d77ef641 --- /dev/null +++ b/examples/rest/options-tickers.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_reference_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-tickers + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +tickers = [] +for t in client.list_tickers(limit=1000): + tickers.append(t) +print(tickers) diff --git a/examples/rest/options-trades.py b/examples/rest/options-trades.py new file mode 100644 index 00000000..210362d5 --- /dev/null +++ b/examples/rest/options-trades.py @@ -0,0 +1,15 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/options/get_v3_trades__optionsticker +# https://polygon-api-client.readthedocs.io/en/latest/Trades.html#polygon.RESTClient.list_trades + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +trades = [] +for t in client.list_trades("O:TSLA210903C00700000", limit=50000): + trades.append(t) + +# prints each trade that took place +print(trades) diff --git a/examples/websocket/options-ws.py b/examples/websocket/options-ws.py new file mode 100644 index 00000000..22fd12b1 --- /dev/null +++ b/examples/websocket/options-ws.py @@ -0,0 +1,32 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, Market +from typing import List + +# docs +# https://polygon.io/docs/options/ws_getting-started +# https://polygon-api-client.readthedocs.io/en/latest/WebSocket.html + +# client = WebSocketClient("XXXXXX") # hardcoded api_key is used +client = WebSocketClient( + market=Market.Options +) # POLYGON_API_KEY environment variable is used + +# aggregates +# client.subscribe("AM.*") # aggregates (per minute) +client.subscribe("A.*") # aggregates (per second) + +# trades +# client.subscribe("T.*") # all trades +# client.subscribe("T.O:SPY241220P00720000", "T.O:SPY251219C00650000") # limited trades + +# quotes (1,000 option contracts per connection) +# client.subscribe("Q.O:SPY241220P00720000", "Q.O:SPY251219C00650000") # limited quotes + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + +# print messages +client.run(handle_msg) From 7567479650925d699f305382c257fcd33f2efff9 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 1 Mar 2023 07:30:16 -0800 Subject: [PATCH 213/448] Fix for failing dependabot PRs (#395) --- .github/workflows/lint.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 76bc9a45..f524111b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -23,7 +23,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - name: Setup Poetry - uses: abatilo/actions-poetry@v2.0.0 + uses: abatilo/actions-poetry@v2 - name: Install pypi deps run: poetry install - name: Style lint diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index baecc7a2..f87d2e29 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,7 +27,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - name: Setup Poetry - uses: abatilo/actions-poetry@v2.0.0 + uses: abatilo/actions-poetry@v2 - name: Install pypi deps run: poetry install - name: Unit tests From 8ffd476140f000a5eaceb667a5e57280bf447455 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Mar 2023 09:46:36 -0800 Subject: [PATCH 214/448] Bump orjson from 3.8.3 to 3.8.7 (#396) Bumps [orjson](https://github.com/ijl/orjson) from 3.8.3 to 3.8.7. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.8.3...3.8.7) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 724 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 363 insertions(+), 363 deletions(-) diff --git a/poetry.lock b/poetry.lock index 95f7e84b..c9d07737 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,5 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + [[package]] name = "alabaster" version = "0.7.12" @@ -5,6 +7,10 @@ description = "A configurable sidebar-enabled Sphinx theme" category = "dev" optional = false python-versions = "*" +files = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] [[package]] name = "attrs" @@ -13,6 +19,10 @@ description = "Classes Without Boilerplate" category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, +] [package.extras] dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] @@ -27,6 +37,10 @@ description = "Internationalization utilities" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, + {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, +] [package.dependencies] pytz = ">=2015.7" @@ -38,6 +52,20 @@ description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, + {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, + {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, + {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, + {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, + {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, + {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, + {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, + {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, + {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, + {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, + {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, +] [package.dependencies] click = ">=8.0.0" @@ -60,6 +88,10 @@ description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] [[package]] name = "charset-normalizer" @@ -68,6 +100,10 @@ description = "The Real First Universal Charset Detector. Open, modern and activ category = "dev" optional = false python-versions = ">=3.6.0" +files = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] [package.extras] unicode-backport = ["unicodedata2"] @@ -79,6 +115,10 @@ description = "Composable command line interface toolkit" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -90,6 +130,10 @@ description = "Cross-platform colored terminal text." category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "docutils" @@ -98,6 +142,10 @@ description = "Docutils -- Python Documentation Utilities" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] [[package]] name = "furl" @@ -106,6 +154,10 @@ description = "URL manipulation made simple." category = "dev" optional = false python-versions = "*" +files = [ + {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, + {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, +] [package.dependencies] orderedmultidict = ">=1.0.1" @@ -118,6 +170,10 @@ description = "Internationalized Domain Names in Applications (IDNA)" category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] [[package]] name = "imagesize" @@ -126,6 +182,10 @@ description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] [[package]] name = "importlib-metadata" @@ -134,6 +194,10 @@ description = "Read metadata from Python packages" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, + {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, +] [package.dependencies] zipp = ">=0.5" @@ -150,6 +214,10 @@ description = "Read resources from Python packages" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "importlib_resources-5.10.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, + {file = "importlib_resources-5.10.0.tar.gz", hash = "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668"}, +] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} @@ -165,6 +233,10 @@ description = "A very fast and expressive template engine." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -179,6 +251,10 @@ description = "An implementation of JSON Schema validation for Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.1-py3-none-any.whl", hash = "sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7"}, + {file = "jsonschema-4.17.1.tar.gz", hash = "sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3"}, +] [package.dependencies] attrs = ">=17.4.0" @@ -197,6 +273,48 @@ description = "Safely add untrusted strings to HTML/XML markup." category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] [[package]] name = "mypy" @@ -205,6 +323,38 @@ description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, + {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, + {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, + {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, + {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, + {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, + {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, + {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, + {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, + {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, + {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, + {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, + {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, + {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, + {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, + {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, + {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, + {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, + {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, + {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, + {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, + {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, + {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, + {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, +] [package.dependencies] mypy-extensions = ">=0.4.3" @@ -224,6 +374,10 @@ description = "Experimental type system extensions for programs checked with the category = "dev" optional = false python-versions = "*" +files = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] [[package]] name = "orderedmultidict" @@ -232,17 +386,67 @@ description = "Ordered Multivalue Dictionary" category = "dev" optional = false python-versions = "*" +files = [ + {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, + {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, +] [package.dependencies] six = ">=1.8.0" [[package]] name = "orjson" -version = "3.8.3" +version = "3.8.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "orjson-3.8.7-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:f98c82850b7b4b7e27785ca43706fa86c893cdb88d54576bbb9b0d9c1070e421"}, + {file = "orjson-3.8.7-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1dee503c6c1a0659c5b46f5f39d9ca9d3657b11ca8bb4af8506086df416887d9"}, + {file = "orjson-3.8.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4fa83831f42ce5c938f8cefc2e175fa1df6f661fdeaba3badf26d2b8cfcf73"}, + {file = "orjson-3.8.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e432c6c9c8b97ad825276d5795286f7cc9689f377a97e3b7ecf14918413303f"}, + {file = "orjson-3.8.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee519964a5a0efb9633f38b1129fd242807c5c57162844efeeaab1c8de080051"}, + {file = "orjson-3.8.7-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:109b539ce5bf60a121454d008fa67c3b67e5a3249e47d277012645922cf74bd0"}, + {file = "orjson-3.8.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ad4d441fbde4133af6fee37f67dbf23181b9c537ecc317346ec8c3b4c8ec7705"}, + {file = "orjson-3.8.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:89dc786419e1ce2588345f58dd6a434e6728bce66b94989644234bcdbe39b603"}, + {file = "orjson-3.8.7-cp310-none-win_amd64.whl", hash = "sha256:697abde7350fb8076d44bcb6b4ab3ce415ae2b5a9bb91efc460e5ab0d96bb5d3"}, + {file = "orjson-3.8.7-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:1c19f47b35b9966a3abadf341b18ee4a860431bf2b00fd8d58906d51cf78aa70"}, + {file = "orjson-3.8.7-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:3ffaabb380cd0ee187b4fc362516df6bf739808130b1339445c7d8878fca36e7"}, + {file = "orjson-3.8.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d88837002c5a8af970745b8e0ca1b0fdb06aafbe7f1279e110d338ea19f3d23"}, + {file = "orjson-3.8.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff60187d1b7e0bfab376b6002b08c560b7de06c87cf3a8ac639ecf58f84c5f3b"}, + {file = "orjson-3.8.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0110970aed35dec293f30ed1e09f8604afd5d15c5ef83de7f6c427619b3ba47b"}, + {file = "orjson-3.8.7-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:51b275475d4e36118b65ad56f9764056a09d985c5d72e64579bf8816f1356a5e"}, + {file = "orjson-3.8.7-cp311-none-win_amd64.whl", hash = "sha256:63144d27735f3b60f079f247ac9a289d80dfe49a7f03880dfa0c0ba64d6491d5"}, + {file = "orjson-3.8.7-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a16273d77db746bb1789a2bbfded81148a60743fd6f9d5185e02d92e3732fa18"}, + {file = "orjson-3.8.7-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:5bb32259ea22cc9dd47a6fdc4b8f9f1e2f798fcf56c7c1122a7df0f4c5d33bf3"}, + {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad02e9102d4ba67db30a136e631e32aeebd1dce26c9f5942a457b02df131c5d0"}, + {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dbcfcec2b7ac52deb7be3685b551addc28ee8fa454ef41f8b714df6ba0e32a27"}, + {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a0e5504a5fc86083cc210c6946e8d61e13fe9f1d7a7bf81b42f7050a49d4fb"}, + {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:7bd4fd37adb03b1f2a1012d43c9f95973a02164e131dfe3ff804d7e180af5653"}, + {file = "orjson-3.8.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:188ed9f9a781333ad802af54c55d5a48991e292239aef41bd663b6e314377eb8"}, + {file = "orjson-3.8.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cc52f58c688cb10afd810280e450f56fbcb27f52c053463e625c8335c95db0dc"}, + {file = "orjson-3.8.7-cp37-none-win_amd64.whl", hash = "sha256:403c8c84ac8a02c40613b0493b74d5256379e65196d39399edbf2ed3169cbeb5"}, + {file = "orjson-3.8.7-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:7d6ac5f8a2a17095cd927c4d52abbb38af45918e0d3abd60fb50cfd49d71ae24"}, + {file = "orjson-3.8.7-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0295a7bfd713fa89231fd0822c995c31fc2343c59a1d13aa1b8b6651335654f5"}, + {file = "orjson-3.8.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feb32aaaa34cf2f891eb793ad320d4bb6731328496ae59b6c9eb1b620c42b529"}, + {file = "orjson-3.8.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7a3ab1a473894e609b6f1d763838c6689ba2b97620c256a32c4d9f10595ac179"}, + {file = "orjson-3.8.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e8c430d82b532c5ab95634e034bbf6ca7432ffe175a3e63eadd493e00b3a555"}, + {file = "orjson-3.8.7-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:366cc75f7e09106f9dac95a675aef413367b284f25507d21e55bd7f45f445e80"}, + {file = "orjson-3.8.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:84d154d07e8b17d97e990d5d710b719a031738eb1687d8a05b9089f0564ff3e0"}, + {file = "orjson-3.8.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06180014afcfdc167ca984b312218aa62ce20093965c437c5f9166764cb65ef7"}, + {file = "orjson-3.8.7-cp38-none-win_amd64.whl", hash = "sha256:41244431ba13f2e6ef22b52c5cf0202d17954489f4a3c0505bd28d0e805c3546"}, + {file = "orjson-3.8.7-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:b20f29fa8371b8023f1791df035a2c3ccbd98baa429ac3114fc104768f7db6f8"}, + {file = "orjson-3.8.7-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:226bfc1da2f21ee74918cee2873ea9a0fec1a8830e533cb287d192d593e99d02"}, + {file = "orjson-3.8.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e75c11023ac29e29fd3e75038d0e8dd93f9ea24d7b9a5e871967a8921a88df24"}, + {file = "orjson-3.8.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:78604d3acfd7cd502f6381eea0c42281fe2b74755b334074ab3ebc0224100be1"}, + {file = "orjson-3.8.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7129a6847f0494aa1427167486ef6aea2e835ba05f6c627df522692ee228f65"}, + {file = "orjson-3.8.7-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1a1a8f4980059f48483782c608145b0f74538c266e01c183d9bcd9f8b71dbada"}, + {file = "orjson-3.8.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d60304172a33705ce4bd25a6261ab84bed2dab0b3d3b79672ea16c7648af4832"}, + {file = "orjson-3.8.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4f733062d84389c32c0492e5a4929056fac217034a94523debe0430bcc602cda"}, + {file = "orjson-3.8.7-cp39-none-win_amd64.whl", hash = "sha256:010e2970ec9e826c332819e0da4b14b29b19641da0f1a6af4cec91629ef9b988"}, + {file = "orjson-3.8.7.tar.gz", hash = "sha256:8460c8810652dba59c38c80d27c325b5092d189308d8d4f3e688dbd8d4f3b2dc"}, +] [[package]] name = "packaging" @@ -251,6 +455,10 @@ description = "Core utilities for Python packages" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] [package.dependencies] pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" @@ -262,6 +470,10 @@ description = "Utility library for gitignore style pattern matching of file path category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, + {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, +] [[package]] name = "pkgutil_resolve_name" @@ -270,6 +482,10 @@ description = "Resolve a name to an object." category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] [[package]] name = "platformdirs" @@ -278,6 +494,10 @@ description = "A small Python package for determining appropriate platform-speci category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "platformdirs-2.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, + {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, +] [package.extras] docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] @@ -290,6 +510,11 @@ description = "HTTP traffic mocking and expectations made easy" category = "dev" optional = false python-versions = "*" +files = [ + {file = "pook-1.0.2-py2-none-any.whl", hash = "sha256:cd3cbfe280d544e672f41a5b9482883841ba247f865858b57fd59f729e37616a"}, + {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, + {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, +] [package.dependencies] furl = ">=0.5.6" @@ -303,6 +528,10 @@ description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, + {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, +] [package.extras] plugins = ["importlib-metadata"] @@ -314,6 +543,10 @@ description = "pyparsing module - Classes and methods to define and execute pars category = "dev" optional = false python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] [package.extras] diagrams = ["jinja2", "railroad-diagrams"] @@ -325,6 +558,30 @@ description = "Persistent/Functional/Immutable data structures" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win32.whl", hash = "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win32.whl", hash = "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73"}, + {file = "pyrsistent-0.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win32.whl", hash = "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab"}, + {file = "pyrsistent-0.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win32.whl", hash = "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291"}, + {file = "pyrsistent-0.19.2-py3-none-any.whl", hash = "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0"}, + {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, +] [[package]] name = "pytz" @@ -333,6 +590,10 @@ description = "World timezone definitions, modern and historical" category = "dev" optional = false python-versions = "*" +files = [ + {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, + {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, +] [[package]] name = "requests" @@ -341,6 +602,10 @@ description = "Python HTTP for Humans." category = "dev" optional = false python-versions = ">=3.7, <4" +files = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] [package.dependencies] certifi = ">=2017.4.17" @@ -359,6 +624,10 @@ description = "Python 2 and 3 compatibility utilities" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "snowballstemmer" @@ -367,6 +636,10 @@ description = "This package provides 29 stemmers for 28 languages generated from category = "dev" optional = false python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] [[package]] name = "Sphinx" @@ -375,6 +648,10 @@ description = "Python documentation generator" category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, + {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, +] [package.dependencies] alabaster = ">=0.7,<0.8" @@ -407,6 +684,10 @@ description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "sphinx_autodoc_typehints-1.19.5-py3-none-any.whl", hash = "sha256:ea55b3cc3f485e3a53668bcdd08de78121ab759f9724392fdb5bf3483d786328"}, + {file = "sphinx_autodoc_typehints-1.19.5.tar.gz", hash = "sha256:38a227378e2bc15c84e29af8cb1d7581182da1107111fd1c88b19b5eb7076205"}, +] [package.dependencies] sphinx = ">=5.3" @@ -423,6 +704,10 @@ description = "Read the Docs theme for Sphinx" category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +files = [ + {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, + {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, +] [package.dependencies] docutils = "<0.18" @@ -438,6 +723,10 @@ description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -450,6 +739,10 @@ description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -462,6 +755,10 @@ description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML h category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -474,6 +771,10 @@ description = "A sphinx extension which renders display math in HTML via JavaScr category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] [package.extras] test = ["flake8", "mypy", "pytest"] @@ -485,6 +786,10 @@ description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp d category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -497,6 +802,10 @@ description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] @@ -509,6 +818,10 @@ description = "A lil' TOML parser" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] [[package]] name = "types-certifi" @@ -517,6 +830,10 @@ description = "Typing stubs for certifi" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, + {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, +] [[package]] name = "types-setuptools" @@ -525,6 +842,10 @@ description = "Typing stubs for setuptools" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-setuptools-65.6.0.2.tar.gz", hash = "sha256:ad60ccf01d626de9762224448f36c13e0660e863afd6dc11d979b3739a6c7d24"}, + {file = "types_setuptools-65.6.0.2-py3-none-any.whl", hash = "sha256:2c2b4f756f79778074ce2d21f745aa737b12160d9f8dfa274f47a7287c7a2fee"}, +] [[package]] name = "types-urllib3" @@ -533,6 +854,10 @@ description = "Typing stubs for urllib3" category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, + {file = "types_urllib3-1.26.25.4-py3-none-any.whl", hash = "sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49"}, +] [[package]] name = "typing-extensions" @@ -541,6 +866,10 @@ description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] [[package]] name = "urllib3" @@ -549,6 +878,10 @@ description = "HTTP library with thread-safe connection pooling, file post, and category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, + {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, +] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] @@ -562,365 +895,7 @@ description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" category = "main" optional = false python-versions = ">=3.7" - -[[package]] -name = "xmltodict" -version = "0.13.0" -description = "Makes working with XML feel like you are working with JSON" -category = "dev" -optional = false -python-versions = ">=3.4" - -[[package]] -name = "zipp" -version = "3.11.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[metadata] -lock-version = "1.1" -python-versions = "^3.8" -content-hash = "9c9723bbb16a36bbb58a66116c1a38273b49a5ac950455c842a0ee67f2667612" - -[metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -attrs = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, -] -Babel = [ - {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, - {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, -] -black = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -docutils = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] -furl = [ - {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, - {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -imagesize = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] -importlib-metadata = [ - {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, - {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, -] -importlib-resources = [ - {file = "importlib_resources-5.10.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, - {file = "importlib_resources-5.10.0.tar.gz", hash = "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668"}, -] -Jinja2 = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] -jsonschema = [ - {file = "jsonschema-4.17.1-py3-none-any.whl", hash = "sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7"}, - {file = "jsonschema-4.17.1.tar.gz", hash = "sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3"}, -] -MarkupSafe = [ - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, - {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, - {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, - {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, - {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, - {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, -] -mypy = [ - {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, - {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, - {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, - {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, - {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, - {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, - {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, - {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, - {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, - {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, - {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, - {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, - {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, - {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, - {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, - {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, - {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, - {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, - {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, - {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, - {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, - {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, - {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, - {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -orderedmultidict = [ - {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, - {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, -] -orjson = [ - {file = "orjson-3.8.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6bf425bba42a8cee49d611ddd50b7fea9e87787e77bf90b2cb9742293f319480"}, - {file = "orjson-3.8.3-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:068febdc7e10655a68a381d2db714d0a90ce46dc81519a4962521a0af07697fb"}, - {file = "orjson-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46241e63df2d39f4b7d44e2ff2becfb6646052b963afb1a99f4ef8c2a31aba0"}, - {file = "orjson-3.8.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:961bc1dcbc3a89b52e8979194b3043e7d28ffc979187e46ad23efa8ada612d04"}, - {file = "orjson-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ea3336c2bda31bc938785b84283118dec52eb90a2946b140054873946f60a4"}, - {file = "orjson-3.8.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:83891e9c3a172841f63cae75ff9ce78f12e4c2c5161baec7af725b1d71d4de21"}, - {file = "orjson-3.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4b587ec06ab7dd4fb5acf50af98314487b7d56d6e1a7f05d49d8367e0e0b23bc"}, - {file = "orjson-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37196a7f2219508c6d944d7d5ea0000a226818787dadbbed309bfa6174f0402b"}, - {file = "orjson-3.8.3-cp310-none-win_amd64.whl", hash = "sha256:94bd4295fadea984b6284dc55f7d1ea828240057f3b6a1d8ec3fe4d1ea596964"}, - {file = "orjson-3.8.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:8fe6188ea2a1165280b4ff5fab92753b2007665804e8214be3d00d0b83b5764e"}, - {file = "orjson-3.8.3-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d30d427a1a731157206ddb1e95620925298e4c7c3f93838f53bd19f6069be244"}, - {file = "orjson-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3497dde5c99dd616554f0dcb694b955a2dc3eb920fe36b150f88ce53e3be2a46"}, - {file = "orjson-3.8.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc29ff612030f3c2e8d7c0bc6c74d18b76dde3726230d892524735498f29f4b2"}, - {file = "orjson-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1612e08b8254d359f9b72c4a4099d46cdc0f58b574da48472625a0e80222b6e"}, - {file = "orjson-3.8.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:54f3ef512876199d7dacd348a0fc53392c6be15bdf857b2d67fa1b089d561b98"}, - {file = "orjson-3.8.3-cp311-none-win_amd64.whl", hash = "sha256:a30503ee24fc3c59f768501d7a7ded5119a631c79033929a5035a4c91901eac7"}, - {file = "orjson-3.8.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:d746da1260bbe7cb06200813cc40482fb1b0595c4c09c3afffe34cfc408d0a4a"}, - {file = "orjson-3.8.3-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e570fdfa09b84cc7c42a3a6dd22dbd2177cb5f3798feefc430066b260886acae"}, - {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca61e6c5a86efb49b790c8e331ff05db6d5ed773dfc9b58667ea3b260971cfb2"}, - {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cd0bb7e843ceba759e4d4cc2ca9243d1a878dac42cdcfc2295883fbd5bd2400"}, - {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff96c61127550ae25caab325e1f4a4fba2740ca77f8e81640f1b8b575e95f784"}, - {file = "orjson-3.8.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:faf44a709f54cf490a27ccb0fb1cb5a99005c36ff7cb127d222306bf84f5493f"}, - {file = "orjson-3.8.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:194aef99db88b450b0005406f259ad07df545e6c9632f2a64c04986a0faf2c68"}, - {file = "orjson-3.8.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:aa57fe8b32750a64c816840444ec4d1e4310630ecd9d1d7b3db4b45d248b5585"}, - {file = "orjson-3.8.3-cp37-none-win_amd64.whl", hash = "sha256:dbd74d2d3d0b7ac8ca968c3be51d4cfbecec65c6d6f55dabe95e975c234d0338"}, - {file = "orjson-3.8.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ef3b4c7931989eb973fbbcc38accf7711d607a2b0ed84817341878ec8effb9c5"}, - {file = "orjson-3.8.3-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:cf3dad7dbf65f78fefca0eb385d606844ea58a64fe908883a32768dfaee0b952"}, - {file = "orjson-3.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbdfbd49d58cbaabfa88fcdf9e4f09487acca3d17f144648668ea6ae06cc3183"}, - {file = "orjson-3.8.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f06ef273d8d4101948ebc4262a485737bcfd440fb83dd4b125d3e5f4226117bc"}, - {file = "orjson-3.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75de90c34db99c42ee7608ff88320442d3ce17c258203139b5a8b0afb4a9b43b"}, - {file = "orjson-3.8.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:78d69020fa9cf28b363d2494e5f1f10210e8fecf49bf4a767fcffcce7b9d7f58"}, - {file = "orjson-3.8.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b70782258c73913eb6542c04b6556c841247eb92eeace5db2ee2e1d4cb6ffaa5"}, - {file = "orjson-3.8.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:989bf5980fc8aca43a9d0a50ea0a0eee81257e812aaceb1e9c0dbd0856fc5230"}, - {file = "orjson-3.8.3-cp38-none-win_amd64.whl", hash = "sha256:52540572c349179e2a7b6a7b98d6e9320e0333533af809359a95f7b57a61c506"}, - {file = "orjson-3.8.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f0ec0ca4e81492569057199e042607090ba48289c4f59f29bbc219282b8dc60"}, - {file = "orjson-3.8.3-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:b7018494a7a11bcd04da1173c3a38fa5a866f905c138326504552231824ac9c1"}, - {file = "orjson-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5870ced447a9fbeb5aeb90f362d9106b80a32f729a57b59c64684dbc9175e92"}, - {file = "orjson-3.8.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0459893746dc80dbfb262a24c08fdba2a737d44d26691e85f27b2223cac8075f"}, - {file = "orjson-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0379ad4c0246281f136a93ed357e342f24070c7055f00aeff9a69c2352e38d10"}, - {file = "orjson-3.8.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:3e9e54ff8c9253d7f01ebc5836a1308d0ebe8e5c2edee620867a49556a158484"}, - {file = "orjson-3.8.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f8ff793a3188c21e646219dc5e2c60a74dde25c26de3075f4c2e33cf25835340"}, - {file = "orjson-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4b0c13e05da5bc1a6b2e1d3b117cc669e2267ce0a131e94845056d506ef041c6"}, - {file = "orjson-3.8.3-cp39-none-win_amd64.whl", hash = "sha256:4fff44ca121329d62e48582850a247a487e968cfccd5527fab20bd5b650b78c3"}, - {file = "orjson-3.8.3.tar.gz", hash = "sha256:eda1534a5289168614f21422861cbfb1abb8a82d66c00a8ba823d863c0797178"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -pathspec = [ - {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, - {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, -] -pkgutil_resolve_name = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] -platformdirs = [ - {file = "platformdirs-2.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, - {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, -] -pook = [ - {file = "pook-1.0.2-py2-none-any.whl", hash = "sha256:cd3cbfe280d544e672f41a5b9482883841ba247f865858b57fd59f729e37616a"}, - {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, - {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, -] -Pygments = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, -] -pyparsing = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] -pyrsistent = [ - {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, - {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, - {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed"}, - {file = "pyrsistent-0.19.2-cp310-cp310-win32.whl", hash = "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41"}, - {file = "pyrsistent-0.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-win32.whl", hash = "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2"}, - {file = "pyrsistent-0.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73"}, - {file = "pyrsistent-0.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308"}, - {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584"}, - {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb"}, - {file = "pyrsistent-0.19.2-cp38-cp38-win32.whl", hash = "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a"}, - {file = "pyrsistent-0.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab"}, - {file = "pyrsistent-0.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"}, - {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95"}, - {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e"}, - {file = "pyrsistent-0.19.2-cp39-cp39-win32.whl", hash = "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b"}, - {file = "pyrsistent-0.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291"}, - {file = "pyrsistent-0.19.2-py3-none-any.whl", hash = "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0"}, - {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, -] -pytz = [ - {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, - {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, -] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -Sphinx = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, -] -sphinx-autodoc-typehints = [ - {file = "sphinx_autodoc_typehints-1.19.5-py3-none-any.whl", hash = "sha256:ea55b3cc3f485e3a53668bcdd08de78121ab759f9724392fdb5bf3483d786328"}, - {file = "sphinx_autodoc_typehints-1.19.5.tar.gz", hash = "sha256:38a227378e2bc15c84e29af8cb1d7581182da1107111fd1c88b19b5eb7076205"}, -] -sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, - {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -types-certifi = [ - {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, - {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, -] -types-setuptools = [ - {file = "types-setuptools-65.6.0.2.tar.gz", hash = "sha256:ad60ccf01d626de9762224448f36c13e0660e863afd6dc11d979b3739a6c7d24"}, - {file = "types_setuptools-65.6.0.2-py3-none-any.whl", hash = "sha256:2c2b4f756f79778074ce2d21f745aa737b12160d9f8dfa274f47a7287c7a2fee"}, -] -types-urllib3 = [ - {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, - {file = "types_urllib3-1.26.25.4-py3-none-any.whl", hash = "sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49"}, -] -typing-extensions = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, -] -urllib3 = [ - {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, - {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, -] -websockets = [ +files = [ {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, @@ -991,11 +966,36 @@ websockets = [ {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, ] -xmltodict = [ + +[[package]] +name = "xmltodict" +version = "0.13.0" +description = "Makes working with XML feel like you are working with JSON" +category = "dev" +optional = false +python-versions = ">=3.4" +files = [ {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, ] -zipp = [ + +[[package]] +name = "zipp" +version = "3.11.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, ] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] +testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "dbb02274eff3ef20c0fd1d9e544e72abf168d5be2dd66b82d7a6f04a033f13f4" diff --git a/pyproject.toml b/pyproject.toml index fa61d2d5..791583c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" types-setuptools = "^65.6.0" pook = "^1.0.2" -orjson = "^3.8.3" +orjson = "^3.8.7" [build-system] requires = ["poetry-core>=1.0.0"] From 7806f5ea842cc83029351c6da1eab71b2537aeca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Mar 2023 10:38:08 -0800 Subject: [PATCH 215/448] Bump types-setuptools from 65.6.0.2 to 67.4.0.3 (#393) Bumps [types-setuptools](https://github.com/python/typeshed) from 65.6.0.2 to 67.4.0.3. - [Release notes](https://github.com/python/typeshed/releases) - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index c9d07737..95620b30 100644 --- a/poetry.lock +++ b/poetry.lock @@ -837,14 +837,14 @@ files = [ [[package]] name = "types-setuptools" -version = "65.6.0.2" +version = "67.4.0.3" description = "Typing stubs for setuptools" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-setuptools-65.6.0.2.tar.gz", hash = "sha256:ad60ccf01d626de9762224448f36c13e0660e863afd6dc11d979b3739a6c7d24"}, - {file = "types_setuptools-65.6.0.2-py3-none-any.whl", hash = "sha256:2c2b4f756f79778074ce2d21f745aa737b12160d9f8dfa274f47a7287c7a2fee"}, + {file = "types-setuptools-67.4.0.3.tar.gz", hash = "sha256:19e958dfdbf1c5a628e54c2a7ee84935051afb7278d0c1cdb08ac194757ee3b1"}, + {file = "types_setuptools-67.4.0.3-py3-none-any.whl", hash = "sha256:3c83c3a6363dd3ddcdd054796705605f0fa8b8e5a39390e07a05e5f7af054978"}, ] [[package]] @@ -998,4 +998,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "dbb02274eff3ef20c0fd1d9e544e72abf168d5be2dd66b82d7a6f04a033f13f4" +content-hash = "234a32f12e55e63a5b13df2e11b6570298c63ab3f88670cc88baae3c1a079765" diff --git a/pyproject.toml b/pyproject.toml index 791583c3..342dd8fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" -types-setuptools = "^65.6.0" +types-setuptools = "^67.4.0" pook = "^1.0.2" orjson = "^3.8.7" From 54cd97a6b64fbd2f4360178a9ab324f44f719314 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Mar 2023 13:00:44 -0800 Subject: [PATCH 216/448] Bump mypy from 0.991 to 1.0.1 (#400) Bumps [mypy](https://github.com/python/mypy) from 0.991 to 1.0.1. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.991...v1.0.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 60 +++++++++++++++++++++++--------------------------- pyproject.toml | 2 +- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/poetry.lock b/poetry.lock index 95620b30..e40bec4d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -318,42 +318,38 @@ files = [ [[package]] name = "mypy" -version = "0.991" +version = "1.0.1" description = "Optional static typing for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, - {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, - {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, - {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, - {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, - {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, - {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, - {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, - {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, - {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, - {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, - {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, - {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, - {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, - {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, - {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, - {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, - {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, - {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, - {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, - {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, - {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, - {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, - {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, - {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, - {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, - {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, + {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, + {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, + {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, + {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, + {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, + {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, + {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, + {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, + {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, + {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, + {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, + {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, + {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, + {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, + {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, + {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, + {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, + {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, ] [package.dependencies] @@ -998,4 +994,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "234a32f12e55e63a5b13df2e11b6570298c63ab3f88670cc88baae3c1a079765" +content-hash = "0ceda7003d52f8216a350254f9e703cfe760fb274687d64679a077f67d6e9021" diff --git a/pyproject.toml b/pyproject.toml index 342dd8fb..a8c8d35e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = "^2022.5.18" [tool.poetry.dev-dependencies] black = "^22.12.0" -mypy = "^0.991" +mypy = "^1.0" types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" sphinx-rtd-theme = "^1.0.0" From 21117bd22f66fdc16b9cb0cf806f3b8cc7d62315 Mon Sep 17 00:00:00 2001 From: Anthony Johnson <114414459+antdjohns@users.noreply.github.com> Date: Fri, 10 Mar 2023 13:07:00 -0800 Subject: [PATCH 217/448] make spec gen (#402) --- .polygon/rest.json | 6182 ++++++++++++++++++--------------------- .polygon/websocket.json | 9 + 2 files changed, 2793 insertions(+), 3398 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 1ea641d1..e38b495e 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -12,7 +12,7 @@ }, "AggregateDate": { "description": "The beginning date for the aggregate window.", - "example": "2020-10-14", + "example": "2023-01-09", "in": "path", "name": "date", "required": true, @@ -21,7 +21,7 @@ } }, "AggregateLimitMax50000": { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on\nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -53,7 +53,7 @@ }, "AggregateTimeFrom": { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "from", "required": true, @@ -63,7 +63,7 @@ }, "AggregateTimeTo": { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "to", "required": true, @@ -157,7 +157,7 @@ }, "OptionsTickerPathParam": { "description": "The ticker symbol of the options contract.", - "example": "O:TSLA210903C00700000", + "example": "O:SPY251219C00650000", "in": "path", "name": "optionsTicker", "required": true, @@ -875,7 +875,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -890,14 +890,14 @@ }, "s": { "description": "The size (volume) of the trade.", - "type": "integer" + "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp. This is the timestamp of when the trade was generated at the exchange.", "type": "integer" }, "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -910,14 +910,6 @@ "x" ], "type": "object" - }, - { - "properties": { - "x": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", - "type": "integer" - } - } } ] }, @@ -1186,7 +1178,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -1201,14 +1193,14 @@ }, "s": { "description": "The size (volume) of the trade.", - "type": "integer" + "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp. This is the timestamp of when the trade was generated at the exchange.", "type": "integer" }, "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -1221,14 +1213,6 @@ "x" ], "type": "object" - }, - { - "properties": { - "x": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", - "type": "integer" - } - } } ] }, @@ -2242,7 +2226,7 @@ "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp of the quote.", "type": "integer" }, "x": { @@ -2357,7 +2341,7 @@ "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp of the quote.", "type": "integer" }, "x": { @@ -2546,7 +2530,7 @@ "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp of the quote.", "type": "integer" }, "x": { @@ -3064,47 +3048,6 @@ "format": "double", "type": "number" }, - "SnapshotLastTrade": { - "properties": { - "c": { - "description": "The trade conditions.", - "items": { - "type": "string" - }, - "type": "array" - }, - "i": { - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", - "type": "string" - }, - "p": { - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", - "format": "double", - "type": "number" - }, - "s": { - "description": "The size (volume) of the trade.", - "type": "integer" - }, - "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", - "type": "integer" - }, - "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" - } - }, - "required": [ - "c", - "i", - "p", - "s", - "t", - "x" - ], - "type": "object" - }, "SnapshotOHLCV": { "properties": { "c": { @@ -3455,7 +3398,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" } }, @@ -3642,7 +3585,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" } }, @@ -3661,7 +3604,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -3679,7 +3622,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" }, "x": { @@ -3897,7 +3840,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" } }, @@ -3916,7 +3859,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -3934,7 +3877,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" }, "x": { @@ -4849,159 +4792,58 @@ }, "openapi": "3.0.3", "paths": { - "/delete-me/{underlyingAsset}": { + "/v1/conversion/{from}/{to}": { "get": { - "description": "Get the snapshot of all options contracts for an underlying ticker.", - "operationId": "OptionsChain", + "description": "Get currency conversions using the latest market conversion rates. Note than you can convert in both directions. For example USD to CAD or CAD to USD.", + "operationId": "RealTimeCurrencyConversion", "parameters": [ { - "description": "The underlying ticker symbol of the option contract.", - "example": "AAPL", + "description": "The \"from\" symbol of the pair.", + "example": "AUD", "in": "path", - "name": "underlyingAsset", + "name": "from", "required": true, "schema": { "type": "string" } }, { - "description": "Query by strike price of a contract.", - "in": "query", - "name": "strike_price", - "schema": { - "type": "number" - }, - "x-polygon-filter-field": { - "range": true, - "type": "number" - } - }, - { - "description": "Query by contract expiration with date format YYYY-MM-DD.", - "in": "query", - "name": "expiration_date", - "schema": { - "type": "string" - }, - "x-polygon-filter-field": { - "range": true - } - }, - { - "description": "Query by the type of contract.", - "in": "query", - "name": "contract_type", + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, "schema": { - "enum": [ - "call", - "put" - ], "type": "string" } }, { - "description": "Search by strike_price.", - "in": "query", - "name": "strike_price.gte", - "schema": { - "type": "number" - } - }, - { - "description": "Search by strike_price.", - "in": "query", - "name": "strike_price.gt", - "schema": { - "type": "number" - } - }, - { - "description": "Search by strike_price.", - "in": "query", - "name": "strike_price.lte", - "schema": { - "type": "number" - } - }, - { - "description": "Search by strike_price.", + "description": "The amount to convert, with a decimal.", + "example": 100, "in": "query", - "name": "strike_price.lt", + "name": "amount", + "required": true, "schema": { + "default": 100, "type": "number" } }, { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.gte", - "schema": { - "type": "string" - } - }, - { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.gt", - "schema": { - "type": "string" - } - }, - { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.lte", - "schema": { - "type": "string" - } - }, - { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.lt", - "schema": { - "type": "string" - } - }, - { - "description": "Order results based on the `sort` field.", + "description": "The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy.", + "example": 2, "in": "query", - "name": "order", + "name": "precision", "schema": { + "default": 2, "enum": [ - "asc", - "desc" + 0, + 1, + 2, + 3, + 4 ], - "example": "asc", - "type": "string" - } - }, - { - "description": "Limit the number of results returned, default is 10 and max is 1000.", - "in": "query", - "name": "limit", - "schema": { - "default": 10, - "example": 10, - "maximum": 1000, - "minimum": 1, "type": "integer" } - }, - { - "description": "Sort field used for ordering.", - "in": "query", - "name": "sort", - "schema": { - "default": "ticker", - "enum": [ - "ticker", - "expiration_date", - "strike_price" - ], - "example": "ticker", - "type": "string" - } } ], "responses": { @@ -5009,592 +4851,647 @@ "content": { "application/json": { "example": { - "request_id": "6a7e466379af0a71039d60cc78e72282", - "results": [ - { - "break_even_price": 151.2, - "day": { - "change": 4.5, - "change_percent": 6.76, - "close": 120.73, - "high": 120.81, - "last_updated": 1605195918507251700, - "low": 118.9, - "open": 119.32, - "previous_close": 119.12, - "volume": 868, - "vwap": 119.31 - }, - "details": { - "contract_type": "call", - "exercise_style": "american", - "expiration_date": "2022-01-21", - "shares_per_contract": 100, - "strike_price": 150, - "ticker": "AAPL211022C000150000" - }, - "greeks": { - "delta": 1, - "gamma": 0, - "implied_volatility": 5, - "theta": 0.00229, - "vega": 0 - }, - "last_quote": { - "ask": 120.3, - "ask_size": 4, - "bid": 120.28, - "bid_size": 8, - "last_updated": 1605195918507251700, - "midpoint": 120.29 - }, - "open_interest": 1543, - "underlying_asset": { - "change_to_break_even": 4.2, - "last_updated": 1605195918507251700, - "price": 147, - "ticker": "AAPL", - "timeframe": "DELAYED" - } - } - ], - "status": "OK" + "converted": 73.14, + "from": "AUD", + "initialAmount": 100, + "last": { + "ask": 1.3673344, + "bid": 1.3672596, + "exchange": 48, + "timestamp": 1605555313000 + }, + "status": "success", + "to": "USD" }, "schema": { "properties": { - "next_url": { - "description": "If present, this value can be used to fetch the next page of data.", + "converted": { + "description": "The result of the conversion.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The \"from\" currency symbol.", "type": "string" }, + "initialAmount": { + "description": "The amount to convert.", + "format": "double", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "last": { + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastQuoteCurrencies" + } + }, "request_id": { + "description": "A request id assigned by the server.", "type": "string" }, - "results": { - "items": { - "properties": { - "break_even_price": { - "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", - "format": "double", - "type": "number" - }, - "day": { - "description": "The most recent daily bar for this contract.", + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + }, + "to": { + "description": "The \"to\" currency symbol.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "ask,bid,exchange,timestamp\n1.3673344,1.3672596,48,1605555313000\n", + "schema": { + "type": "string" + } + } + }, + "description": "The last tick for this currency pair, plus the converted amount for the requested amount." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Real-time Currency Conversion", + "tags": [ + "fx:conversion" + ], + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + } + }, + "/v1/historic/crypto/{from}/{to}/{date}": { + "get": { + "description": "Get historic trade ticks for a cryptocurrency pair.\n", + "parameters": [ + { + "description": "The \"from\" symbol of the crypto pair.", + "example": "BTC", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The \"to\" symbol of the crypto pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The date/day of the historic ticks to retrieve.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "in": "query", + "name": "offset", + "schema": { + "type": "integer" + } + }, + { + "description": "Limit the size of the response, max 10000.", + "example": 100, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "day": "2020-10-14T00:00:00.000Z", + "map": { + "c": "conditions", + "p": "price", + "s": "size", + "t": "timestamp", + "x": "exchange" + }, + "msLatency": 1, + "status": "success", + "symbol": "BTC-USD", + "ticks": [ + { + "c": [ + 2 + ], + "p": 15482.89, + "s": 0.00188217, + "t": 1604880000067, + "x": 1 + }, + { + "c": [ + 2 + ], + "p": 15482.11, + "s": 0.00161739, + "t": 1604880000167, + "x": 1 + } + ], + "type": "crypto" + }, + "schema": { + "allOf": [ + { + "description": "The status of this request's response.", + "type": "string" + }, + { + "properties": { + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" + }, + "map": { + "description": "A map for shortened result keys.", + "type": "object" + }, + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + }, + "ticks": { + "items": { "properties": { - "change": { - "description": "The value of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" - }, - "change_percent": { - "description": "The percent of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" - }, - "close": { - "description": "The closing price for the contract of the day.", - "format": "double", - "type": "number" - }, - "high": { - "description": "The highest price for the contract of the day.", - "format": "double", - "type": "number" + "c": { + "description": "A list of condition codes.\n", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", + "type": "integer" + }, + "type": "array" }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } + "i": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", + "type": "string" }, - "low": { - "description": "The lowest price for the contract of the day.", + "p": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", "format": "double", "type": "number" }, - "open": { - "description": "The open price for the contract of the day.", + "s": { + "description": "The size of a trade (also known as volume).\n", "format": "double", "type": "number" }, - "previous_close": { - "description": "The closing price for the contract of previous trading day.", + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", + "type": "integer" + } + }, + "required": [ + "p", + "s", + "x", + "c", + "t", + "i" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "day", + "map", + "msLatency", + "symbol", + "ticks" + ], + "type": "object" + } + ] + } + } + }, + "description": "An array of crypto trade ticks." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Historic Crypto Trades", + "tags": [ + "crypto:trades" + ], + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Trades v3", + "path": "get_v3_trades__cryptoticker" + } + }, + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + } + }, + "/v1/historic/forex/{from}/{to}/{date}": { + "get": { + "description": "Get historic ticks for a forex currency pair.\n", + "parameters": [ + { + "description": "The \"from\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `from` would be **USD**.\n", + "example": "AUD", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The \"to\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `to` would be **JPY**.\n", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The date/day of the historic ticks to retrieve.", + "example": "2020-10-14", + "in": "path", + "name": "date", + "required": true, + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "in": "query", + "name": "offset", + "schema": { + "type": "integer" + } + }, + { + "description": "Limit the size of the response, max 10000.", + "example": 100, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "day": "2020-10-14", + "map": { + "ap": "ask", + "bp": "bid", + "t": "timestamp" + }, + "msLatency": "0", + "pair": "AUD/USD", + "status": "success", + "ticks": [ + { + "ap": 0.71703, + "bp": 0.71701, + "t": 1602633600000, + "x": 48 + }, + { + "ap": 0.71703, + "bp": 0.717, + "t": 1602633600000, + "x": 48 + }, + { + "ap": 0.71702, + "bp": 0.717, + "t": 1602633600000, + "x": 48 + } + ], + "type": "forex" + }, + "schema": { + "allOf": [ + { + "properties": { + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + { + "properties": { + "day": { + "description": "The date that was evaluated from the request.", + "format": "date", + "type": "string" + }, + "map": { + "description": "A map for shortened result keys.", + "type": "object" + }, + "msLatency": { + "description": "The milliseconds of latency for the query results.", + "type": "integer" + }, + "pair": { + "description": "The currency pair that was evaluated from the request.", + "type": "string" + }, + "ticks": { + "items": { + "properties": { + "a": { + "description": "The ask price.", "format": "double", "type": "number" }, - "volume": { - "description": "The trading volume for the contract of the day.", + "b": { + "description": "The bid price.", "format": "double", "type": "number" }, - "vwap": { - "description": "The trading volume weighted average price for the contract of the day.", - "format": "double", - "type": "number", - "x-polygon-go-id": "VWAP" + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "x": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" } }, - "type": "object", - "x-polygon-go-type": { - "name": "Day" - } + "required": [ + "a", + "b", + "x", + "t" + ], + "type": "object" }, - "details": { - "properties": { - "contract_type": { - "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", - "enum": [ - "put", - "call", - "other" - ], - "type": "string" - }, - "exercise_style": { - "description": "The exercise style of this contract. See this link for more details on exercise styles.", - "enum": [ - "american", - "european", - "bermudan" - ], - "type": "string" - }, - "expiration_date": { - "description": "The contract's expiration date in YYYY-MM-DD format.", - "format": "date", - "type": "string", - "x-polygon-go-type": { - "name": "IDaysPolygonDateString", - "path": "github.com/polygon-io/ptime" - } - }, - "shares_per_contract": { - "description": "The number of shares per contract for this contract.", - "type": "number" - }, - "strike_price": { - "description": "The strike price of the option contract.", - "format": "double", - "type": "number" - }, - "ticker": { - "description": "The ticker for the option contract.", - "type": "string" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "Details" - } - }, - "greeks": { - "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", - "properties": { - "delta": { - "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", - "format": "double", - "type": "number" - }, - "gamma": { - "description": "The change in delta per $0.01 change in the price of the underlying asset.", - "format": "double", - "type": "number" - }, - "theta": { - "description": "The change in the option's price per day.", - "format": "double", - "type": "number" - }, - "vega": { - "description": "The change in the option's price per 1% increment in volatility.", - "format": "double", - "type": "number" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "Greeks" - } - }, - "implied_volatility": { - "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", - "format": "double", - "type": "number" - }, - "last_quote": { - "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "ask_size": { - "description": "The ask size.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "bid_size": { - "description": "The bid size.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "midpoint": { - "description": "The average of the bid and ask price.", - "format": "double", - "type": "number" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastQuote" - } - }, - "open_interest": { - "description": "The quantity of this contract held at the end of the last trading day.", - "format": "double", - "type": "number" - }, - "underlying_asset": { - "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", - "properties": { - "change_to_break_even": { - "description": "The change in price for the contract to break even.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "price": { - "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", - "format": "double", - "type": "number" - }, - "ticker": { - "description": "The ticker symbol for the contract's underlying asset.", - "type": "string" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "UnderlyingAsset" - } - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "OptionSnapshotResult" + "type": "array" } }, - "type": "array" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" + "required": [ + "day", + "map", + "msLatency", + "pair", + "ticks" + ], + "type": "object" } - }, - "type": "object" + ] } } }, - "description": "Snapshots for options contracts of the underlying ticker" + "description": "An array of forex ticks" + }, + "default": { + "description": "Unexpected error" } }, - "summary": "Options Chain", + "summary": "Historic Forex Ticks", "tags": [ - "options:snapshot" + "fx:trades" ], - "x-polygon-entitlement-allowed-timeframes": [ - { - "description": "Real Time Data", - "name": "realtime" - }, - { - "description": "15 minute delayed data", - "name": "delayed" + "x-polygon-deprecation": { + "date": 1654056060000, + "replaces": { + "name": "Quotes (BBO) v3", + "path": "get_v3_quotes__fxticker" } - ], + }, "x-polygon-entitlement-data-type": { - "description": "Aggregate data", - "name": "aggregates" + "description": "NBBO data", + "name": "nbbo" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" - }, - "x-polygon-paginate": { - "limit": { - "default": 10, - "max": 1000 - }, - "sort": { - "default": "ticker", - "enum": [ - "ticker", - "expiration_date", - "strike_price" - ] - } + "description": "Forex data", + "name": "fx" } - }, - "x-polygon-draft": true + } }, - "/v1/conversion/{from}/{to}": { + "/v1/indicators/ema/{cryptoTicker}": { "get": { - "description": "Get currency conversions using the latest market conversion rates. Note than you can convert in both directions. For example USD to CAD or CAD to USD.", - "operationId": "RealTimeCurrencyConversion", + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "CryptoEMA", "parameters": [ { - "description": "The \"from\" symbol of the pair.", - "example": "AUD", + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "X:BTC-USD", "in": "path", - "name": "from", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true } }, { - "description": "The \"to\" symbol of the pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], "type": "string" } }, { - "description": "The amount to convert, with a decimal.", - "example": 100, + "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, "in": "query", - "name": "amount", - "required": true, + "name": "window", "schema": { - "default": 100, - "type": "number" + "default": 50, + "type": "integer" } }, { - "description": "The decimal precision of the conversion. Defaults to 2 which is 2 decimal places accuracy.", - "example": 2, + "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", + "example": "close", "in": "query", - "name": "precision", + "name": "series_type", "schema": { - "default": 2, + "default": "close", "enum": [ - 0, - 1, - 2, - 3, - 4 + "open", + "high", + "low", + "close" ], - "type": "integer" + "type": "string" } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "converted": 73.14, - "from": "AUD", - "initialAmount": 100, - "last": { - "ask": 1.3673344, - "bid": 1.3672596, - "exchange": 48, - "timestamp": 1605555313000 - }, - "status": "success", - "to": "USD" - }, - "schema": { - "properties": { - "converted": { - "description": "The result of the conversion.", - "format": "double", - "type": "number" - }, - "from": { - "description": "The \"from\" currency symbol.", - "type": "string" - }, - "initialAmount": { - "description": "The amount to convert.", - "format": "double", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, - "last": { - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "exchange": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" - }, - "timestamp": { - "description": "The Unix millisecond timestamp.", - "type": "integer", - "x-polygon-go-type": { - "name": "IMilliseconds", - "path": "github.com/polygon-io/ptime" - } - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastQuoteCurrencies" - } - }, - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" - }, - "to": { - "description": "The \"to\" currency symbol.", - "type": "string" - } - }, - "type": "object" - } - }, - "text/csv": { - "example": "ask,bid,exchange,timestamp\n1.3673344,1.3672596,48,1605555313000\n", - "schema": { - "type": "string" - } - } - }, - "description": "The last tick for this currency pair, plus the converted amount for the requested amount." }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Real-time Currency Conversion", - "tags": [ - "fx:conversion" - ], - "x-polygon-entitlement-data-type": { - "description": "NBBO data", - "name": "nbbo" - }, - "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" - } - } - }, - "/v1/historic/crypto/{from}/{to}/{date}": { - "get": { - "description": "Get historic trade ticks for a cryptocurrency pair.\n", - "parameters": [ { - "description": "The \"from\" symbol of the crypto pair.", - "example": "BTC", - "in": "path", - "name": "from", - "required": true, + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], "type": "string" } }, { - "description": "The \"to\" symbol of the crypto pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", "schema": { "type": "string" } }, { - "description": "The date/day of the historic ticks to retrieve.", - "example": "2020-10-14", - "in": "path", - "name": "date", - "required": true, + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", "schema": { - "format": "date", "type": "string" } }, { - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", + "description": "Search by timestamp.", "in": "query", - "name": "offset", + "name": "timestamp.lte", "schema": { - "type": "integer" + "type": "string" } }, { - "description": "Limit the size of the response, max 10000.", - "example": 100, + "description": "Search by timestamp.", "in": "query", - "name": "limit", + "name": "timestamp.lt", "schema": { - "type": "integer" + "type": "string" } } ], @@ -5603,371 +5500,196 @@ "content": { "application/json": { "example": { - "day": "2020-10-14T00:00:00.000Z", - "map": { - "c": "conditions", - "p": "price", - "s": "size", - "t": "timestamp", - "x": "exchange" - }, - "msLatency": 1, - "status": "success", - "symbol": "BTC-USD", - "ticks": [ - { - "c": [ - 2 - ], - "p": 15482.89, - "s": 0.00188217, - "t": 1604880000067, - "x": 1 + "next_url": "https://api.polygon.io/v1/indicators/ema/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, - { - "c": [ - 2 - ], - "p": 15482.11, - "s": 0.00161739, - "t": 1604880000167, - "x": 1 - } - ], - "type": "crypto" + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" }, "schema": { - "allOf": [ - { - "description": "The status of this request's response.", + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", "type": "string" }, - { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { "properties": { - "day": { - "description": "The date that was evaluated from the request.", - "format": "date", - "type": "string" - }, - "map": { - "description": "A map for shortened result keys.", + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, "type": "object" }, - "msLatency": { - "description": "The milliseconds of latency for the query results.", - "type": "integer" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" - }, - "ticks": { + "values": { "items": { "properties": { - "c": { - "description": "A list of condition codes.\n", - "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/get_v3_reference_conditions)\nfor a mapping to exchange conditions.\n", - "type": "integer" - }, - "type": "array" - }, - "i": { - "description": "The Trade ID which uniquely identifies a trade. These are unique per\ncombination of ticker, exchange, and TRF. For example: A trade for AAPL\nexecuted on NYSE and a trade for AAPL executed on NASDAQ could potentially\nhave the same Trade ID.\n", - "type": "string" - }, - "p": { - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.\n", - "format": "double", - "type": "number" - }, - "s": { - "description": "The size of a trade (also known as volume).\n", - "format": "double", - "type": "number" - }, - "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", - "type": "integer" + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } }, - "x": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", - "type": "integer" + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } } }, - "required": [ - "p", - "s", - "x", - "c", - "t", - "i" - ], "type": "object" }, "type": "array" } }, - "required": [ - "day", - "map", - "msLatency", - "symbol", - "ticks" - ], - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "EMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" } - ] + }, + "type": "object" + } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", + "schema": { + "type": "string" } } }, - "description": "An array of crypto trade ticks." - }, - "default": { - "description": "Unexpected error" + "description": "Exponential Moving Average (EMA) data for each period." } }, - "summary": "Historic Crypto Trades", + "summary": "Exponential Moving Average (EMA)", "tags": [ - "crypto:trades" + "crpyto:aggregates" ], - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "name": "Trades v3", - "path": "get_v3_trades__cryptoticker" - } - }, "x-polygon-entitlement-data-type": { - "description": "Trade data", - "name": "trades" + "description": "Aggregate data", + "name": "aggregates" }, "x-polygon-entitlement-market-type": { "description": "Crypto data", "name": "crypto" } - } + }, + "x-polygon-ignore": true }, - "/v1/historic/forex/{from}/{to}/{date}": { + "/v1/indicators/ema/{fxTicker}": { "get": { - "description": "Get historic ticks for a forex currency pair.\n", + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "ForexEMA", "parameters": [ { - "description": "The \"from\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `from` would be **USD**.\n", - "example": "AUD", + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "C:EUR-USD", "in": "path", - "name": "from", + "name": "fxTicker", "required": true, "schema": { "type": "string" - } + }, + "x-polygon-go-id": "Ticker" }, { - "description": "The \"to\" symbol of the currency pair.\n\nExample: For **USD/JPY** the `to` would be **JPY**.\n", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", "schema": { "type": "string" - } - }, - { - "description": "The date/day of the historic ticks to retrieve.", - "example": "2020-10-14", - "in": "path", - "name": "date", - "required": true, - "schema": { - "format": "date", - "type": "string" - } - }, - { - "description": "The timestamp offset, used for pagination. This is the offset at which to start the results. Using the `timestamp` of the last result as the offset will give you the next page of results.\n", - "in": "query", - "name": "offset", - "schema": { - "type": "integer" - } - }, - { - "description": "Limit the size of the response, max 10000.", - "example": 100, - "in": "query", - "name": "limit", - "schema": { - "type": "integer" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "day": "2020-10-14", - "map": { - "ap": "ask", - "bp": "bid", - "t": "timestamp" - }, - "msLatency": "0", - "pair": "AUD/USD", - "status": "success", - "ticks": [ - { - "ap": 0.71703, - "bp": 0.71701, - "t": 1602633600000, - "x": 48 - }, - { - "ap": 0.71703, - "bp": 0.717, - "t": 1602633600000, - "x": 48 - }, - { - "ap": 0.71702, - "bp": 0.717, - "t": 1602633600000, - "x": 48 - } - ], - "type": "forex" - }, - "schema": { - "allOf": [ - { - "properties": { - "status": { - "description": "The status of this request's response.", - "type": "string" - } - }, - "required": [ - "status" - ], - "type": "object" - }, - { - "properties": { - "day": { - "description": "The date that was evaluated from the request.", - "format": "date", - "type": "string" - }, - "map": { - "description": "A map for shortened result keys.", - "type": "object" - }, - "msLatency": { - "description": "The milliseconds of latency for the query results.", - "type": "integer" - }, - "pair": { - "description": "The currency pair that was evaluated from the request.", - "type": "string" - }, - "ticks": { - "items": { - "properties": { - "a": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "b": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", - "type": "integer" - }, - "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" - } - }, - "required": [ - "a", - "b", - "x", - "t" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "day", - "map", - "msLatency", - "pair", - "ticks" - ], - "type": "object" - } - ] - } - } - }, - "description": "An array of forex ticks" - }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Historic Forex Ticks", - "tags": [ - "fx:trades" - ], - "x-polygon-deprecation": { - "date": 1654056060000, - "replaces": { - "name": "Quotes (BBO) v3", - "path": "get_v3_quotes__fxticker" - } - }, - "x-polygon-entitlement-data-type": { - "description": "NBBO data", - "name": "nbbo" - }, - "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" - } - } - }, - "/v1/indicators/ema/{cryptoTicker}": { - "get": { - "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "CryptoEMA", - "parameters": [ - { - "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "X:BTC-USD", - "in": "path", - "name": "cryptoTicker", - "required": true, - "schema": { - "type": "string" - }, - "x-polygon-go-id": "Ticker" - }, - { - "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "in": "query", - "name": "timestamp", - "schema": { - "type": "string" - }, - "x-polygon-filter-field": { - "range": true + }, + "x-polygon-filter-field": { + "range": true } }, { @@ -5989,6 +5711,16 @@ "type": "string" } }, + { + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, { "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", "example": 50, @@ -6086,11 +5818,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -6227,7 +5959,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", "schema": { "type": "string" } @@ -6238,29 +5970,29 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "crpyto:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/ema/{fxTicker}": { + "/v1/indicators/ema/{optionsTicker}": { "get": { "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "ForexEMA", + "operationId": "OptionsEMA", "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "C:EUR-USD", + "example": "O:SPY241220P00720000", "in": "path", - "name": "fxTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -6404,11 +6136,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -6545,7 +6277,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,286.1730473491824 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,285.60990642465924 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,285.023780156278 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,284.4137303667383 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,282.43007426223943 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.7141043158811 O:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,286.0778649309446 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,283.77878058578887 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,283.11791448724966 O:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.7544192473781", "schema": { "type": "string" } @@ -6556,29 +6288,29 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "fx:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Options data", + "name": "options" } }, "x-polygon-ignore": true }, - "/v1/indicators/ema/{optionsTicker}": { + "/v1/indicators/ema/{stockTicker}": { "get": { "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "OptionsEMA", + "operationId": "EMA", "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "O:SPY241220P00720000", + "example": "AAPL", "in": "path", - "name": "optionsTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -6616,7 +6348,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -6722,11 +6454,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -6863,7 +6595,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,286.1730473491824 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,285.60990642465924 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,285.023780156278 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,284.4137303667383 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,282.43007426223943 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.7141043158811 O:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,286.0778649309446 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,283.77878058578887 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,283.11791448724966 O:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.7544192473781", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.17972071441582\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,160.92194334973746\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,162.5721451116157\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,162.93345715698777\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,161.72552880161066\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,162.18657079351314\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.53481135582055\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,159.78118646009983\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,160.48735733602226\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,161.29590022115534\n", "schema": { "type": "string" } @@ -6874,29 +6606,28 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "options:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/ema/{stockTicker}": { + "/v1/indicators/macd/{cryptoTicker}": { "get": { - "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "EMA", + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "CryptoMACD", "parameters": [ { - "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "AAPL", + "description": "The ticker symbol for which to get MACD data.", + "example": "X:BTC-USD", "in": "path", - "name": "stockTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -6934,27 +6665,37 @@ } }, { - "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", - "example": true, + "description": "The short window size used to calculate MACD data.", + "example": 12, "in": "query", - "name": "adjusted", + "name": "short_window", "schema": { - "default": true, - "type": "boolean" + "default": 12, + "type": "integer" } }, { - "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 50, + "description": "The long window size used to calculate MACD data.", + "example": 26, "in": "query", - "name": "window", + "name": "long_window", "schema": { - "default": 50, + "default": 26, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate MACD data. i.e. 'close' will result in using close prices to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -7040,16 +6781,24 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { + "histogram": 38.3801666667, + "signal": 106.9811666667, "timestamp": 1517562000016, - "value": 140.139 + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 } ] }, @@ -7144,6 +6893,22 @@ "values": { "items": { "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, "timestamp": { "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", "format": "int64", @@ -7169,7 +6934,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "EMAResults" + "name": "MACDResults" } }, "status": { @@ -7181,39 +6946,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.17972071441582\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,160.92194334973746\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,162.5721451116157\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,162.93345715698777\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,161.72552880161066\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,162.18657079351314\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.53481135582055\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,159.78118646009983\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,160.48735733602226\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,161.29590022115534\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,-200.79662915774315,-281.5009533935604,80.70432423581724\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,-264.55324270273195,-316.4388906203941,51.88564791766214\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,-317.75700272815084,-339.5909474061525,21.83394467800167\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,-350.23805379084297,-345.0494335756529,-5.188620215190042\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,-347.75055091027025,-343.7522785218554,-3.9982723884148754\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,-339.51740285673077,-342.7527104247516,3.2353075680208576\nX:BTCUSD,11337.77105153,19346.509,0,19527.23,19487.24,19640,18846.95,1664409600000,142239,,0,,0,0,0,0,0,false,1664409600000,-130.70646519456568,-232.81921860513586,102.11275341057018\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,-165.73322121465026,-258.3474069577784,92.61418574312813\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,-242.62960978099727,-301.6770344525147,59.04742467151743\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,-288.68772337443806,-329.4103025998096,40.72257922537153\n", "schema": { "type": "string" } } }, - "description": "Exponential Moving Average (EMA) data for each period." + "description": "Moving Average Convergence/Divergence (MACD) data for each period." } }, - "summary": "Exponential Moving Average (EMA)", + "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "stocks:aggregates" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Crypto data", + "name": "crypto" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/macd/{cryptoTicker}": { + "/v1/indicators/macd/{fxTicker}": { "get": { "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "CryptoMACD", + "operationId": "ForexMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "X:BTC-USD", + "example": "C:EUR-USD", "in": "path", - "name": "cryptoTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -7250,6 +7016,16 @@ "type": "string" } }, + { + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, { "description": "The short window size used to calculate MACD data.", "example": 12, @@ -7281,7 +7057,7 @@ } }, { - "description": "The price in the aggregate which will be used to calculate MACD data. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -7367,11 +7143,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -7532,7 +7308,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,-200.79662915774315,-281.5009533935604,80.70432423581724\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,-264.55324270273195,-316.4388906203941,51.88564791766214\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,-317.75700272815084,-339.5909474061525,21.83394467800167\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,-350.23805379084297,-345.0494335756529,-5.188620215190042\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,-347.75055091027025,-343.7522785218554,-3.9982723884148754\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,-339.51740285673077,-342.7527104247516,3.2353075680208576\nX:BTCUSD,11337.77105153,19346.509,0,19527.23,19487.24,19640,18846.95,1664409600000,142239,,0,,0,0,0,0,0,false,1664409600000,-130.70646519456568,-232.81921860513586,102.11275341057018\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,-165.73322121465026,-258.3474069577784,92.61418574312813\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,-242.62960978099727,-301.6770344525147,59.04742467151743\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,-288.68772337443806,-329.4103025998096,40.72257922537153\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nC:USDAUD,687,1.5442,0,1.53763,1.5386983,1.5526022,1.537279,1664409600000,687,,0,,0,0,0,0,0,false,1664409600000,0.0160095063995076,0.016240853664654657,-0.0002313472651470569\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,0.019060448457087098,0.015690709670065223,0.0033697387870218753\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,0.017190795754692623,0.013971241529748895,0.003219554224943728\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,0.014349509127189686,0.010792069356789809,0.0035574397703998766\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,0.0169083298713677,0.016298690480941423,0.0006096393904262767\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,0.017968564486413374,0.016146280633334852,0.001822283853078522\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,0.018356408747553177,0.014848274973309752,0.0035081337742434247\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,0.016441299960100686,0.01316635297351296,0.0032749469865877255\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,0.015245524601038118,0.012347616226866026,0.002897908374172092\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,0.014947418239455779,0.011623139133323003,0.0033242791061327756\n", "schema": { "type": "string" } @@ -7543,29 +7319,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "crypto:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/macd/{fxTicker}": { + "/v1/indicators/macd/{optionsTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "ForexMACD", + "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", + "operationId": "OptionsMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "C:EUR-USD", + "example": "O:SPY241220P00720000", "in": "path", - "name": "fxTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -7729,11 +7505,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -7894,7 +7670,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nC:USDAUD,687,1.5442,0,1.53763,1.5386983,1.5526022,1.537279,1664409600000,687,,0,,0,0,0,0,0,false,1664409600000,0.0160095063995076,0.016240853664654657,-0.0002313472651470569\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,0.019060448457087098,0.015690709670065223,0.0033697387870218753\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,0.017190795754692623,0.013971241529748895,0.003219554224943728\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,0.014349509127189686,0.010792069356789809,0.0035574397703998766\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,0.0169083298713677,0.016298690480941423,0.0006096393904262767\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,0.017968564486413374,0.016146280633334852,0.001822283853078522\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,0.018356408747553177,0.014848274973309752,0.0035081337742434247\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,0.016441299960100686,0.01316635297351296,0.0032749469865877255\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,0.015245524601038118,0.012347616226866026,0.002897908374172092\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,0.014947418239455779,0.011623139133323003,0.0033242791061327756\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,-0.05105556065990413,3.5771695836806834,-3.6282251443405875\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,4.047960862047148,5.247666286053219,-1.199705424006071\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,5.255380647906861,6.466477305754766,-1.2110966578479045\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,5.591072756938104,6.769251470216741,-1.178178713278637\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,1.4304642046162712,4.48422586976583,-3.053761665149559\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,4.32835898317461,5.547592642054737,-1.2192336588801274\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,4.623290999840208,5.852401056774768,-1.2291100569345605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,4.932483632022979,6.159678571008409,-1.2271949389854298\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,5.93821326327344,7.063796148536399,-1.1255828852629595\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,6.294916771166584,7.345191869852139,-1.050275098685555\n", "schema": { "type": "string" } @@ -7905,29 +7681,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "fx:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Options data", + "name": "options" } }, "x-polygon-ignore": true }, - "/v1/indicators/macd/{optionsTicker}": { + "/v1/indicators/macd/{stockTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", - "operationId": "OptionsMACD", + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "MACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "O:SPY241220P00720000", + "example": "AAPL", "in": "path", - "name": "optionsTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -7965,7 +7741,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -8091,11 +7867,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8256,7 +8032,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,-0.05105556065990413,3.5771695836806834,-3.6282251443405875\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,4.047960862047148,5.247666286053219,-1.199705424006071\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,5.255380647906861,6.466477305754766,-1.2110966578479045\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,5.591072756938104,6.769251470216741,-1.178178713278637\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,1.4304642046162712,4.48422586976583,-3.053761665149559\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,4.32835898317461,5.547592642054737,-1.2192336588801274\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,4.623290999840208,5.852401056774768,-1.2291100569345605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,4.932483632022979,6.159678571008409,-1.2271949389854298\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,5.93821326327344,7.063796148536399,-1.1255828852629595\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,6.294916771166584,7.345191869852139,-1.050275098685555\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,-5.413804946923619,-3.8291158739479005,-1.5846890729757188\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,-4.63165683097526,-3.098305244715017,-1.5333515862602427\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,-4.581291216131007,-2.7149673481499565,-1.86632386798105\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,-3.6311474313744156,-1.1648824074663984,-2.4662650239080173\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,-2.533545758578896,0.9308104167079131,-3.464356175286809\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,-4.771497049659786,-3.432943605703971,-1.3385534439558149\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,-4.349569413677017,-2.2483863811546936,-2.1011830325223233\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,-3.9559234852549707,-1.7230906230241128,-2.232832862230858\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,-3.2635802145105117,-0.548316151489394,-2.7152640630211176\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,-3.070742345502225,0.13049986426588545,-3.2012422097681106\n", "schema": { "type": "string" } @@ -8267,29 +8043,28 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "options:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/macd/{stockTicker}": { + "/v1/indicators/rsi/{cryptoTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "MACD", + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "CryptoRSI", "parameters": [ { - "description": "The ticker symbol for which to get MACD data.", - "example": "AAPL", + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "X:BTC-USD", "in": "path", - "name": "stockTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -8327,47 +8102,17 @@ } }, { - "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, - { - "description": "The short window size used to calculate MACD data.", - "example": 12, - "in": "query", - "name": "short_window", - "schema": { - "default": 12, - "type": "integer" - } - }, - { - "description": "The long window size used to calculate MACD data.", - "example": 26, - "in": "query", - "name": "long_window", - "schema": { - "default": 26, - "type": "integer" - } - }, - { - "description": "The window size used to calculate the MACD signal line.", - "example": 9, + "description": "The window size used to calculate the relative strength index (RSI). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 14, "in": "query", - "name": "signal_window", + "name": "window", "schema": { - "default": 9, + "default": 14, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", "example": "close", "in": "query", "name": "series_type", @@ -8453,24 +8198,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { - "histogram": 38.3801666667, - "signal": 106.9811666667, "timestamp": 1517562000016, - "value": 145.3613333333 - }, - { - "histogram": 41.098859136, - "signal": 102.7386283473, - "timestamp": 1517562001016, - "value": 143.8374874833 + "value": 140.139 } ] }, @@ -8565,32 +8302,16 @@ "values": { "items": { "properties": { - "histogram": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, - "signal": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, - "timestamp": { - "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "IMicroseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "value": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { "description": "The indicator value for this period.", "format": "float", "type": "number", @@ -8606,7 +8327,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "MACDResults" + "name": "RSIResults" } }, "status": { @@ -8618,39 +8339,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,-5.413804946923619,-3.8291158739479005,-1.5846890729757188\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,-4.63165683097526,-3.098305244715017,-1.5333515862602427\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,-4.581291216131007,-2.7149673481499565,-1.86632386798105\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,-3.6311474313744156,-1.1648824074663984,-2.4662650239080173\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,-2.533545758578896,0.9308104167079131,-3.464356175286809\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,-4.771497049659786,-3.432943605703971,-1.3385534439558149\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,-4.349569413677017,-2.2483863811546936,-2.1011830325223233\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,-3.9559234852549707,-1.7230906230241128,-2.232832862230858\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,-3.2635802145105117,-0.548316151489394,-2.7152640630211176\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,-3.070742345502225,0.13049986426588545,-3.2012422097681106\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,52.040915721136884\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,44.813590401722564\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,44.813590401722564\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,45.22751170711286\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,45.22751170711286\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,37.361825384231004\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,37.361825384231004\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,50.74235333598462\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,50.74235333598462\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,39.159457782344376\n", "schema": { "type": "string" } } }, - "description": "Moving Average Convergence/Divergence (MACD) data for each period." + "description": "Relative strength index data for each period." } }, - "summary": "Moving Average Convergence/Divergence (MACD)", + "summary": "Relative Strength Index (RSI)", "tags": [ - "stocks:aggregates" + "crpyto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Crypto data", + "name": "crypto" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/rsi/{cryptoTicker}": { + "/v1/indicators/rsi/{fxTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "CryptoRSI", + "operationId": "ForexRSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "X:BTC-USD", + "example": "C:EUR-USD", "in": "path", - "name": "cryptoTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -8688,7 +8410,17 @@ } }, { - "description": "The window size used to calculate the relative strength index (RSI). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the relative strength index (RSI).", "example": 14, "in": "query", "name": "window", @@ -8784,11 +8516,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8925,7 +8657,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,52.040915721136884\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,44.813590401722564\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,44.813590401722564\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,45.22751170711286\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,45.22751170711286\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,37.361825384231004\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,37.361825384231004\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,50.74235333598462\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,50.74235333598462\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,39.159457782344376\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,65.97230488287764\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,79.3273623194404\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,79.32736231944038\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,74.64770184023104\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,64.43214811875563\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,64.43214811875563\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,81.95981214984681\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,81.95981214984683\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,74.64770184023104\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,74.98028072374902\n", "schema": { "type": "string" } @@ -8936,29 +8668,29 @@ }, "summary": "Relative Strength Index (RSI)", "tags": [ - "crpyto:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/rsi/{fxTicker}": { + "/v1/indicators/rsi/{optionsTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "ForexRSI", + "operationId": "OptionsRSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "C:EUR-USD", + "example": "O:SPY241220P00720000", "in": "path", - "name": "fxTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -9102,11 +8834,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9243,40 +8975,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,65.97230488287764\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,79.3273623194404\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,79.32736231944038\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,74.64770184023104\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,64.43214811875563\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,64.43214811875563\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,81.95981214984681\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,81.95981214984683\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,74.64770184023104\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,74.98028072374902\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,30.837887188419387\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,15.546598157051605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,88.61520575036505\n", "schema": { "type": "string" } } }, - "description": "Relative strength index data for each period." + "description": "Relative Strength Index (RSI) data for each period." } }, "summary": "Relative Strength Index (RSI)", "tags": [ - "fx:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Options data", + "name": "options" } }, "x-polygon-ignore": true }, - "/v1/indicators/rsi/{optionsTicker}": { + "/v1/indicators/rsi/{stockTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "OptionsRSI", + "operationId": "RSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "O:SPY241220P00720000", + "example": "AAPL", "in": "path", - "name": "optionsTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -9314,7 +9046,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -9420,11 +9152,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9561,40 +9293,39 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,30.837887188419387\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,15.546598157051605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,88.61520575036505\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,23.065352237561996\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,29.877761913419718\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,29.58201330468151\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,30.233508748331047\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,19.857312489527956\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,32.18008680069761\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,28.71109953239781\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,31.140902927103383\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,32.21491128713248\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,35.950871523070575\n", "schema": { "type": "string" } } }, - "description": "Relative Strength Index (RSI) data for each period." + "description": "Relative strength Index data for each period." } }, "summary": "Relative Strength Index (RSI)", "tags": [ - "options:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/rsi/{stockTicker}": { + "/v1/indicators/sma/{cryptoTicker}": { "get": { - "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "RSI", + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "CryptoSMA", "parameters": [ { - "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "AAPL", + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "X:BTC-USD", "in": "path", - "name": "stockTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -9632,27 +9363,17 @@ } }, { - "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, - { - "description": "The window size used to calculate the relative strength index (RSI).", - "example": 14, + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, "in": "query", "name": "window", "schema": { - "default": 14, + "default": 50, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", "example": "close", "in": "query", "name": "series_type", @@ -9738,11 +9459,33 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9867,7 +9610,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "RSIResults" + "name": "SMAResults" } }, "status": { @@ -9879,39 +9622,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,23.065352237561996\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,29.877761913419718\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,29.58201330468151\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,30.233508748331047\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,19.857312489527956\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,32.18008680069761\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,28.71109953239781\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,31.140902927103383\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,32.21491128713248\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,35.950871523070575\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", "schema": { "type": "string" } } }, - "description": "Relative strength Index data for each period." + "description": "Simple Moving Average (SMA) data for each period." } }, - "summary": "Relative Strength Index (RSI)", + "summary": "Simple Moving Average (SMA)", "tags": [ - "stocks:aggregates" + "crpyto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Crypto data", + "name": "crypto" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/sma/{cryptoTicker}": { + "/v1/indicators/sma/{fxTicker}": { "get": { "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "CryptoSMA", + "operationId": "ForexSMA", "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "X:BTC-USD", + "example": "C:EUR-USD", "in": "path", - "name": "cryptoTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -9948,6 +9692,16 @@ "type": "string" } }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, { "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", "example": 50, @@ -10045,7 +9799,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -10071,7 +9825,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -10208,7 +9962,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", "schema": { "type": "string" } @@ -10219,29 +9973,29 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "crpyto:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/sma/{fxTicker}": { + "/v1/indicators/sma/{optionsTicker}": { "get": { "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "ForexSMA", + "operationId": "OptionsSMA", "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "C:EUR-USD", + "example": "O:SPY241220P00720000", "in": "path", - "name": "fxTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -10385,7 +10139,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -10411,7 +10165,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -10548,7 +10302,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.0121999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,284.61099999999965\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,282.50919999999974\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,281.80859999999973\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,281.1079999999998\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.4949999999996\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,285.6801999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,285.31159999999966\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,283.9103999999997\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,283.2097999999997\n", "schema": { "type": "string" } @@ -10559,29 +10313,29 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "fx:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Options data", + "name": "options" } }, "x-polygon-ignore": true }, - "/v1/indicators/sma/{optionsTicker}": { + "/v1/indicators/sma/{stockTicker}": { "get": { "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "OptionsSMA", + "operationId": "SMA", "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "O:SPY241220P00720000", + "example": "AAPL", "in": "path", - "name": "optionsTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -10725,7 +10479,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -10751,7 +10505,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -10888,7 +10642,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.0121999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,284.61099999999965\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,282.50919999999974\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,281.80859999999973\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,281.1079999999998\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.4949999999996\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,285.6801999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,285.31159999999966\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,283.9103999999997\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,283.2097999999997\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,164.19240000000005\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,164.40360000000007\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,164.42680000000007\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,164.33300000000006\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,164.13680000000005\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,164.32100000000005\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,164.28180000000003\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,163.97960000000006\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.73900000000006\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.59020000000007\n", "schema": { "type": "string" } @@ -10899,162 +10653,39 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "options:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/sma/{stockTicker}": { + "/v1/last/crypto/{from}/{to}": { "get": { - "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "SMA", + "description": "Get the last trade tick for a cryptocurrency pair.", + "operationId": "LastTradeCrypto", "parameters": [ { - "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "AAPL", + "description": "The \"from\" symbol of the pair.", + "example": "BTC", "in": "path", - "name": "stockTicker", + "name": "from", "required": true, - "schema": { - "type": "string" - }, - "x-polygon-go-id": "Ticker" - }, - { - "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "in": "query", - "name": "timestamp", - "schema": { - "type": "string" - }, - "x-polygon-filter-field": { - "range": true - } - }, - { - "description": "The size of the aggregate time window.", - "example": "day", - "in": "query", - "name": "timespan", - "schema": { - "default": "day", - "enum": [ - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ], - "type": "string" - } - }, - { - "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, - { - "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 50, - "in": "query", - "name": "window", - "schema": { - "default": 50, - "type": "integer" - } - }, - { - "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", - "example": "close", - "in": "query", - "name": "series_type", - "schema": { - "default": "close", - "enum": [ - "open", - "high", - "low", - "close" - ], - "type": "string" - } - }, - { - "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", - "in": "query", - "name": "expand_underlying", - "schema": { - "default": false, - "type": "boolean" - } - }, - { - "description": "The order in which to return the results, ordered by timestamp.", - "example": "desc", - "in": "query", - "name": "order", - "schema": { - "default": "desc", - "enum": [ - "asc", - "desc" - ], - "type": "string" - } - }, - { - "description": "Limit the number of results returned, default is 10 and max is 5000", - "in": "query", - "name": "limit", - "schema": { - "default": 10, - "maximum": 5000, - "type": "integer" - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.gte", - "schema": { - "type": "string" - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.gt", - "schema": { - "type": "string" - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.lte", "schema": { "type": "string" } }, { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.lt", + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, "schema": { "type": "string" } @@ -11065,279 +10696,62 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", - "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", - "results": { - "underlying": { - "aggregates": [ - { - "c": 75.0875, - "h": 75.15, - "l": 73.7975, - "n": 1, - "o": 74.06, - "t": 1577941200000, - "v": 135647456, - "vw": 74.6099 - }, - { - "c": 74.3575, - "h": 75.145, - "l": 74.125, - "n": 1, - "o": 74.2875, - "t": 1578027600000, - "v": 146535512, - "vw": 74.7026 - } - ], - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" - }, - "values": [ - { - "timestamp": 1517562000016, - "value": 140.139 - } - ] + "last": { + "conditions": [ + 1 + ], + "exchange": 4, + "price": 16835.42, + "size": 0.006909, + "timestamp": 1605560885027 }, - "status": "OK" + "request_id": "d2d779df015fe2b7fbb8e58366610ef7", + "status": "success", + "symbol": "BTC-USD" }, "schema": { "properties": { - "next_url": { - "description": "If present, this value can be used to fetch the next page of data.", - "type": "string" - }, - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - }, - "results": { - "properties": { - "underlying": { - "properties": { - "aggregates": { - "items": { - "properties": { - "c": { - "description": "The close price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "h": { - "description": "The highest price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "l": { - "description": "The lowest price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "n": { - "description": "The number of transactions in the aggregate window.", - "type": "integer" - }, - "o": { - "description": "The open price for the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "otc": { - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", - "type": "boolean" - }, - "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", - "format": "float", - "type": "number" - }, - "v": { - "description": "The trading volume of the symbol in the given time period.", - "format": "float", - "type": "number" - }, - "vw": { - "description": "The volume weighted average price.", - "format": "float", - "type": "number" - } - }, - "required": [ - "v", - "vw", - "o", - "c", - "h", - "l", - "t", - "n" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Aggregate", - "path": "github.com/polygon-io/go-lib-models/v2/globals" - } - }, - "type": "array" - }, - "url": { - "description": "The URL which can be used to request the underlying aggregates used in this request.", - "type": "string" - } - }, - "type": "object" - }, - "values": { - "items": { - "properties": { - "timestamp": { - "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "IMicroseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "value": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "SMAResults" - } - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - } - }, - "type": "object" - } - }, - "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,164.19240000000005\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,164.40360000000007\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,164.42680000000007\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,164.33300000000006\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,164.13680000000005\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,164.32100000000005\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,164.28180000000003\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,163.97960000000006\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.73900000000006\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.59020000000007\n", - "schema": { - "type": "string" - } - } - }, - "description": "Simple Moving Average (SMA) data for each period." - } - }, - "summary": "Simple Moving Average (SMA)", - "tags": [ - "stocks:aggregates" - ], - "x-polygon-entitlement-data-type": { - "description": "Aggregate data", - "name": "aggregates" - }, - "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" - } - } - }, - "/v1/last/crypto/{from}/{to}": { - "get": { - "description": "Get the last trade tick for a cryptocurrency pair.", - "operationId": "LastTradeCrypto", - "parameters": [ - { - "description": "The \"from\" symbol of the pair.", - "example": "BTC", - "in": "path", - "name": "from", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The \"to\" symbol of the pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "last": { - "conditions": [ - 1 - ], - "exchange": 4, - "price": 16835.42, - "size": 0.006909, - "timestamp": 1605560885027 - }, - "request_id": "d2d779df015fe2b7fbb8e58366610ef7", - "status": "success", - "symbol": "BTC-USD" - }, - "schema": { - "properties": { - "last": { - "properties": { - "conditions": { - "description": "A list of condition codes.", - "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", - "format": "int32", - "type": "integer" - }, - "type": "array", - "x-polygon-go-type": { - "name": "Int32Array" - } - }, - "exchange": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.", - "type": "integer" - }, - "price": { - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", - "format": "double", - "type": "number" - }, - "size": { - "description": "The size of a trade (also known as volume).", - "format": "double", - "type": "number" - }, - "timestamp": { - "description": "The Unix millisecond timestamp.", - "type": "integer", - "x-polygon-go-type": { - "name": "IMilliseconds", - "path": "github.com/polygon-io/ptime" - } - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastTradeCrypto" - } + "last": { + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } + }, + "exchange": { + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.", + "type": "integer" + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastTradeCrypto" + } }, "request_id": { "description": "A request id assigned by the server.", @@ -11724,7 +11138,7 @@ }, { "description": "The date of the requested open/close in the format YYYY-MM-DD.", - "example": "2020-10-14", + "example": "2023-01-09", "in": "path", "name": "date", "required": true, @@ -11961,7 +11375,7 @@ "parameters": [ { "description": "The ticker symbol of the options contract.", - "example": "O:TSLA210903C00700000", + "example": "O:SPY251219C00650000", "in": "path", "name": "optionsTicker", "required": true, @@ -11971,7 +11385,7 @@ }, { "description": "The date of the requested open/close in the format YYYY-MM-DD.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "date", "required": true, @@ -11997,7 +11411,7 @@ "example": { "afterHours": 26.35, "close": 26.35, - "from": "2021-07-22", + "from": "2023-01-09", "high": 26.35, "low": 25, "open": 25, @@ -12074,7 +11488,7 @@ } }, "text/csv": { - "example": "from,open,high,low,close,volume,afterHours,preMarket\n2021-07-22,25,26.35,25,26.35,2,26.35,25\n", + "example": "from,open,high,low,close,volume,afterHours,preMarket\n2023-01-09,25,26.35,25,26.35,2,26.35,25\n", "schema": { "type": "string" } @@ -12116,7 +11530,7 @@ }, { "description": "The date of the requested open/close in the format YYYY-MM-DD.", - "example": "2020-10-14", + "example": "2023-01-09", "in": "path", "name": "date", "required": true, @@ -12142,7 +11556,7 @@ "example": { "afterHours": 322.1, "close": 325.12, - "from": "2020-10-14", + "from": "2023-01-09", "high": 326.2, "low": 322.3, "open": 324.66, @@ -12219,7 +11633,7 @@ } }, "text/csv": { - "example": "from,open,high,low,close,volume,afterHours,preMarket\n2020-10-14,324.66,326.2,322.3,325.12,26122646,322.1,324.5\n", + "example": "from,open,high,low,close,volume,afterHours,preMarket\n2023-01-09,324.66,326.2,322.3,325.12,26122646,322.1,324.5\n", "schema": { "type": "string" } @@ -12496,6 +11910,10 @@ "results": { "items": { "properties": { + "acceptance_datetime": { + "description": "The datetime when the filing was accepted by EDGAR in EST (format: YYYYMMDDHHMMSS)", + "type": "string" + }, "accession_number": { "description": "Filing Accession Number", "type": "string" @@ -12599,7 +12017,8 @@ "files_count", "source_url", "download_url", - "entities" + "entities", + "acceptance_datetime" ], "type": "object", "x-polygon-go-type": { @@ -12669,6 +12088,10 @@ "example": {}, "schema": { "properties": { + "acceptance_datetime": { + "description": "The datetime when the filing was accepted by EDGAR in EST (format: YYYYMMDDHHMMSS)", + "type": "string" + }, "accession_number": { "description": "Filing Accession Number", "type": "string" @@ -12772,7 +12195,8 @@ "files_count", "source_url", "download_url", - "entities" + "entities", + "acceptance_datetime" ], "type": "object", "x-polygon-go-type": { @@ -13100,70 +12524,73 @@ "200": { "content": { "application/json": { - "description": "JavaScript Object Notation (JSON)", - "example": {} - }, - "application/octet-stream": { - "description": "Binary format", - "example": {} - }, - "application/pdf": { - "description": "Adobe Portable Document Format (PDF)", - "example": {} - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { - "description": "Microsoft Excel (OpenXML)", - "example": {} - }, - "application/xml": { - "description": "Extensible Markup Language (XML)", - "example": {} - }, - "application/zip": { - "description": "ZIP archive", - "example": {} - }, - "image/gif": { - "description": "Graphics Interchange Format (GIF)", - "example": {} - }, - "image/jpeg": { - "description": "Joint Photographic Experts Group (JPEG) image", - "example": {} - }, - "image/png": { - "description": "Portable Network Graphics (PNG)", - "example": {} - }, - "text/css": { - "description": "Cascading Style Sheets (CSS)", - "example": {} - }, - "text/html": { - "description": "HyperText Markup Language (HTML)", - "example": {} - }, - "text/javascript": { - "description": "JavaScript", - "example": {} - }, - "text/plain": { - "description": "Text", - "example": {} - } - }, - "description": "The file data." - } - }, - "summary": "SEC Filing File", - "tags": [ - "reference:sec:filing:file" - ], - "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" - } - }, + "schema": { + "description": "File associated with the filing.\n\nThis provides information to uniquly identify the additional data and a URL\nwhere the file may be downloaded.", + "properties": { + "description": { + "description": "A description for the contents of the file.", + "type": "string" + }, + "filename": { + "description": "The name for the file.", + "type": "string" + }, + "id": { + "description": "An identifier unique to the filing for this data entry.", + "example": "1", + "type": "string" + }, + "sequence": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, + "type": "integer" + }, + "size_bytes": { + "description": "The size of the file in bytes.", + "format": "int64", + "type": "integer" + }, + "source_url": { + "description": "The source URL is a link back to the upstream source for this file.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "The type of document contained in the file.", + "type": "string" + } + }, + "required": [ + "id", + "file", + "description", + "type", + "size_bytes", + "sequence", + "source_url" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECFilingFile", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + } + } + }, + "description": "The file data." + } + }, + "summary": "SEC Filing File", + "tags": [ + "reference:sec:filing:file" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + }, "x-polygon-draft": true }, "/v1/summaries": { @@ -13256,7 +12683,7 @@ "previous_close": 0.98001 }, "ticker": "C:EURUSD", - "type": "forex" + "type": "fx" }, { "branding": { @@ -13470,7 +12897,7 @@ "type": "string" }, "type": { - "description": "The market for this ticker, of stock, crypto, forex, option.", + "description": "The market for this ticker of stock, crypto, fx, option.", "enum": [ "stocks", "crypto", @@ -13530,7 +12957,7 @@ "parameters": [ { "description": "The beginning date for the aggregate window.", - "example": "2020-10-14", + "example": "2023-01-09", "in": "path", "name": "date", "required": true, @@ -13727,7 +13154,7 @@ "parameters": [ { "description": "The beginning date for the aggregate window.", - "example": "2020-10-14", + "example": "2023-01-09", "in": "path", "name": "date", "required": true, @@ -13924,7 +13351,7 @@ "parameters": [ { "description": "The beginning date for the aggregate window.", - "example": "2020-10-14", + "example": "2023-01-09", "in": "path", "name": "date", "required": true, @@ -14360,7 +13787,7 @@ }, { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "from", "required": true, @@ -14370,7 +13797,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "to", "required": true, @@ -14400,7 +13827,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on\nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -14812,7 +14239,7 @@ }, { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "from", "required": true, @@ -14822,7 +14249,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "to", "required": true, @@ -14852,7 +14279,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on\nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -15026,7 +14453,7 @@ "parameters": [ { "description": "The ticker symbol of the options contract.", - "example": "O:TSLA210903C00700000", + "example": "O:SPY251219C00650000", "in": "path", "name": "optionsTicker", "required": true, @@ -15210,7 +14637,7 @@ "parameters": [ { "description": "The ticker symbol of the options contract.", - "example": "O:TSLA210903C00700000", + "example": "O:SPY251219C00650000", "in": "path", "name": "optionsTicker", "required": true, @@ -15249,7 +14676,7 @@ }, { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "from", "required": true, @@ -15259,7 +14686,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "to", "required": true, @@ -15289,7 +14716,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on\nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -15696,7 +15123,7 @@ }, { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "from", "required": true, @@ -15706,7 +15133,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2021-07-22", + "example": "2023-01-09", "in": "path", "name": "to", "required": true, @@ -15736,7 +15163,7 @@ } }, { - "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on \nAggregate Data API Improvements.\n", + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on\nAggregate Data API Improvements.\n", "example": 120, "in": "query", "name": "limit", @@ -15751,6 +15178,7 @@ "application/json": { "example": { "adjusted": true, + "next_url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/1578114000000/2020-01-10?cursor=bGltaXQ9MiZzb3J0PWFzYw", "queryCount": 2, "request_id": "6a7e466379af0a71039d60cc78e72282", "results": [ @@ -15887,6 +15315,15 @@ } }, "type": "object" + }, + { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + } + }, + "type": "object" } ] } @@ -16960,7 +16397,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -16975,14 +16412,14 @@ }, "s": { "description": "The size (volume) of the trade.", - "type": "integer" + "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp. This is the timestamp of when the trade was generated at the exchange.", "type": "integer" }, "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -16995,14 +16432,6 @@ "x" ], "type": "object" - }, - { - "properties": { - "x": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", - "type": "integer" - } - } } ] }, @@ -17317,7 +16746,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -17332,14 +16761,14 @@ }, "s": { "description": "The size (volume) of the trade.", - "type": "integer" + "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp. This is the timestamp of when the trade was generated at the exchange.", "type": "integer" }, "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -17352,14 +16781,6 @@ "x" ], "type": "object" - }, - { - "properties": { - "x": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", - "type": "integer" - } - } } ] }, @@ -17846,7 +17267,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -17861,14 +17282,14 @@ }, "s": { "description": "The size (volume) of the trade.", - "type": "integer" + "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp. This is the timestamp of when the trade was generated at the exchange.", "type": "integer" }, "x": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", "type": "integer" } }, @@ -17881,14 +17302,6 @@ "x" ], "type": "object" - }, - { - "properties": { - "x": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.\n", - "type": "integer" - } - } } ] }, @@ -18186,7 +17599,7 @@ "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp of the quote.", "type": "integer" }, "x": { @@ -18500,7 +17913,7 @@ "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp of the quote.", "type": "integer" }, "x": { @@ -18805,7 +18218,7 @@ "type": "number" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The millisecond accuracy timestamp of the quote.", "type": "integer" }, "x": { @@ -19157,7 +18570,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" } }, @@ -19176,7 +18589,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -19194,7 +18607,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" }, "x": { @@ -19551,7 +18964,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" } }, @@ -19570,7 +18983,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -19588,7 +19001,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" }, "x": { @@ -19944,7 +19357,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" } }, @@ -19963,7 +19376,7 @@ "c": { "description": "The trade conditions.", "items": { - "type": "string" + "type": "integer" }, "type": "array" }, @@ -19981,7 +19394,7 @@ "type": "integer" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this message from the exchange which produced it.", "type": "integer" }, "x": { @@ -22871,6 +22284,7 @@ "in": "query", "name": "skip_overlay_trigger", "schema": { + "default": false, "type": "boolean" } } @@ -24307,7 +23721,8 @@ "stocks", "crypto", "fx", - "otc" + "otc", + "indices" ], "type": "string" } @@ -24531,7 +23946,8 @@ "stocks", "crypto", "fx", - "otc" + "otc", + "indices" ], "type": "string" }, @@ -24642,7 +24058,8 @@ "stocks", "options", "crypto", - "fx" + "fx", + "indices" ], "example": "stocks", "type": "string" @@ -24689,7 +24106,8 @@ "stocks", "options", "crypto", - "fx" + "fx", + "indices" ], "example": "stocks", "type": "string" @@ -24980,7 +24398,8 @@ "stocks", "crypto", "fx", - "otc" + "otc", + "indices" ], "type": "string" }, @@ -25089,157 +24508,18 @@ } } }, - "/v3/snapshot/options/{underlyingAsset}": { + "/v3/snapshot/indices": { "get": { - "description": "Get the snapshot of all options contracts for an underlying ticker.", - "operationId": "OptionsChain", + "description": "Get a Snapshot of indices data for said tickers", + "operationId": "IndicesSnapshot", "parameters": [ { - "description": "The underlying ticker symbol of the option contract.", - "example": "AAPL", - "in": "path", - "name": "underlyingAsset", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Query by strike price of a contract.", - "in": "query", - "name": "strike_price", - "schema": { - "type": "number" - }, - "x-polygon-filter-field": { - "range": true, - "type": "number" - } - }, - { - "description": "Query by contract expiration with date format YYYY-MM-DD.", - "in": "query", - "name": "expiration_date", - "schema": { - "type": "string" - }, - "x-polygon-filter-field": { - "range": true - } - }, - { - "description": "Query by the type of contract.", - "in": "query", - "name": "contract_type", - "schema": { - "enum": [ - "call", - "put" - ], - "type": "string" - } - }, - { - "description": "Search by strike_price.", - "in": "query", - "name": "strike_price.gte", - "schema": { - "type": "number" - } - }, - { - "description": "Search by strike_price.", - "in": "query", - "name": "strike_price.gt", - "schema": { - "type": "number" - } - }, - { - "description": "Search by strike_price.", - "in": "query", - "name": "strike_price.lte", - "schema": { - "type": "number" - } - }, - { - "description": "Search by strike_price.", - "in": "query", - "name": "strike_price.lt", - "schema": { - "type": "number" - } - }, - { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.gte", - "schema": { - "type": "string" - } - }, - { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.gt", - "schema": { - "type": "string" - } - }, - { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.lte", - "schema": { - "type": "string" - } - }, - { - "description": "Search by expiration_date.", - "in": "query", - "name": "expiration_date.lt", - "schema": { - "type": "string" - } - }, - { - "description": "Order results based on the `sort` field.", + "description": "Comma separated list of tickers", + "example": "I:SPX", "in": "query", - "name": "order", + "name": "ticker.any_of", + "required": true, "schema": { - "enum": [ - "asc", - "desc" - ], - "example": "asc", - "type": "string" - } - }, - { - "description": "Limit the number of results returned, default is 10 and max is 250.", - "in": "query", - "name": "limit", - "schema": { - "default": 10, - "example": 10, - "maximum": 250, - "minimum": 1, - "type": "integer" - } - }, - { - "description": "Sort field used for ordering.", - "in": "query", - "name": "sort", - "schema": { - "default": "ticker", - "enum": [ - "ticker", - "expiration_date", - "strike_price" - ], - "example": "ticker", "type": "string" } } @@ -25252,50 +24532,30 @@ "request_id": "6a7e466379af0a71039d60cc78e72282", "results": [ { - "break_even_price": 151.2, - "day": { - "change": 4.5, - "change_percent": 6.76, - "close": 120.73, - "high": 120.81, - "last_updated": 1605195918507251700, - "low": 118.9, - "open": 119.32, - "previous_close": 119.12, - "volume": 868, - "vwap": 119.31 - }, - "details": { - "contract_type": "call", - "exercise_style": "american", - "expiration_date": "2022-01-21", - "shares_per_contract": 100, - "strike_price": 150, - "ticker": "AAPL211022C000150000" - }, - "greeks": { - "delta": 1, - "gamma": 0, - "theta": 0.00229, - "vega": 0 - }, - "implied_volatility": 5, - "last_quote": { - "ask": 120.3, - "ask_size": 4, - "bid": 120.28, - "bid_size": 8, - "last_updated": 1605195918507251700, - "midpoint": 120.29 + "market_status": "closed", + "name": "S&P 500", + "session": { + "change": -50.01, + "change_percent": -1.45, + "close": 3822.39, + "high": 3834.41, + "low": 38217.11, + "open": 3827.38, + "previous_close": 3812.19 }, - "open_interest": 1543, - "underlying_asset": { - "change_to_break_even": 4.2, - "last_updated": 1605195918507251700, - "price": 147, - "ticker": "AAPL", - "timeframe": "DELAYED" - } + "ticker": "I:SPX", + "type": "indices", + "value": 3822.39 + }, + { + "error": "NOT_FOUND", + "message": "Ticker not found.", + "ticker": "APx" + }, + { + "error": "NOT_ENTITLED", + "message": "Not entitled to this ticker.", + "ticker": "APy" } ], "status": "OK" @@ -25312,13 +24572,23 @@ "results": { "items": { "properties": { - "break_even_price": { - "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", - "format": "double", - "type": "number" + "error": { + "description": "The error while looking for this ticker.", + "type": "string" }, - "day": { - "description": "The most recent daily bar for this contract.", + "market_status": { + "description": "The market status for the market that trades this ticker.", + "type": "string" + }, + "message": { + "description": "The error message while looking for this ticker.", + "type": "string" + }, + "name": { + "description": "Name of Index.", + "type": "string" + }, + "session": { "properties": { "change": { "description": "The value of the price change for the contract from the previous trading day.", @@ -25331,283 +24601,92 @@ "type": "number" }, "close": { - "description": "The closing price for the contract of the day.", - "format": "double", - "type": "number" - }, - "high": { - "description": "The highest price for the contract of the day.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "low": { - "description": "The lowest price for the contract of the day.", + "description": "The closing price for the asset of the day.", "format": "double", "type": "number" }, - "open": { - "description": "The open price for the contract of the day.", + "early_trading_change": { + "description": "Today\u2019s early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", "format": "double", "type": "number" }, - "previous_close": { - "description": "The closing price for the contract of previous trading day.", + "early_trading_change_percent": { + "description": "Today\u2019s early trading change as a percentage.", "format": "double", "type": "number" }, - "volume": { - "description": "The trading volume for the contract of the day.", + "high": { + "description": "The highest price for the asset of the day.", "format": "double", "type": "number" }, - "vwap": { - "description": "The trading volume weighted average price for the contract of the day.", + "late_trading_change": { + "description": "Today\u2019s late trading change amount, difference between price and today\u2019s close if in late trading hours, otherwise difference between last price during late trading and today\u2019s close.", "format": "double", - "type": "number", - "x-polygon-go-id": "VWAP" - } - }, - "required": [ - "last_updated", - "open", - "high", - "low", - "close", - "previous_close", - "volume", - "vwap", - "change_percent", - "change" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Day" - } - }, - "details": { - "properties": { - "contract_type": { - "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", - "enum": [ - "put", - "call", - "other" - ], - "type": "string" - }, - "exercise_style": { - "description": "The exercise style of this contract. See this link for more details on exercise styles.", - "enum": [ - "american", - "european", - "bermudan" - ], - "type": "string" - }, - "expiration_date": { - "description": "The contract's expiration date in YYYY-MM-DD format.", - "format": "date", - "type": "string", - "x-polygon-go-type": { - "name": "IDaysPolygonDateString", - "path": "github.com/polygon-io/ptime" - } - }, - "shares_per_contract": { - "description": "The number of shares per contract for this contract.", "type": "number" }, - "strike_price": { - "description": "The strike price of the option contract.", + "late_trading_change_percent": { + "description": "Today\u2019s late trading change as a percentage.", "format": "double", "type": "number" }, - "ticker": { - "description": "The ticker for the option contract.", - "type": "string" - } - }, - "required": [ - "ticker", - "contract_type", - "exercise_style", - "expiration_date", - "shares_per_contract", - "strike_price" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Details" - } - }, - "greeks": { - "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", - "properties": { - "delta": { - "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "low": { + "description": "The lowest price for the asset of the day.", "format": "double", "type": "number" }, - "gamma": { - "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "open": { + "description": "The open price for the asset of the day.", "format": "double", "type": "number" }, - "theta": { - "description": "The change in the option's price per day.", + "previous_close": { + "description": "The closing price for the asset of previous trading day.", "format": "double", "type": "number" }, - "vega": { - "description": "The change in the option's price per 1% increment in volatility.", + "volume": { + "description": "The trading volume for the asset of the day.", "format": "double", "type": "number" } }, + "required": [ + "change", + "change_percent", + "close", + "high", + "low", + "open", + "previous_close" + ], "type": "object", "x-polygon-go-type": { - "name": "Greeks" + "name": "Session" } }, - "implied_volatility": { - "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", - "format": "double", - "type": "number" + "ticker": { + "description": "Ticker of asset queried.", + "type": "string" }, - "last_quote": { - "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "ask_size": { - "description": "The ask size.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "bid_size": { - "description": "The bid size.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "midpoint": { - "description": "The average of the bid and ask price.", - "format": "double", - "type": "number" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" - } - }, - "required": [ - "last_updated", - "timeframe", - "ask", - "ask_size", - "bid_size", - "bid", - "midpoint" + "type": { + "description": "The indices market.", + "enum": [ + "indices" ], - "type": "object", - "x-polygon-go-type": { - "name": "LastQuote" - } + "type": "string" }, - "open_interest": { - "description": "The quantity of this contract held at the end of the last trading day.", - "format": "double", + "value": { + "description": "Value of Index.", "type": "number" - }, - "underlying_asset": { - "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", - "properties": { - "change_to_break_even": { - "description": "The change in price for the contract to break even.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "price": { - "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", - "format": "double", - "type": "number" - }, - "ticker": { - "description": "The ticker symbol for the contract's underlying asset.", - "type": "string" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" - } - }, - "required": [ - "last_updated", - "timeframe", - "ticker", - "price", - "change_to_break_even" - ], - "type": "object", - "x-polygon-go-type": { - "name": "UnderlyingAsset" - } } }, "required": [ - "day", - "last_quote", - "underlying_asset", - "details", - "break_even_price", - "implied_volatility", - "open_interest" + "ticker" ], "type": "object", "x-polygon-go-type": { - "name": "OptionSnapshotResult" + "name": "IndicesResult" } }, "type": "array" @@ -25625,12 +24704,12 @@ } } }, - "description": "Snapshots for options contracts of the underlying ticker" + "description": "Snapshots for indices data of the underlying ticker" } }, - "summary": "Options Chain", + "summary": "Indices Snapshot", "tags": [ - "options:snapshot" + "indices:snapshot" ], "x-polygon-entitlement-allowed-timeframes": [ { @@ -25647,29 +24726,15 @@ "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" - }, - "x-polygon-paginate": { - "limit": { - "default": 10, - "max": 250 - }, - "sort": { - "default": "ticker", - "enum": [ - "ticker", - "expiration_date", - "strike_price" - ] - } + "description": "Indices data", + "name": "indices" } } }, - "/v3/snapshot/options/{underlyingAsset}/{optionContract}": { + "/v3/snapshot/options/{underlyingAsset}": { "get": { - "description": "Get the snapshot of an option contract for a stock equity.", - "operationId": "OptionContract", + "description": "Get the snapshot of all options contracts for an underlying ticker.", + "operationId": "OptionsChain", "parameters": [ { "description": "The underlying ticker symbol of the option contract.", @@ -25682,14 +24747,143 @@ } }, { - "description": "The option contract identifier.", - "example": "O:AAPL230616C00150000", - "in": "path", - "name": "optionContract", - "required": true, + "description": "Query by strike price of a contract.", + "in": "query", + "name": "strike_price", + "schema": { + "type": "number" + }, + "x-polygon-filter-field": { + "range": true, + "type": "number" + } + }, + { + "description": "Query by contract expiration with date format YYYY-MM-DD.", + "in": "query", + "name": "expiration_date", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "Query by the type of contract.", + "in": "query", + "name": "contract_type", + "schema": { + "enum": [ + "call", + "put" + ], + "type": "string" + } + }, + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gte", + "schema": { + "type": "number" + } + }, + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.gt", + "schema": { + "type": "number" + } + }, + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lte", + "schema": { + "type": "number" + } + }, + { + "description": "Search by strike_price.", + "in": "query", + "name": "strike_price.lt", + "schema": { + "type": "number" + } + }, + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gte", "schema": { "type": "string" } + }, + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by expiration_date.", + "in": "query", + "name": "expiration_date.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 250.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 250, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker", + "expiration_date", + "strike_price" + ], + "example": "ticker", + "type": "string" + } } ], "responses": { @@ -25697,54 +24891,65 @@ "content": { "application/json": { "example": { - "request_id": "d9ff18dac69f55c218f69e4753706acd", - "results": { - "break_even_price": 171.075, - "day": { - "change": -1.05, - "change_percent": -4.67, - "close": 21.4, - "high": 22.49, - "last_updated": 1636520400000000000, - "low": 21.35, - "open": 22.49, - "previous_close": 22.45, - "volume": 37, - "vwap": 21.6741 - }, - "details": { - "contract_type": "call", - "exercise_style": "american", - "expiration_date": "2023-06-16", - "shares_per_contract": 100, - "strike_price": 150, - "ticker": "O:AAPL230616C00150000" - }, - "greeks": { - "delta": 0.5520187372272933, - "gamma": 0.00706756515659829, - "theta": -0.018532772783847958, - "vega": 0.7274811132998142 - }, - "implied_volatility": 0.3048997097864957, - "last_quote": { - "ask": 21.25, - "ask_size": 110, - "bid": 20.9, - "bid_size": 172, - "last_updated": 1636573458756383500, - "midpoint": 21.075, - "timeframe": "REAL-TIME" - }, - "open_interest": 8921, - "underlying_asset": { - "change_to_break_even": 23.123999999999995, - "last_updated": 1636573459862384600, - "price": 147.951, - "ticker": "AAPL", - "timeframe": "REAL-TIME" + "request_id": "6a7e466379af0a71039d60cc78e72282", + "results": [ + { + "break_even_price": 151.2, + "day": { + "change": 4.5, + "change_percent": 6.76, + "close": 120.73, + "high": 120.81, + "last_updated": 1605195918507251700, + "low": 118.9, + "open": 119.32, + "previous_close": 119.12, + "volume": 868, + "vwap": 119.31 + }, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-01-21", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "AAPL211022C000150000" + }, + "greeks": { + "delta": 1, + "gamma": 0, + "theta": 0.00229, + "vega": 0 + }, + "implied_volatility": 5, + "last_quote": { + "ask": 120.3, + "ask_size": 4, + "bid": 120.28, + "bid_size": 8, + "last_updated": 1605195918507251700, + "midpoint": 120.29 + }, + "last_trade": { + "conditions": [ + 209 + ], + "exchange": 316, + "price": 0.05, + "sip_timestamp": 1675280958783136800, + "size": 2, + "timeframe": "REAL-TIME" + }, + "open_interest": 1543, + "underlying_asset": { + "change_to_break_even": 4.2, + "last_updated": 1605195918507251700, + "price": 147, + "ticker": "AAPL", + "timeframe": "DELAYED" + } } - }, + ], "status": "OK" }, "schema": { @@ -25757,279 +24962,381 @@ "type": "string" }, "results": { - "properties": { - "break_even_price": { - "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", - "format": "double", - "type": "number" - }, - "day": { - "description": "The most recent daily bar for this contract.", - "properties": { - "change": { - "description": "The value of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" - }, - "change_percent": { - "description": "The percent of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" - }, - "close": { - "description": "The closing price for the contract of the day.", - "format": "double", - "type": "number" - }, - "high": { - "description": "The highest price for the contract of the day.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" + "items": { + "properties": { + "break_even_price": { + "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "format": "double", + "type": "number" + }, + "day": { + "description": "The most recent daily bar for this contract.", + "properties": { + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price for the contract of the day.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "low": { + "description": "The lowest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the contract of the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price for the contract of previous trading day.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the contract of the day.", + "format": "double", + "type": "number" + }, + "vwap": { + "description": "The trading volume weighted average price for the contract of the day.", + "format": "double", + "type": "number", + "x-polygon-go-id": "VWAP" } }, - "low": { - "description": "The lowest price for the contract of the day.", - "format": "double", - "type": "number" - }, - "open": { - "description": "The open price for the contract of the day.", - "format": "double", - "type": "number" - }, - "previous_close": { - "description": "The closing price for the contract of previous trading day.", - "format": "double", - "type": "number" - }, - "volume": { - "description": "The trading volume for the contract of the day.", - "format": "double", - "type": "number" - }, - "vwap": { - "description": "The trading volume weighted average price for the contract of the day.", - "format": "double", - "type": "number", - "x-polygon-go-id": "VWAP" + "required": [ + "last_updated", + "open", + "high", + "low", + "close", + "previous_close", + "volume", + "vwap", + "change_percent", + "change" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Day" } }, - "type": "object", - "x-polygon-go-type": { - "name": "Day" - } - }, - "details": { - "properties": { - "contract_type": { - "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", - "enum": [ - "put", - "call", - "other" - ], - "type": "string" - }, - "exercise_style": { - "description": "The exercise style of this contract. See this link for more details on exercise styles.", - "enum": [ - "american", - "european", - "bermudan" - ], - "type": "string" - }, - "expiration_date": { - "description": "The contract's expiration date in YYYY-MM-DD format.", - "format": "date", - "type": "string", - "x-polygon-go-type": { - "name": "IDaysPolygonDateString", - "path": "github.com/polygon-io/ptime" + "details": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See this link for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" } }, - "shares_per_contract": { - "description": "The number of shares per contract for this contract.", - "type": "number" - }, - "strike_price": { - "description": "The strike price of the option contract.", - "format": "double", - "type": "number" - }, - "ticker": { - "description": "The ticker for the option contract.", - "type": "string" + "required": [ + "ticker", + "contract_type", + "exercise_style", + "expiration_date", + "shares_per_contract", + "strike_price" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Details" } }, - "type": "object", - "x-polygon-go-type": { - "name": "Details" - } - }, - "greeks": { - "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", - "properties": { - "delta": { - "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", - "format": "double", - "type": "number" - }, - "gamma": { - "description": "The change in delta per $0.01 change in the price of the underlying asset.", - "format": "double", - "type": "number" - }, - "theta": { - "description": "The change in the option's price per day.", - "format": "double", - "type": "number" + "greeks": { + "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "properties": { + "delta": { + "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "gamma": { + "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "theta": { + "description": "The change in the option's price per day.", + "format": "double", + "type": "number" + }, + "vega": { + "description": "The change in the option's price per 1% increment in volatility.", + "format": "double", + "type": "number" + } }, - "vega": { - "description": "The change in the option's price per 1% increment in volatility.", - "format": "double", - "type": "number" + "type": "object", + "x-polygon-go-type": { + "name": "Greeks" } }, - "type": "object", - "x-polygon-go-type": { - "name": "Greeks" - } - }, - "implied_volatility": { - "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", - "format": "double", - "type": "number" - }, - "last_quote": { - "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "ask_size": { - "description": "The ask size.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "bid_size": { - "description": "The bid size.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" + "implied_volatility": { + "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", + "format": "double", + "type": "number" + }, + "last_quote": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "midpoint": { + "description": "The average of the bid and ask price.", + "format": "double", + "type": "number" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" } }, - "midpoint": { - "description": "The average of the bid and ask price.", - "format": "double", - "type": "number" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" + "required": [ + "last_updated", + "timeframe", + "ask", + "ask_size", + "bid_size", + "bid", + "midpoint" + ], + "type": "object", + "x-polygon-go-type": { + "name": "LastQuote" } }, - "type": "object", - "x-polygon-go-type": { - "name": "LastQuote" - } - }, - "open_interest": { - "description": "The quantity of this contract held at the end of the last trading day.", - "format": "double", - "type": "number" - }, - "underlying_asset": { - "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", - "properties": { - "change_to_break_even": { - "description": "The change in price for the contract to break even.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" + "last_trade": { + "description": "The most recent trade for this contract. This is only returned if your current plan includes trades.", + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/options/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "sip_timestamp": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this trade from the exchange which produced it.", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "int32", + "type": "integer" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" } }, - "price": { - "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", - "format": "double", - "type": "number" - }, - "ticker": { - "description": "The ticker symbol for the contract's underlying asset.", - "type": "string" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" + "required": [ + "timeframe", + "exchange", + "price", + "sip_timestamp", + "size" + ], + "type": "object", + "x-polygon-go-type": { + "name": "OptionsLastTrade" } }, - "type": "object", - "x-polygon-go-type": { - "name": "UnderlyingAsset" + "open_interest": { + "description": "The quantity of this contract held at the end of the last trading day.", + "format": "double", + "type": "number" + }, + "underlying_asset": { + "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", + "properties": { + "change_to_break_even": { + "description": "The change in price for the contract to break even.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol for the contract's underlying asset.", + "type": "string" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + }, + "value": { + "description": "The value of the underlying index.", + "format": "double", + "type": "number" + } + }, + "required": [ + "last_updated", + "timeframe", + "ticker", + "change_to_break_even" + ], + "type": "object", + "x-polygon-go-type": { + "name": "UnderlyingAsset" + } } + }, + "required": [ + "day", + "last_quote", + "underlying_asset", + "details", + "break_even_price", + "implied_volatility", + "open_interest" + ], + "type": "object", + "x-polygon-go-type": { + "name": "OptionSnapshotResult" } }, - "type": "object", - "x-polygon-go-type": { - "name": "OptionSnapshotResult" - } + "type": "array" }, "status": { "description": "The status of this request's response.", "type": "string" } }, + "required": [ + "status", + "request_id" + ], "type": "object" } - }, - "text/csv": { - "schema": { - "example": "break_even_price,day_close,day_high,day_last_updated,day_low,day_open,day_previous_close,day_volume,day_vwap,day_change,day_change_percent,details_contract_type,details_exercise_style,details_expiration_date,details_shares_per_contract,details_strike_price,details_ticker,greeks_delta,greeks_gamma,greeks_theta,greeks_vega,implied_volatility,last_quote_ask,last_quote_ask_size,last_quote_bid,last_quote_bid_size,last_quote_last_updated,last_quote_midpoint,last_quote_timeframe,open_interest,underlying_asset_change_to_break_even,underlying_asset_last_updated,underlying_asset_price,underlying_asset_ticker,underlying_asset_timeframe\n0,171.075,21.4,22.49,1636520400000000000,21.35,22.49,22.45,37,21.6741,-1.05,-4.67,call,american,2023-06-16,100,150,O:AAPL230616C00150000,0.5520187372272933,0.00706756515659829,-0.018532772783847958,0.7274811132998142,0.3048997097864957,21.25,110,20.9,172,1636573458756383500,21.075,REAL-TIME,8921,23.123999999999995,1636573459862384600,147.951,AAPL,REAL-TIME\n", - "type": "string" - } } }, - "description": "Snapshot of the option contract." + "description": "Snapshots for options contracts of the underlying ticker" } }, - "summary": "Option Contract", + "summary": "Options Chain", "tags": [ "options:snapshot" ], @@ -26050,103 +25357,45 @@ "x-polygon-entitlement-market-type": { "description": "Options data", "name": "options" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 250 + }, + "sort": { + "default": "ticker", + "enum": [ + "ticker", + "expiration_date", + "strike_price" + ] + } } } }, - "/v3/trades/{cryptoTicker}": { + "/v3/snapshot/options/{underlyingAsset}/{optionContract}": { "get": { - "description": "Get trades for a crypto ticker symbol in a given time range.", - "operationId": "TradesCrypto", + "description": "Get the snapshot of an option contract for a stock equity.", + "operationId": "OptionContract", "parameters": [ { - "description": "The ticker symbol to get trades for.", - "example": "X:BTC-USD", + "description": "The underlying ticker symbol of the option contract.", + "example": "AAPL", "in": "path", - "name": "cryptoTicker", + "name": "underlyingAsset", "required": true, "schema": { "type": "string" } }, { - "description": "Query by trade timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", - "in": "query", - "name": "timestamp", - "schema": { - "type": "string" - }, - "x-polygon-filter-field": { - "range": true - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.gte", - "schema": { - "type": "string" - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.gt", - "schema": { - "type": "string" - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.lte", - "schema": { - "type": "string" - } - }, - { - "description": "Search by timestamp.", - "in": "query", - "name": "timestamp.lt", - "schema": { - "type": "string" - } - }, - { - "description": "Order results based on the `sort` field.", - "in": "query", - "name": "order", - "schema": { - "default": "desc", - "enum": [ - "asc", - "desc" - ], - "example": "asc", - "type": "string" - } - }, - { - "description": "Limit the number of results returned, default is 10 and max is 50000.", - "in": "query", - "name": "limit", - "schema": { - "default": 10, - "example": 10, - "maximum": 50000, - "minimum": 1, - "type": "integer" - } - }, - { - "description": "Sort field used for ordering.", - "in": "query", - "name": "sort", + "description": "The option contract identifier.", + "example": "O:AAPL230616C00150000", + "in": "path", + "name": "optionContract", + "required": true, "schema": { - "default": "timestamp", - "enum": [ - "timestamp" - ], - "example": "timestamp", "type": "string" } } @@ -26156,30 +25405,64 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v3/trades/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", - "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", - "results": [ - { - "conditions": [ - 1 - ], - "exchange": 1, - "id": "191450340", - "participant_timestamp": 1625097600103000000, - "price": 35060, - "size": 1.0434526 + "request_id": "d9ff18dac69f55c218f69e4753706acd", + "results": { + "break_even_price": 171.075, + "day": { + "change": -1.05, + "change_percent": -4.67, + "close": 21.4, + "high": 22.49, + "last_updated": 1636520400000000000, + "low": 21.35, + "open": 22.49, + "previous_close": 22.45, + "volume": 37, + "vwap": 21.6741 }, - { + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2023-06-16", + "shares_per_contract": 100, + "strike_price": 150, + "ticker": "O:AAPL230616C00150000" + }, + "greeks": { + "delta": 0.5520187372272933, + "gamma": 0.00706756515659829, + "theta": -0.018532772783847958, + "vega": 0.7274811132998142 + }, + "implied_volatility": 0.3048997097864957, + "last_quote": { + "ask": 21.25, + "ask_size": 110, + "bid": 20.9, + "bid_size": 172, + "last_updated": 1636573458756383500, + "midpoint": 21.075, + "timeframe": "REAL-TIME" + }, + "last_trade": { "conditions": [ - 2 + 209 ], - "exchange": 1, - "id": "191450341", - "participant_timestamp": 1625097600368000000, - "price": 35059.99, - "size": 0.0058883 + "exchange": 316, + "price": 0.05, + "sip_timestamp": 1675280958783136800, + "size": 2, + "timeframe": "REAL-TIME" + }, + "open_interest": 8921, + "underlying_asset": { + "change_to_break_even": 23.123999999999995, + "last_updated": 1636573459862384600, + "price": 147.951, + "ticker": "AAPL", + "timeframe": "REAL-TIME" } - ], + }, "status": "OK" }, "schema": { @@ -26188,100 +25471,640 @@ "description": "If present, this value can be used to fetch the next page of data.", "type": "string" }, + "request_id": { + "type": "string" + }, "results": { - "items": { - "properties": { - "conditions": { - "description": "A list of condition codes.", - "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", - "format": "int32", - "type": "integer" + "properties": { + "break_even_price": { + "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "format": "double", + "type": "number" + }, + "day": { + "description": "The most recent daily bar for this contract.", + "properties": { + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" }, - "type": "array", - "x-polygon-go-type": { - "name": "Int32Array" + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price for the contract of the day.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "low": { + "description": "The lowest price for the contract of the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the contract of the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price for the contract of previous trading day.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the contract of the day.", + "format": "double", + "type": "number" + }, + "vwap": { + "description": "The trading volume weighted average price for the contract of the day.", + "format": "double", + "type": "number", + "x-polygon-go-id": "VWAP" } }, - "exchange": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" - }, - "id": { - "description": "The Trade ID which uniquely identifies a trade on the exchange that the trade happened on.", - "type": "string" - }, - "participant_timestamp": { - "description": "The nanosecond Exchange Unix Timestamp. This is the timestamp of when the trade was generated at the exchange.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" + "required": [ + "last_updated", + "open", + "high", + "low", + "close", + "previous_close", + "volume", + "vwap", + "change_percent", + "change" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Day" + } + }, + "details": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See this link for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker for the option contract.", + "type": "string" } }, - "price": { - "description": "The price of the trade in the base currency of the crypto pair.", - "format": "double", - "type": "number" - }, - "size": { - "description": "The size of a trade (also known as volume).", - "format": "double", - "type": "number" + "required": [ + "ticker", + "contract_type", + "exercise_style", + "expiration_date", + "shares_per_contract", + "strike_price" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Details" } }, - "type": "object" - }, - "type": "array" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - } - }, - "type": "object" - } - }, - "text/csv": { - "example": "conditions,exchange,id,participant_timestamp,price,size\n1,1,191450340,1625097600103000000,35060,1.0434526\n2,1,191450341,1625097600368000000,35059.99,0.0058883\n", - "schema": { - "type": "string" - } - } - }, - "description": "A list of trades." + "greeks": { + "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "properties": { + "delta": { + "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "gamma": { + "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "theta": { + "description": "The change in the option's price per day.", + "format": "double", + "type": "number" + }, + "vega": { + "description": "The change in the option's price per 1% increment in volatility.", + "format": "double", + "type": "number" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "Greeks" + } + }, + "implied_volatility": { + "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", + "format": "double", + "type": "number" + }, + "last_quote": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_size": { + "description": "The ask size.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_size": { + "description": "The bid size.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "midpoint": { + "description": "The average of the bid and ask price.", + "format": "double", + "type": "number" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "required": [ + "last_updated", + "timeframe", + "ask", + "ask_size", + "bid_size", + "bid", + "midpoint" + ], + "type": "object", + "x-polygon-go-type": { + "name": "LastQuote" + } + }, + "last_trade": { + "description": "The most recent trade for this contract. This is only returned if your current plan includes trades.", + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/options/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "sip_timestamp": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this trade from the exchange which produced it.", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "int32", + "type": "integer" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "required": [ + "timeframe", + "exchange", + "price", + "sip_timestamp", + "size" + ], + "type": "object", + "x-polygon-go-type": { + "name": "OptionsLastTrade" + } + }, + "open_interest": { + "description": "The quantity of this contract held at the end of the last trading day.", + "format": "double", + "type": "number" + }, + "underlying_asset": { + "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", + "properties": { + "change_to_break_even": { + "description": "The change in price for the contract to break even.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol for the contract's underlying asset.", + "type": "string" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + }, + "value": { + "description": "The value of the underlying index.", + "format": "double", + "type": "number" + } + }, + "required": [ + "last_updated", + "timeframe", + "ticker", + "change_to_break_even" + ], + "type": "object", + "x-polygon-go-type": { + "name": "UnderlyingAsset" + } + } + }, + "required": [ + "day", + "last_quote", + "underlying_asset", + "details", + "break_even_price", + "implied_volatility", + "open_interest" + ], + "type": "object", + "x-polygon-go-type": { + "name": "OptionSnapshotResult" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + }, + "text/csv": { + "schema": { + "example": "break_even_price,day_close,day_high,day_last_updated,day_low,day_open,day_previous_close,day_volume,day_vwap,day_change,day_change_percent,details_contract_type,details_exercise_style,details_expiration_date,details_shares_per_contract,details_strike_price,details_ticker,greeks_delta,greeks_gamma,greeks_theta,greeks_vega,implied_volatility,last_quote_ask,last_quote_ask_size,last_quote_bid,last_quote_bid_size,last_quote_last_updated,last_quote_midpoint,last_quote_timeframe,open_interest,underlying_asset_change_to_break_even,underlying_asset_last_updated,underlying_asset_price,underlying_asset_ticker,underlying_asset_timeframe\n0,171.075,21.4,22.49,1636520400000000000,21.35,22.49,22.45,37,21.6741,-1.05,-4.67,call,american,2023-06-16,100,150,O:AAPL230616C00150000,0.5520187372272933,0.00706756515659829,-0.018532772783847958,0.7274811132998142,0.3048997097864957,21.25,110,20.9,172,1636573458756383500,21.075,REAL-TIME,8921,23.123999999999995,1636573459862384600,147.951,AAPL,REAL-TIME\n", + "type": "string" + } + } + }, + "description": "Snapshot of the option contract." } }, - "summary": "Trades", + "summary": "Option Contract", "tags": [ - "crypto:trades" + "options:snapshot" ], - "x-polygon-entitlement-data-type": { - "description": "Trade data", - "name": "trades" - }, - "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" - }, - "x-polygon-paginate": { - "limit": { - "max": 50000 - }, - "order": { - "default": "desc" + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" }, - "sort": { - "default": "timestamp", - "enum": [ - "timestamp" - ] + { + "description": "15 minute delayed data", + "name": "delayed" } + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" }, - "x-polygon-replaces": { - "date": 1654056060000, - "replaces": { + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + } + }, + "/v3/trades/{cryptoTicker}": { + "get": { + "description": "Get trades for a crypto ticker symbol in a given time range.", + "operationId": "TradesCrypto", + "parameters": [ + { + "description": "The ticker symbol to get trades for.", + "example": "X:BTC-USD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Query by trade timestamp. Either a date with the format YYYY-MM-DD or a nanosecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 50000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 50000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "timestamp", + "enum": [ + "timestamp" + ], + "example": "timestamp", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v3/trades/X:BTC-USD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": [ + { + "conditions": [ + 1 + ], + "exchange": 1, + "id": "191450340", + "participant_timestamp": 1625097600103000000, + "price": 35060, + "size": 1.0434526 + }, + { + "conditions": [ + 2 + ], + "exchange": 1, + "id": "191450341", + "participant_timestamp": 1625097600368000000, + "price": 35059.99, + "size": 0.0058883 + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "results": { + "items": { + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "id": { + "description": "The Trade ID which uniquely identifies a trade on the exchange that the trade happened on.", + "type": "string" + }, + "participant_timestamp": { + "description": "The nanosecond Exchange Unix Timestamp. This is the timestamp of when the trade was generated at the exchange.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade in the base currency of the crypto pair.", + "format": "double", + "type": "number" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "conditions,exchange,id,participant_timestamp,price,size\n1,1,191450340,1625097600103000000,35060,1.0434526\n2,1,191450341,1625097600368000000,35059.99,0.0058883\n", + "schema": { + "type": "string" + } + } + }, + "description": "A list of trades." + } + }, + "summary": "Trades", + "tags": [ + "crypto:trades" + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + }, + "x-polygon-paginate": { + "limit": { + "max": 50000 + }, + "order": { + "default": "desc" + }, + "sort": { + "default": "timestamp", + "enum": [ + "timestamp" + ] + } + }, + "x-polygon-replaces": { + "date": 1654056060000, + "replaces": { "name": "Historic Crypto Trades", "path": "get_v1_historic_crypto__from___to___date" } @@ -27378,619 +27201,60 @@ } }, "type": "object" - }, - "cash_flow_statement": { - "description": "Cash flow statement.\nNote that the keys in this object can be any of the cash flow statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", - "type": "object" - }, - "comprehensive_income": { - "description": "Comprehensive income.\nNote that the keys in this object can be any of the comprehensive income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", - "type": "object" - }, - "income_statement": { - "description": "Income statement.\nNote that the keys in this object can be any of the income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", - "type": "object" - } - }, - "type": "object" - }, - "fiscal_period": { - "description": "Fiscal period of the report according to the company (Q1, Q2, Q3, Q4, or FY).", - "type": "string" - }, - "fiscal_year": { - "description": "Fiscal year of the report according to the company.", - "type": "string" - }, - "source_filing_file_url": { - "description": "The URL of the specific XBRL instance document within the SEC filing that these financials were derived from." - }, - "source_filing_url": { - "description": "The URL of the SEC filing that these financials were derived from.", - "type": "string" - }, - "start_date": { - "description": "The start date of the period that these financials cover in YYYYMMDD format.", - "type": "string" - } - }, - "required": [ - "reporting_period", - "cik", - "company_name", - "financials", - "fiscal_period", - "fiscal_year", - "filing_type", - "source_filing_url", - "source_filing_file_url" - ], - "type": "object", - "x-polygon-go-type": { - "name": "ResolvedFinancials", - "path": "github.com/polygon-io/go-app-api-financials/extract" - } - }, - "type": "array" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - } - }, - "required": [ - "status", - "request_id", - "count", - "results" - ], - "type": "object" - } - } - }, - "description": "FIXME" - } - }, - "summary": "Stock Financials vX", - "tags": [ - "reference:stocks" - ], - "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" - }, - "x-polygon-experimental": {}, - "x-polygon-paginate": { - "limit": { - "default": 10, - "max": 100 - }, - "sort": { - "default": "period_of_report_date", - "enum": [ - "filing_date", - "period_of_report_date" - ] - } - } - } - }, - "/vX/reference/tickers/{id}/events": { - "get": { - "description": "Get a timeline of events for the entity associated with the given ticker, CUSIP, or Composite FIGI.", - "operationId": "GetEvents", - "parameters": [ - { - "description": "Identifier of an asset. This can currently be a Ticker, CUSIP, or Composite FIGI.\nWhen given a ticker, we return events for the entity currently represented by that ticker.\nTo find events for entities previously associated with a ticker, find the relevant identifier using the \n[Ticker Details Endpoint](https://polygon.io/docs/stocks/get_v3_reference_tickers__ticker)", - "example": "META", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "A comma-separated list of the types of event to include. Currently ticker_change is the only supported event_type.\nLeave blank to return all supported event_types.", - "in": "query", - "name": "types", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", - "results": { - "events": [ - { - "date": "2022-06-09", - "ticker_change": { - "ticker": "META" - }, - "type": "ticker_change" - }, - { - "date": "2012-05-18", - "ticker_change": { - "ticker": "FB" - }, - "type": "ticker_change" - } - ], - "name": "Meta Platforms, Inc. Class A Common Stock" - }, - "status": "OK" - }, - "schema": { - "properties": { - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - }, - "results": { - "properties": { - "events": { - "items": { - "oneOf": [ - { - "properties": { - "date": { - "description": "The date the event took place", - "format": "date", - "type": "string" - }, - "event_type": { - "description": "The type of historical event for the asset", - "type": "string" - }, - "ticker_change": { - "properties": { - "ticker": { - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "event_type", - "date" - ], - "type": "object" - } - ] - }, - "type": "array" - }, - "name": { - "type": "string" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "EventsResults" - } - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - } - }, - "type": "object" - } - } - }, - "description": "Ticker Events." - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" - } - }, - "summary": "Ticker Events", - "tags": [ - "reference:tickers:get" - ], - "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" - }, - "x-polygon-experimental": {} - } - }, - "/vX/snapshot/options/{underlyingAsset}/{optionContract}": { - "get": { - "description": "Get the snapshot of an option contract for a stock equity.", - "operationId": "OptionContract", - "parameters": [ - { - "description": "The underlying ticker symbol of the option contract.", - "example": "AAPL", - "in": "path", - "name": "underlyingAsset", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The option contract identifier.", - "example": "O:AAPL230616C00150000", - "in": "path", - "name": "optionContract", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "request_id": "d9ff18dac69f55c218f69e4753706acd", - "results": { - "break_even_price": 171.075, - "day": { - "change": -1.05, - "change_percent": -4.67, - "close": 21.4, - "high": 22.49, - "last_updated": 1636520400000000000, - "low": 21.35, - "open": 22.49, - "previous_close": 22.45, - "volume": 37, - "vwap": 21.6741 - }, - "details": { - "contract_type": "call", - "exercise_style": "american", - "expiration_date": "2023-06-16", - "shares_per_contract": 100, - "strike_price": 150, - "ticker": "O:AAPL230616C00150000" - }, - "greeks": { - "delta": 0.5520187372272933, - "gamma": 0.00706756515659829, - "theta": -0.018532772783847958, - "vega": 0.7274811132998142 - }, - "implied_volatility": 0.3048997097864957, - "last_quote": { - "ask": 21.25, - "ask_size": 110, - "bid": 20.9, - "bid_size": 172, - "last_updated": 1636573458756383500, - "midpoint": 21.075, - "timeframe": "REAL-TIME" - }, - "open_interest": 8921, - "underlying_asset": { - "change_to_break_even": 23.123999999999995, - "last_updated": 1636573459862384600, - "price": 147.951, - "ticker": "AAPL", - "timeframe": "REAL-TIME" - } - }, - "status": "OK" - }, - "schema": { - "properties": { - "next_url": { - "description": "If present, this value can be used to fetch the next page of data.", - "type": "string" - }, - "request_id": { - "type": "string" - }, - "results": { - "properties": { - "break_even_price": { - "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", - "format": "double", - "type": "number" - }, - "day": { - "description": "The most recent daily bar for this contract.", - "properties": { - "change": { - "description": "The value of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" - }, - "change_percent": { - "description": "The percent of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" - }, - "close": { - "description": "The closing price for the contract of the day.", - "format": "double", - "type": "number" - }, - "high": { - "description": "The highest price for the contract of the day.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "low": { - "description": "The lowest price for the contract of the day.", - "format": "double", - "type": "number" - }, - "open": { - "description": "The open price for the contract of the day.", - "format": "double", - "type": "number" - }, - "previous_close": { - "description": "The closing price for the contract of previous trading day.", - "format": "double", - "type": "number" - }, - "volume": { - "description": "The trading volume for the contract of the day.", - "format": "double", - "type": "number" - }, - "vwap": { - "description": "The trading volume weighted average price for the contract of the day.", - "format": "double", - "type": "number", - "x-polygon-go-id": "VWAP" - } - }, - "required": [ - "last_updated", - "open", - "high", - "low", - "close", - "previous_close", - "volume", - "vwap", - "change_percent", - "change" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Day" - } - }, - "details": { - "properties": { - "contract_type": { - "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", - "enum": [ - "put", - "call", - "other" - ], - "type": "string" - }, - "exercise_style": { - "description": "The exercise style of this contract. See this link for more details on exercise styles.", - "enum": [ - "american", - "european", - "bermudan" - ], - "type": "string" - }, - "expiration_date": { - "description": "The contract's expiration date in YYYY-MM-DD format.", - "format": "date", - "type": "string", - "x-polygon-go-type": { - "name": "IDaysPolygonDateString", - "path": "github.com/polygon-io/ptime" - } - }, - "shares_per_contract": { - "description": "The number of shares per contract for this contract.", - "type": "number" - }, - "strike_price": { - "description": "The strike price of the option contract.", - "format": "double", - "type": "number" - }, - "ticker": { - "description": "The ticker for the option contract.", - "type": "string" - } - }, - "required": [ - "ticker", - "contract_type", - "exercise_style", - "expiration_date", - "shares_per_contract", - "strike_price" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Details" - } - }, - "greeks": { - "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", - "properties": { - "delta": { - "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", - "format": "double", - "type": "number" - }, - "gamma": { - "description": "The change in delta per $0.01 change in the price of the underlying asset.", - "format": "double", - "type": "number" - }, - "theta": { - "description": "The change in the option's price per day.", - "format": "double", - "type": "number" - }, - "vega": { - "description": "The change in the option's price per 1% increment in volatility.", - "format": "double", - "type": "number" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "Greeks" - } - }, - "implied_volatility": { - "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", - "format": "double", - "type": "number" - }, - "last_quote": { - "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "ask_size": { - "description": "The ask size.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "bid_size": { - "description": "The bid size.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" - } - }, - "midpoint": { - "description": "The average of the bid and ask price.", - "format": "double", - "type": "number" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" - } - }, - "required": [ - "last_updated", - "timeframe", - "ask", - "ask_size", - "bid_size", - "bid", - "midpoint" - ], - "type": "object", - "x-polygon-go-type": { - "name": "LastQuote" - } - }, - "open_interest": { - "description": "The quantity of this contract held at the end of the last trading day.", - "format": "double", - "type": "number" - }, - "underlying_asset": { - "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", - "properties": { - "change_to_break_even": { - "description": "The change in price for the contract to break even.", - "format": "double", - "type": "number" - }, - "last_updated": { - "description": "The nanosecond timestamp of when this information was updated.", - "format": "int64", - "type": "integer", - "x-polygon-go-type": { - "name": "INanoseconds", - "path": "github.com/polygon-io/ptime" + }, + "cash_flow_statement": { + "description": "Cash flow statement.\nNote that the keys in this object can be any of the cash flow statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "type": "object" + }, + "comprehensive_income": { + "description": "Comprehensive income.\nNote that the keys in this object can be any of the comprehensive income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "type": "object" + }, + "income_statement": { + "description": "Income statement.\nNote that the keys in this object can be any of the income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "type": "object" } }, - "price": { - "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", - "format": "double", - "type": "number" - }, - "ticker": { - "description": "The ticker symbol for the contract's underlying asset.", - "type": "string" - }, - "timeframe": { - "description": "The time relevance of the data.", - "enum": [ - "DELAYED", - "REAL-TIME" - ], - "type": "string" - } + "type": "object" }, - "required": [ - "last_updated", - "timeframe", - "ticker", - "price", - "change_to_break_even" - ], - "type": "object", - "x-polygon-go-type": { - "name": "UnderlyingAsset" + "fiscal_period": { + "description": "Fiscal period of the report according to the company (Q1, Q2, Q3, Q4, or FY).", + "type": "string" + }, + "fiscal_year": { + "description": "Fiscal year of the report according to the company.", + "type": "string" + }, + "source_filing_file_url": { + "description": "The URL of the specific XBRL instance document within the SEC filing that these financials were derived from." + }, + "source_filing_url": { + "description": "The URL of the SEC filing that these financials were derived from.", + "type": "string" + }, + "start_date": { + "description": "The start date of the period that these financials cover in YYYYMMDD format.", + "type": "string" } + }, + "required": [ + "reporting_period", + "cik", + "company_name", + "financials", + "fiscal_period", + "fiscal_year", + "filing_type", + "source_filing_url", + "source_filing_file_url" + ], + "type": "object", + "x-polygon-go-type": { + "name": "ResolvedFinancials", + "path": "github.com/polygon-io/go-app-api-financials/extract" } }, - "required": [ - "day", - "last_quote", - "underlying_asset", - "details", - "break_even_price", - "implied_volatility", - "open_interest" - ], - "type": "object", - "x-polygon-go-type": { - "name": "OptionSnapshotResult" - } + "type": "array" }, "status": { "description": "The status of this request's response.", @@ -27999,45 +27263,167 @@ }, "required": [ "status", - "request_id" + "request_id", + "count", + "results" ], "type": "object" } - }, - "text/csv": { - "schema": { - "example": "break_even_price,day_close,day_high,day_last_updated,day_low,day_open,day_previous_close,day_volume,day_vwap,day_change,day_change_percent,details_contract_type,details_exercise_style,details_expiration_date,details_shares_per_contract,details_strike_price,details_ticker,greeks_delta,greeks_gamma,greeks_theta,greeks_vega,implied_volatility,last_quote_ask,last_quote_ask_size,last_quote_bid,last_quote_bid_size,last_quote_last_updated,last_quote_midpoint,last_quote_timeframe,open_interest,underlying_asset_change_to_break_even,underlying_asset_last_updated,underlying_asset_price,underlying_asset_ticker,underlying_asset_timeframe\n0,171.075,21.4,22.49,1636520400000000000,21.35,22.49,22.45,37,21.6741,-1.05,-4.67,call,american,2023-06-16,100,150,O:AAPL230616C00150000,0.5520187372272933,0.00706756515659829,-0.018532772783847958,0.7274811132998142,0.3048997097864957,21.25,110,20.9,172,1636573458756383500,21.075,REAL-TIME,8921,23.123999999999995,1636573459862384600,147.951,AAPL,REAL-TIME\n", - "type": "string" - } } }, - "description": "Snapshot of the option contract." + "description": "FIXME" } }, - "summary": "Option Contract", + "summary": "Stock Financials vX", "tags": [ - "options:snapshot" + "reference:stocks" ], - "x-polygon-entitlement-allowed-timeframes": [ + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-experimental": {}, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 100 + }, + "sort": { + "default": "period_of_report_date", + "enum": [ + "filing_date", + "period_of_report_date" + ] + } + } + } + }, + "/vX/reference/tickers/{id}/events": { + "get": { + "description": "Get a timeline of events for the entity associated with the given ticker, CUSIP, or Composite FIGI.", + "operationId": "GetEvents", + "parameters": [ { - "description": "Real Time Data", - "name": "realtime" + "description": "Identifier of an asset. This can currently be a Ticker, CUSIP, or Composite FIGI.\nWhen given a ticker, we return events for the entity currently represented by that ticker.\nTo find events for entities previously associated with a ticker, find the relevant identifier using the \n[Ticker Details Endpoint](https://polygon.io/docs/stocks/get_v3_reference_tickers__ticker)", + "example": "META", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } }, { - "description": "15 minute delayed data", - "name": "delayed" + "description": "A comma-separated list of the types of event to include. Currently ticker_change is the only supported event_type.\nLeave blank to return all supported event_types.", + "in": "query", + "name": "types", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "results": { + "events": [ + { + "date": "2022-06-09", + "ticker_change": { + "ticker": "META" + }, + "type": "ticker_change" + }, + { + "date": "2012-05-18", + "ticker_change": { + "ticker": "FB" + }, + "type": "ticker_change" + } + ], + "name": "Meta Platforms, Inc. Class A Common Stock" + }, + "status": "OK" + }, + "schema": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "events": { + "items": { + "oneOf": [ + { + "properties": { + "date": { + "description": "The date the event took place", + "format": "date", + "type": "string" + }, + "event_type": { + "description": "The type of historical event for the asset", + "type": "string" + }, + "ticker_change": { + "properties": { + "ticker": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "event_type", + "date" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "EventsResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Ticker Events." + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" } + }, + "summary": "Ticker Events", + "tags": [ + "reference:tickers:get" ], "x-polygon-entitlement-data-type": { - "description": "Aggregate data", - "name": "aggregates" + "description": "Reference data", + "name": "reference" }, - "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" - } - }, - "x-polygon-draft": true + "x-polygon-experimental": {} + } } }, "security": [ diff --git a/.polygon/websocket.json b/.polygon/websocket.json index e28c338e..332d5555 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -312,6 +312,10 @@ "type": "integer", "description": "The Timestamp in Unix MS." }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which quote events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11). Values reset after each trading session/day.\n" + }, "z": { "type": "integer", "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq)." @@ -332,6 +336,7 @@ 604 ], "t": 1536036818784, + "q": 50385480, "z": 3 } } @@ -2321,6 +2326,10 @@ "type": "integer", "description": "The Timestamp in Unix MS." }, + "q": { + "type": "integer", + "description": "The sequence number represents the sequence in which quote events happened.\nThese are increasing and unique per ticker symbol, but will not always be\nsequential (e.g., 1, 2, 6, 9, 10, 11). Values reset after each trading session/day.\n" + }, "z": { "type": "integer", "description": "The tape. (1 = NYSE, 2 = AMEX, 3 = Nasdaq)." From 3e7d42bd7472cde02325af73c554bc52fcfb6210 Mon Sep 17 00:00:00 2001 From: Anthony Johnson <114414459+antdjohns@users.noreply.github.com> Date: Fri, 10 Mar 2023 19:55:42 -0800 Subject: [PATCH 218/448] restore DayOptionContractSnapshot position (#401) --- polygon/rest/models/common.py | 3 ++ polygon/rest/models/markets.py | 19 ++++++++ polygon/rest/models/snapshot.py | 44 +++++++++++++++++++ polygon/rest/models/tickers.py | 1 + polygon/rest/snapshot.py | 19 ++++++++ polygon/websocket/models/common.py | 2 + polygon/websocket/models/models.py | 19 +++++++- ...indices&ticker.any_of=SPX%2CAPx%2CAPy.json | 30 +++++++++++++ test_rest/test_snapshots.py | 35 +++++++++++++++ 9 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 test_rest/mocks/v3/snapshot/indices&ticker.any_of=SPX%2CAPx%2CAPy.json diff --git a/polygon/rest/models/common.py b/polygon/rest/models/common.py index e09c3e7e..5ab47c69 100644 --- a/polygon/rest/models/common.py +++ b/polygon/rest/models/common.py @@ -21,6 +21,7 @@ class Market(Enum): CRYPTO = "crypto" FX = "fx" OTC = "otc" + INDICES = "indices" class AssetClass(Enum): @@ -28,6 +29,7 @@ class AssetClass(Enum): OPTIONS = "options" CRYPTO = "crypto" FX = "fx" + INDICES = "indices" class DividendType(Enum): @@ -72,6 +74,7 @@ class SnapshotMarketType(Enum): STOCKS = "stocks" FOREX = "forex" CRYPTO = "crypto" + INDICES = "indices" class Timeframe(Enum): diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 541fec88..2192b2df 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -25,6 +25,24 @@ def from_dict(d): return MarketExchanges(**d) +@modelclass +class MarketIndices: + "Contains indices market status data." + s_and_p: Optional[str] = None + societe_generale: Optional[str] = None + msci: Optional[str] = None + ftse_russell: Optional[str] = None + mstar: Optional[str] = None + mstarc: Optional[str] = None + cccy: Optional[str] = None + nasdaq: Optional[str] = None + dow_jones: Optional[str] = None + + @staticmethod + def from_dict(d): + return MarketIndices(**d) + + @modelclass class MarketHoliday: "MarketHoliday contains data for upcoming market holidays and their open/close times." @@ -47,6 +65,7 @@ class MarketStatus: currencies: Optional[MarketCurrencies] = None early_hours: Optional[bool] = None exchanges: Optional[MarketExchanges] = None + indicesGroups: Optional[MarketIndices] = None market: Optional[str] = None server_time: Optional[str] = None diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 676becb9..89d3b511 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -31,6 +31,49 @@ def from_dict(d): ) +@modelclass +class IndicesSession: + "Contains data for the most recent daily bar in an options contract." + change: Optional[float] = None + change_percent: Optional[float] = None + close: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + open: Optional[float] = None + previous_close: Optional[float] = None + + @staticmethod + def from_dict(d): + return IndicesSession(**d) + + +@modelclass +class IndicesSnapshot: + value: Optional[float] = None + name: Optional[str] = None + type: Optional[str] = None + ticker: Optional[str] = None + market_status: Optional[str] = None + session: Optional[IndicesSession] = None + error: Optional[str] = None + message: Optional[str] = None + + @staticmethod + def from_dict(d): + return IndicesSnapshot( + value=d.get("value", None), + name=d.get("name", None), + type=d.get("type", None), + ticker=d.get("ticker", None), + market_status=d.get("market_status", None), + session=None + if "session" not in d + else IndicesSession.from_dict(d["session"]), + error=d.get("error", None), + message=d.get("message", None), + ) + + @modelclass class TickerSnapshot: "Contains the most up-to-date market data for all traded ticker symbols." @@ -132,6 +175,7 @@ class UnderlyingAsset: change_to_break_even: Optional[float] = None last_updated: Optional[int] = None price: Optional[float] = None + value: Optional[float] = None ticker: Optional[str] = None timeframe: Optional[str] = None diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 595c3a97..5fdd2add 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -64,6 +64,7 @@ class Ticker: share_class_figi: Optional[str] = None ticker: Optional[str] = None type: Optional[str] = None + source_feed: Optional[str] = None @staticmethod def from_dict(d): diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 54376a39..696f7379 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -6,6 +6,7 @@ OptionContractSnapshot, SnapshotMarketType, SnapshotTickerFullBook, + IndicesSnapshot, ) from urllib3 import HTTPResponse @@ -184,3 +185,21 @@ def get_snapshot_crypto_book( raw=raw, options=options, ) + + def get_snapshot_indices( + self, + ticker_any_of: Optional[Union[str, List[str]]] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[IndicesSnapshot], HTTPResponse]: + url = f"/v3/snapshot/indices" + + return self._get( + path=url, + params=self._get_params(self.get_snapshot_indices, locals()), + deserializer=IndicesSnapshot.from_dict, + raw=raw, + result_key="results", + options=options, + ) diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index b37573f7..5353c367 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -15,6 +15,7 @@ class Market(Enum): Options = "options" Forex = "forex" Crypto = "crypto" + Indices = "indices" class EventType(Enum): @@ -30,3 +31,4 @@ class EventType(Enum): Imbalances = "NOI" LimitUpLimitDown = "LULD" CryptoL2 = "XL2" + Value = "V" diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 63c35a05..9c68db39 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -5,7 +5,8 @@ @modelclass class EquityAgg: - "EquityAgg contains aggregate data for either stock tickers or option contracts." + """EquityAgg contains aggregate data for either stock tickers, option contracts or index tickers.""" + event_type: Optional[Union[str, EventType]] = None symbol: Optional[str] = None volume: Optional[float] = None @@ -307,6 +308,21 @@ def from_dict(d): ) +@modelclass +class IndexValue: + event_type: Optional[Union[str, EventType]] = None + value: Optional[float] = None + ticker: Optional[str] = None + timestamp: Optional[str] = None + + @staticmethod + def from_dict(d): + d.get("ev", None), + d.get("val", None), + d.get("T", None), + d.get("t", None) + + WebSocketMessage = NewType( "WebSocketMessage", List[ @@ -321,6 +337,7 @@ def from_dict(d): Imbalance, LimitUpLimitDown, Level2Book, + IndexValue, ] ], ) diff --git a/test_rest/mocks/v3/snapshot/indices&ticker.any_of=SPX%2CAPx%2CAPy.json b/test_rest/mocks/v3/snapshot/indices&ticker.any_of=SPX%2CAPx%2CAPy.json new file mode 100644 index 00000000..09ad9f12 --- /dev/null +++ b/test_rest/mocks/v3/snapshot/indices&ticker.any_of=SPX%2CAPx%2CAPy.json @@ -0,0 +1,30 @@ +{ + "results": [ + { + "value": 3822.39, + "name": "S&P 500", + "ticker": "SPX", + "type": "indices", + "market_status": "closed", + "session": { + "change": -50.01, + "change_percent": -1.45, + "close": 3822.39, + "high": 3834.41, + "low": 38217.11, + "open": 3827.38, + "previous_close": 3812.19 + } + }, + { + "ticker": "APx", + "error": "NOT_FOUND", + "message": "Ticker not found." + }, + { + "ticker": "APy", + "error": "NOT_ENTITLED", + "message": "Not entitled to this ticker." + } + ] +} \ No newline at end of file diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index 8051d398..072b5a09 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -12,6 +12,8 @@ Greeks, OptionDetails, DayOptionContractSnapshot, + IndicesSnapshot, + IndicesSession, ) from base import BaseTest @@ -283,3 +285,36 @@ def test_get_snapshot_crypto_book(self): updated=1605295074162, ) self.assertEqual(snapshots, expected) + + def test_get_snapshot_indices(self): + ticker_any_of = ["SPX", "APx", "APy"] + summary_results = self.c.get_snapshot_indices(ticker_any_of) + expected = [ + IndicesSnapshot( + value=3822.39, + name="S&P 500", + type="indices", + ticker="SPX", + market_status="closed", + session=IndicesSession( + change=-50.01, + change_percent=-1.45, + close=3822.39, + high=3834.41, + low=38217.11, + open=3827.38, + previous_close=3812.19, + ), + ), + IndicesSnapshot( + ticker="APx", + message="Ticker not found.", + error="NOT_FOUND", + ), + IndicesSnapshot( + ticker="APy", + error="NOT_ENTITLED", + message="Not entitled to this ticker.", + ), + ] + self.assertEqual(summary_results, expected) From bd42618dfd63ee3c2ae392c2cbdc0c57d052da69 Mon Sep 17 00:00:00 2001 From: Aaron Itzkovitz <19159499+aitzkovitz@users.noreply.github.com> Date: Mon, 13 Mar 2023 13:04:27 -0400 Subject: [PATCH 219/448] add last trade (#404) * add last trade * fmt * correctly parse snapshot --- polygon/rest/models/snapshot.py | 19 +++++++++++++++++++ test_rest/mocks/v3/snapshot/options/AAPL.json | 10 +++++++++- .../options/AAPL/O;AAPL230616C00150000.json | 10 +++++++++- test_rest/test_snapshots.py | 17 +++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 89d3b511..f1905f22 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -156,6 +156,21 @@ def from_dict(d): return LastQuoteOptionContractSnapshot(**d) +@modelclass +class LastTradeOptionContractSnapshot: + "Contains data for the most recent trade for an options contract." + price: Optional[float] = None + sip_timestamp: Optional[int] = None + size: Optional[int] = None + conditions: Optional[List[int]] = None + exchange: Optional[int] = None + timeframe: Optional[str] = None + + @staticmethod + def from_dict(d): + return LastTradeOptionContractSnapshot(**d) + + @modelclass class Greeks: "Contains data for the greeks in an options contract." @@ -193,6 +208,7 @@ class OptionContractSnapshot: greeks: Optional[Greeks] = None implied_volatility: Optional[float] = None last_quote: Optional[LastQuoteOptionContractSnapshot] = None + last_trade: Optional[LastTradeOptionContractSnapshot] = None open_interest: Optional[float] = None underlying_asset: Optional[UnderlyingAsset] = None @@ -211,6 +227,9 @@ def from_dict(d): last_quote=None if "last_quote" not in d else LastQuoteOptionContractSnapshot.from_dict(d["last_quote"]), + last_trade=None + if "last_trade" not in d + else LastTradeOptionContractSnapshot.from_dict(d["last_trade"]), open_interest=d.get("open_interest", None), underlying_asset=None if "underlying_asset" not in d diff --git a/test_rest/mocks/v3/snapshot/options/AAPL.json b/test_rest/mocks/v3/snapshot/options/AAPL.json index 677b39ea..de91e5d7 100644 --- a/test_rest/mocks/v3/snapshot/options/AAPL.json +++ b/test_rest/mocks/v3/snapshot/options/AAPL.json @@ -39,6 +39,14 @@ "midpoint": 29.075, "timeframe": "REAL-TIME" }, + "last_trade":{ + "price": 29.25, + "sip_timestamp": 1678718527714665700, + "size": 1, + "conditions": [209], + "exchange": 309, + "timeframe": "REAL-TIME" + }, "open_interest": 8133, "underlying_asset": { "change_to_break_even": 19.11439999999999, @@ -49,4 +57,4 @@ } }], "status": "OK" -} \ No newline at end of file +} diff --git a/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json b/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json index da4210f8..81e4aab2 100644 --- a/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json +++ b/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json @@ -38,6 +38,14 @@ "midpoint": 29.075, "timeframe": "REAL-TIME" }, + "last_trade":{ + "price": 29.25, + "sip_timestamp": 1678718527714665700, + "size": 1, + "conditions": [209], + "exchange": 309, + "timeframe": "REAL-TIME" + }, "open_interest": 8133, "underlying_asset": { "change_to_break_even": 19.11439999999999, @@ -48,4 +56,4 @@ } }, "status": "OK" -} \ No newline at end of file +} diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index 072b5a09..4ae72f8a 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -9,6 +9,7 @@ OrderBookQuote, UnderlyingAsset, LastQuoteOptionContractSnapshot, + LastTradeOptionContractSnapshot, Greeks, OptionDetails, DayOptionContractSnapshot, @@ -201,6 +202,14 @@ def test_get_snapshot_option(self): midpoint=29.075, timeframe="REAL-TIME", ), + last_trade=LastTradeOptionContractSnapshot( + price=29.25, + sip_timestamp=1678718527714665700, + size=1, + conditions=[209], + exchange=309, + timeframe="REAL-TIME", + ), open_interest=8133, underlying_asset=UnderlyingAsset( change_to_break_even=19.11439999999999, @@ -253,6 +262,14 @@ def test_list_snapshot_options_chain(self): midpoint=29.075, timeframe="REAL-TIME", ), + last_trade=LastTradeOptionContractSnapshot( + price=29.25, + sip_timestamp=1678718527714665700, + size=1, + conditions=[209], + exchange=309, + timeframe="REAL-TIME", + ), open_interest=8133, underlying_asset=UnderlyingAsset( change_to_break_even=19.11439999999999, From 4b5a3ce005a399d49430cd67c69df566415e1967 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 20 Mar 2023 14:59:59 -0700 Subject: [PATCH 220/448] force gzip encoding (#407) --- polygon/rest/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 3885db18..69d06dde 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -41,6 +41,7 @@ def __init__( self.headers = { "Authorization": "Bearer " + self.API_KEY, + "Accept-Encoding": "gzip", "User-Agent": f"Polygon.io PythonClient/{version}", } From 98e155c4a1175f67ef8e628d718de77cc3d4c3bd Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 28 Mar 2023 07:36:19 -0700 Subject: [PATCH 221/448] Fix release pipeline (#413) In https://github.com/polygon-io/client-python/pull/395 we fixed a gitub action to support the poetry version that dependabot is using so we can parse the poetry.lock syntax. However, this broke the automated release pipeline to https://pypi.org/project/polygon-api-client/ since we needed to update it's ability to parse the new poetry.lock syntax too. --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 83f8b848..c95c628a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: with: python-version: "3.10" - name: Setup Poetry - uses: abatilo/actions-poetry@v2.0.0 + uses: abatilo/actions-poetry@v2 with: poetry-version: "1.1.13" - name: Configure Poetry From 9d077b84fa3b654bd6479d97577e7975f4e0683d Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 28 Mar 2023 07:50:03 -0700 Subject: [PATCH 222/448] Fix release pipelin (#414) In #395 and #413 we fixed a gitub action to support the poetry version that dependabot is using so we can parse the poetry.lock syntax. However, this broke the automated release pipeline to https://pypi.org/project/polygon-api-client/ since we needed to update it's ability to parse the new poetry.lock syntax too. The impact here is that we have not released 1.8.x. --- .github/workflows/release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c95c628a..c906b0d3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,8 +17,6 @@ jobs: python-version: "3.10" - name: Setup Poetry uses: abatilo/actions-poetry@v2 - with: - poetry-version: "1.1.13" - name: Configure Poetry run: poetry config pypi-token.pypi ${{ secrets.POETRY_HTTP_BASIC_PYPI_PASSWORD }} - name: Install pypi deps From f17881d0b7cbd685e499c9bac9888fe295fd139c Mon Sep 17 00:00:00 2001 From: Ricky Barillas <8647805+jbonzo@users.noreply.github.com> Date: Tue, 28 Mar 2023 11:23:28 -0400 Subject: [PATCH 223/448] Update spec since we added Indices docs (#408) --- .polygon/rest.json | 5011 +++++++++++++++++++++++++++------------ .polygon/websocket.json | 350 +++ 2 files changed, 3884 insertions(+), 1477 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index e38b495e..c1f8f557 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -128,6 +128,36 @@ "type": "boolean" } }, + "IndicesAggregateTimeFrom": { + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2023-03-10", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + "IndicesAggregateTimeTo": { + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2023-03-10", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + }, + "IndicesTickerPathParam": { + "description": "The ticker symbol of Index.", + "example": "I:SPX", + "in": "path", + "name": "indicesTicker", + "required": true, + "schema": { + "type": "string" + } + }, "LimitMax10000": { "description": "Limit the size of the response, max 10000.", "example": 100, @@ -274,6 +304,11 @@ "format": "double", "type": "number" }, + "CloseIndices": { + "description": "The close value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, "Company": { "properties": { "active": { @@ -2728,6 +2763,38 @@ "format": "double", "type": "number" }, + "HighIndices": { + "description": "The highest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "IndexAggsBase": { + "properties": { + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status", + "queryCount", + "resultsCount", + "request_id" + ], + "type": "object" + }, "Indicators": { "description": "The indicators. For more information, see our glossary of [Conditions and\nIndicators](https://polygon.io/glossary/us/stocks/conditions-indicators).\n", "items": { @@ -2736,6 +2803,154 @@ }, "type": "array" }, + "IndicesGroupedResults": { + "properties": { + "results": { + "items": { + "properties": { + "c": { + "description": "The close value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "o": { + "description": "The open value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "required": [ + "o", + "h", + "l", + "c", + "t" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "IndicesOpenClose": { + "properties": { + "afterHours": { + "description": "The close value of the ticker symbol in after hours trading.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The close value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The requested date.", + "format": "date", + "type": "string" + }, + "high": { + "description": "The highest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "low": { + "description": "The lowest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "preMarket": { + "description": "The open value of the ticker symbol in pre-market trading.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "required": [ + "status", + "from", + "symbol", + "open", + "high", + "low", + "close" + ], + "type": "object" + }, + "IndicesTickerResults": { + "properties": { + "results": { + "items": { + "properties": { + "c": { + "description": "The close value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + } + }, + "required": [ + "o", + "h", + "l", + "c", + "t" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, "Locales": { "properties": { "results": { @@ -2762,6 +2977,11 @@ "format": "double", "type": "number" }, + "LowIndices": { + "description": "The lowest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, "Map": { "description": "A mapping of the keys returned in the results to their descriptive name and data types.", "properties": { @@ -2963,6 +3183,11 @@ "format": "double", "type": "number" }, + "OpenIndices": { + "description": "The open value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, "PaginationHooksBase": { "properties": { "next_url": { @@ -5983,16 +6208,16 @@ }, "x-polygon-ignore": true }, - "/v1/indicators/ema/{optionsTicker}": { + "/v1/indicators/ema/{indicesTicker}": { "get": { "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "OptionsEMA", + "operationId": "IndicesEMA", "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "O:SPY241220P00720000", + "example": "I:SPX", "in": "path", - "name": "optionsTicker", + "name": "indicesTicker", "required": true, "schema": { "type": "string" @@ -6050,7 +6275,7 @@ } }, { - "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", + "description": "The value in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close values to \ncalculate the exponential moving average (EMA).", "example": "close", "in": "query", "name": "series_type", @@ -6136,16 +6361,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/I:SPX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678726291180?limit=35&sort=desc" }, "values": [ { - "timestamp": 1517562000016, - "value": 140.139 + "timestamp": 1678165200000, + "value": 4033.086001449211 } ] }, @@ -6275,12 +6500,6 @@ }, "type": "object" } - }, - "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,286.1730473491824 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,285.60990642465924 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,285.023780156278 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,284.4137303667383 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,282.43007426223943 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.7141043158811 O:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,286.0778649309446 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,283.77878058578887 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,283.11791448724966 O:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.7544192473781", - "schema": { - "type": "string" - } } }, "description": "Exponential Moving Average (EMA) data for each period." @@ -6288,29 +6507,29 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "options:aggregates" + "indices:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Indices data", + "name": "indices" } }, "x-polygon-ignore": true }, - "/v1/indicators/ema/{stockTicker}": { + "/v1/indicators/ema/{optionsTicker}": { "get": { "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", - "operationId": "EMA", + "operationId": "OptionsEMA", "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "AAPL", + "example": "O:SPY241220P00720000", "in": "path", - "name": "stockTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -6348,7 +6567,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -6454,11 +6673,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -6595,7 +6814,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.17972071441582\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,160.92194334973746\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,162.5721451116157\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,162.93345715698777\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,161.72552880161066\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,162.18657079351314\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.53481135582055\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,159.78118646009983\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,160.48735733602226\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,161.29590022115534\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,286.1730473491824 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,285.60990642465924 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,285.023780156278 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,284.4137303667383 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,282.43007426223943 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.7141043158811 O:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,286.0778649309446 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,283.77878058578887 O:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,283.11791448724966 O:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.7544192473781", "schema": { "type": "string" } @@ -6606,28 +6825,29 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "stocks:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Options data", + "name": "options" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/macd/{cryptoTicker}": { + "/v1/indicators/ema/{stockTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "CryptoMACD", + "description": "Get the exponential moving average (EMA) for a ticker symbol over a given time range.", + "operationId": "EMA", "parameters": [ { - "description": "The ticker symbol for which to get MACD data.", - "example": "X:BTC-USD", + "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "example": "AAPL", "in": "path", - "name": "cryptoTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -6665,37 +6885,27 @@ } }, { - "description": "The short window size used to calculate MACD data.", - "example": 12, + "description": "Whether or not the aggregates used to calculate the exponential moving average are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "example": true, "in": "query", - "name": "short_window", + "name": "adjusted", "schema": { - "default": 12, - "type": "integer" - } - }, - { - "description": "The long window size used to calculate MACD data.", - "example": 26, - "in": "query", - "name": "long_window", - "schema": { - "default": 26, - "type": "integer" + "default": true, + "type": "boolean" } }, { - "description": "The window size used to calculate the MACD signal line.", - "example": 9, + "description": "The window size used to calculate the exponential moving average (EMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, "in": "query", - "name": "signal_window", + "name": "window", "schema": { - "default": 9, + "default": 50, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate MACD data. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "description": "The price in the aggregate which will be used to calculate the exponential moving average. i.e. 'close' will result in using close prices to \ncalculate the exponential moving average (EMA).", "example": "close", "in": "query", "name": "series_type", @@ -6781,24 +6991,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/ema/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { - "histogram": 38.3801666667, - "signal": 106.9811666667, "timestamp": 1517562000016, - "value": 145.3613333333 - }, - { - "histogram": 41.098859136, - "signal": 102.7386283473, - "timestamp": 1517562001016, - "value": 143.8374874833 + "value": 140.139 } ] }, @@ -6893,22 +7095,6 @@ "values": { "items": { "properties": { - "histogram": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, - "signal": { - "description": "The indicator value for this period.", - "format": "float", - "type": "number", - "x-polygon-go-type": { - "name": "*float64" - } - }, "timestamp": { "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", "format": "int64", @@ -6934,7 +7120,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "MACDResults" + "name": "EMAResults" } }, "status": { @@ -6946,40 +7132,39 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,-200.79662915774315,-281.5009533935604,80.70432423581724\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,-264.55324270273195,-316.4388906203941,51.88564791766214\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,-317.75700272815084,-339.5909474061525,21.83394467800167\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,-350.23805379084297,-345.0494335756529,-5.188620215190042\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,-347.75055091027025,-343.7522785218554,-3.9982723884148754\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,-339.51740285673077,-342.7527104247516,3.2353075680208576\nX:BTCUSD,11337.77105153,19346.509,0,19527.23,19487.24,19640,18846.95,1664409600000,142239,,0,,0,0,0,0,0,false,1664409600000,-130.70646519456568,-232.81921860513586,102.11275341057018\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,-165.73322121465026,-258.3474069577784,92.61418574312813\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,-242.62960978099727,-301.6770344525147,59.04742467151743\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,-288.68772337443806,-329.4103025998096,40.72257922537153\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.17972071441582\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,160.92194334973746\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,162.5721451116157\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,162.93345715698777\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,161.72552880161066\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,162.18657079351314\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.53481135582055\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,159.78118646009983\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,160.48735733602226\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,161.29590022115534\n", "schema": { "type": "string" } } }, - "description": "Moving Average Convergence/Divergence (MACD) data for each period." + "description": "Exponential Moving Average (EMA) data for each period." } }, - "summary": "Moving Average Convergence/Divergence (MACD)", + "summary": "Exponential Moving Average (EMA)", "tags": [ - "crypto:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/macd/{fxTicker}": { + "/v1/indicators/macd/{cryptoTicker}": { "get": { "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "ForexMACD", + "operationId": "CryptoMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "C:EUR-USD", + "example": "X:BTC-USD", "in": "path", - "name": "fxTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -7016,16 +7201,6 @@ "type": "string" } }, - { - "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, { "description": "The short window size used to calculate MACD data.", "example": 12, @@ -7057,7 +7232,7 @@ } }, { - "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "description": "The price in the aggregate which will be used to calculate MACD data. i.e. 'close' will result in using close prices to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -7143,11 +7318,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -7308,7 +7483,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nC:USDAUD,687,1.5442,0,1.53763,1.5386983,1.5526022,1.537279,1664409600000,687,,0,,0,0,0,0,0,false,1664409600000,0.0160095063995076,0.016240853664654657,-0.0002313472651470569\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,0.019060448457087098,0.015690709670065223,0.0033697387870218753\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,0.017190795754692623,0.013971241529748895,0.003219554224943728\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,0.014349509127189686,0.010792069356789809,0.0035574397703998766\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,0.0169083298713677,0.016298690480941423,0.0006096393904262767\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,0.017968564486413374,0.016146280633334852,0.001822283853078522\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,0.018356408747553177,0.014848274973309752,0.0035081337742434247\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,0.016441299960100686,0.01316635297351296,0.0032749469865877255\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,0.015245524601038118,0.012347616226866026,0.002897908374172092\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,0.014947418239455779,0.011623139133323003,0.0033242791061327756\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,-200.79662915774315,-281.5009533935604,80.70432423581724\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,-264.55324270273195,-316.4388906203941,51.88564791766214\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,-317.75700272815084,-339.5909474061525,21.83394467800167\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,-350.23805379084297,-345.0494335756529,-5.188620215190042\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,-347.75055091027025,-343.7522785218554,-3.9982723884148754\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,-339.51740285673077,-342.7527104247516,3.2353075680208576\nX:BTCUSD,11337.77105153,19346.509,0,19527.23,19487.24,19640,18846.95,1664409600000,142239,,0,,0,0,0,0,0,false,1664409600000,-130.70646519456568,-232.81921860513586,102.11275341057018\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,-165.73322121465026,-258.3474069577784,92.61418574312813\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,-242.62960978099727,-301.6770344525147,59.04742467151743\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,-288.68772337443806,-329.4103025998096,40.72257922537153\n", "schema": { "type": "string" } @@ -7319,29 +7494,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "fx:aggregates" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Crypto data", + "name": "crypto" } }, "x-polygon-ignore": true }, - "/v1/indicators/macd/{optionsTicker}": { + "/v1/indicators/macd/{fxTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", - "operationId": "OptionsMACD", + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "ForexMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "O:SPY241220P00720000", + "example": "C:EUR-USD", "in": "path", - "name": "optionsTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -7505,11 +7680,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -7670,7 +7845,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,-0.05105556065990413,3.5771695836806834,-3.6282251443405875\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,4.047960862047148,5.247666286053219,-1.199705424006071\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,5.255380647906861,6.466477305754766,-1.2110966578479045\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,5.591072756938104,6.769251470216741,-1.178178713278637\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,1.4304642046162712,4.48422586976583,-3.053761665149559\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,4.32835898317461,5.547592642054737,-1.2192336588801274\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,4.623290999840208,5.852401056774768,-1.2291100569345605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,4.932483632022979,6.159678571008409,-1.2271949389854298\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,5.93821326327344,7.063796148536399,-1.1255828852629595\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,6.294916771166584,7.345191869852139,-1.050275098685555\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nC:USDAUD,687,1.5442,0,1.53763,1.5386983,1.5526022,1.537279,1664409600000,687,,0,,0,0,0,0,0,false,1664409600000,0.0160095063995076,0.016240853664654657,-0.0002313472651470569\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,0.019060448457087098,0.015690709670065223,0.0033697387870218753\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,0.017190795754692623,0.013971241529748895,0.003219554224943728\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,0.014349509127189686,0.010792069356789809,0.0035574397703998766\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,0.0169083298713677,0.016298690480941423,0.0006096393904262767\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,0.017968564486413374,0.016146280633334852,0.001822283853078522\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,0.018356408747553177,0.014848274973309752,0.0035081337742434247\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,0.016441299960100686,0.01316635297351296,0.0032749469865877255\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,0.015245524601038118,0.012347616226866026,0.002897908374172092\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,0.014947418239455779,0.011623139133323003,0.0033242791061327756\n", "schema": { "type": "string" } @@ -7681,29 +7856,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "options:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Forex data", + "name": "fx" } }, "x-polygon-ignore": true }, - "/v1/indicators/macd/{stockTicker}": { + "/v1/indicators/macd/{indicesTicker}": { "get": { - "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", - "operationId": "MACD", + "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", + "operationId": "IndicesMACD", "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "AAPL", + "example": "I:SPX", "in": "path", - "name": "stockTicker", + "name": "indicesTicker", "required": true, "schema": { "type": "string" @@ -7741,7 +7916,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -7781,7 +7956,7 @@ } }, { - "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", + "description": "The value in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close values to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -7867,24 +8042,24 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/I:SPX?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678726155743?limit=129&sort=desc" }, "values": [ { - "histogram": 38.3801666667, - "signal": 106.9811666667, - "timestamp": 1517562000016, - "value": 145.3613333333 + "histogram": 10.897861258863195, + "signal": -25.314340901212, + "timestamp": 1678168800000, + "value": -14.416479642348804 }, { - "histogram": 41.098859136, - "signal": 102.7386283473, - "timestamp": 1517562001016, - "value": 143.8374874833 + "histogram": 15.308854617117138, + "signal": -28.038806215927796, + "timestamp": 1678165200000, + "value": -12.729951598810658 } ] }, @@ -8030,12 +8205,6 @@ }, "type": "object" } - }, - "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,-5.413804946923619,-3.8291158739479005,-1.5846890729757188\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,-4.63165683097526,-3.098305244715017,-1.5333515862602427\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,-4.581291216131007,-2.7149673481499565,-1.86632386798105\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,-3.6311474313744156,-1.1648824074663984,-2.4662650239080173\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,-2.533545758578896,0.9308104167079131,-3.464356175286809\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,-4.771497049659786,-3.432943605703971,-1.3385534439558149\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,-4.349569413677017,-2.2483863811546936,-2.1011830325223233\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,-3.9559234852549707,-1.7230906230241128,-2.232832862230858\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,-3.2635802145105117,-0.548316151489394,-2.7152640630211176\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,-3.070742345502225,0.13049986426588545,-3.2012422097681106\n", - "schema": { - "type": "string" - } } }, "description": "Moving Average Convergence/Divergence (MACD) data for each period." @@ -8043,28 +8212,29 @@ }, "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "stocks:aggregates" + "indices:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Indices data", + "name": "indices" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/rsi/{cryptoTicker}": { + "/v1/indicators/macd/{optionsTicker}": { "get": { - "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "CryptoRSI", + "description": "Get moving average convergence/divergence (MACD) for a ticker symbol over a given time range.", + "operationId": "OptionsMACD", "parameters": [ { - "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "X:BTC-USD", + "description": "The ticker symbol for which to get MACD data.", + "example": "O:SPY241220P00720000", "in": "path", - "name": "cryptoTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -8102,17 +8272,47 @@ } }, { - "description": "The window size used to calculate the relative strength index (RSI). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 14, + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, "in": "query", - "name": "window", + "name": "adjusted", "schema": { - "default": 14, + "default": true, + "type": "boolean" + } + }, + { + "description": "The short window size used to calculate MACD data.", + "example": 12, + "in": "query", + "name": "short_window", + "schema": { + "default": 12, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "description": "The long window size used to calculate MACD data.", + "example": 26, + "in": "query", + "name": "long_window", + "schema": { + "default": 26, + "type": "integer" + } + }, + { + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -8198,16 +8398,24 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { + "histogram": 38.3801666667, + "signal": 106.9811666667, "timestamp": 1517562000016, - "value": 140.139 + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 } ] }, @@ -8302,6 +8510,22 @@ "values": { "items": { "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, "timestamp": { "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", "format": "int64", @@ -8327,7 +8551,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "RSIResults" + "name": "MACDResults" } }, "status": { @@ -8339,40 +8563,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,52.040915721136884\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,44.813590401722564\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,44.813590401722564\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,45.22751170711286\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,45.22751170711286\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,37.361825384231004\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,37.361825384231004\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,50.74235333598462\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,50.74235333598462\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,39.159457782344376\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,-0.05105556065990413,3.5771695836806834,-3.6282251443405875\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,4.047960862047148,5.247666286053219,-1.199705424006071\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,5.255380647906861,6.466477305754766,-1.2110966578479045\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,5.591072756938104,6.769251470216741,-1.178178713278637\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,1.4304642046162712,4.48422586976583,-3.053761665149559\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,4.32835898317461,5.547592642054737,-1.2192336588801274\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,4.623290999840208,5.852401056774768,-1.2291100569345605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,4.932483632022979,6.159678571008409,-1.2271949389854298\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,5.93821326327344,7.063796148536399,-1.1255828852629595\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,6.294916771166584,7.345191869852139,-1.050275098685555\n", "schema": { "type": "string" } } }, - "description": "Relative strength index data for each period." + "description": "Moving Average Convergence/Divergence (MACD) data for each period." } }, - "summary": "Relative Strength Index (RSI)", + "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "crpyto:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Options data", + "name": "options" } }, "x-polygon-ignore": true }, - "/v1/indicators/rsi/{fxTicker}": { + "/v1/indicators/macd/{stockTicker}": { "get": { - "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "ForexRSI", + "description": "Get moving average convergence/divergence (MACD) data for a ticker symbol over a given time range.", + "operationId": "MACD", "parameters": [ { - "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "C:EUR-USD", + "description": "The ticker symbol for which to get MACD data.", + "example": "AAPL", "in": "path", - "name": "fxTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -8410,7 +8634,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the MACD are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -8420,17 +8644,37 @@ } }, { - "description": "The window size used to calculate the relative strength index (RSI).", - "example": 14, + "description": "The short window size used to calculate MACD data.", + "example": 12, "in": "query", - "name": "window", + "name": "short_window", "schema": { - "default": 14, + "default": 12, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", + "description": "The long window size used to calculate MACD data.", + "example": 26, + "in": "query", + "name": "long_window", + "schema": { + "default": 26, + "type": "integer" + } + }, + { + "description": "The window size used to calculate the MACD signal line.", + "example": 9, + "in": "query", + "name": "signal_window", + "schema": { + "default": 9, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the MACD. i.e. 'close' will result in using close prices to \ncalculate the MACD.", "example": "close", "in": "query", "name": "series_type", @@ -8516,16 +8760,24 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { + "histogram": 38.3801666667, + "signal": 106.9811666667, "timestamp": 1517562000016, - "value": 140.139 + "value": 145.3613333333 + }, + { + "histogram": 41.098859136, + "signal": 102.7386283473, + "timestamp": 1517562001016, + "value": 143.8374874833 } ] }, @@ -8620,6 +8872,22 @@ "values": { "items": { "properties": { + "histogram": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, + "signal": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + }, "timestamp": { "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", "format": "int64", @@ -8645,7 +8913,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "RSIResults" + "name": "MACDResults" } }, "status": { @@ -8657,40 +8925,39 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,65.97230488287764\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,79.3273623194404\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,79.32736231944038\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,74.64770184023104\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,64.43214811875563\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,64.43214811875563\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,81.95981214984681\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,81.95981214984683\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,74.64770184023104\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,74.98028072374902\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value,signal,histogram\nAAPL,1.27842348E+08,142.9013,0,146.1,142.48,146.72,140.68,1664424000000,1061605,,0,,0,0,0,0,0,false,1664424000000,-5.413804946923619,-3.8291158739479005,-1.5846890729757188\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,-4.63165683097526,-3.098305244715017,-1.5333515862602427\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,-4.581291216131007,-2.7149673481499565,-1.86632386798105\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,-3.6311474313744156,-1.1648824074663984,-2.4662650239080173\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,-2.533545758578896,0.9308104167079131,-3.464356175286809\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,-4.771497049659786,-3.432943605703971,-1.3385534439558149\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,-4.349569413677017,-2.2483863811546936,-2.1011830325223233\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,-3.9559234852549707,-1.7230906230241128,-2.232832862230858\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,-3.2635802145105117,-0.548316151489394,-2.7152640630211176\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,-3.070742345502225,0.13049986426588545,-3.2012422097681106\n", "schema": { "type": "string" } } }, - "description": "Relative strength index data for each period." + "description": "Moving Average Convergence/Divergence (MACD) data for each period." } }, - "summary": "Relative Strength Index (RSI)", + "summary": "Moving Average Convergence/Divergence (MACD)", "tags": [ - "fx:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/rsi/{optionsTicker}": { + "/v1/indicators/rsi/{cryptoTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "OptionsRSI", + "operationId": "CryptoRSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "O:SPY241220P00720000", + "example": "X:BTC-USD", "in": "path", - "name": "optionsTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -8728,17 +8995,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, - { - "description": "The window size used to calculate the relative strength index (RSI).", + "description": "The window size used to calculate the relative strength index (RSI). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", "example": 14, "in": "query", "name": "window", @@ -8834,11 +9091,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -8975,40 +9232,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,30.837887188419387\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,15.546598157051605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,88.61520575036505\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,52.040915721136884\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,44.813590401722564\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,44.813590401722564\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,45.22751170711286\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,45.22751170711286\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,37.361825384231004\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,37.361825384231004\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,50.74235333598462\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,50.74235333598462\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,39.159457782344376\n", "schema": { "type": "string" } } }, - "description": "Relative Strength Index (RSI) data for each period." + "description": "Relative strength index data for each period." } }, "summary": "Relative Strength Index (RSI)", "tags": [ - "options:aggregates" + "crpyto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Crypto data", + "name": "crypto" } }, "x-polygon-ignore": true }, - "/v1/indicators/rsi/{stockTicker}": { + "/v1/indicators/rsi/{fxTicker}": { "get": { "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", - "operationId": "RSI", + "operationId": "ForexRSI", "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "AAPL", + "example": "C:EUR-USD", "in": "path", - "name": "stockTicker", + "name": "fxTicker", "required": true, "schema": { "type": "string" @@ -9046,7 +9303,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -9152,11 +9409,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9293,39 +9550,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,23.065352237561996\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,29.877761913419718\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,29.58201330468151\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,30.233508748331047\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,19.857312489527956\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,32.18008680069761\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,28.71109953239781\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,31.140902927103383\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,32.21491128713248\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,35.950871523070575\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,65.97230488287764\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,79.3273623194404\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,79.32736231944038\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,74.64770184023104\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,64.43214811875563\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,64.43214811875563\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,81.95981214984681\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,81.95981214984683\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,74.64770184023104\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,74.98028072374902\n", "schema": { "type": "string" } } }, - "description": "Relative strength Index data for each period." + "description": "Relative strength index data for each period." } }, "summary": "Relative Strength Index (RSI)", "tags": [ - "stocks:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Forex data", + "name": "fx" } - } + }, + "x-polygon-ignore": true }, - "/v1/indicators/sma/{cryptoTicker}": { + "/v1/indicators/rsi/{indicesTicker}": { "get": { - "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "CryptoSMA", + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "IndicesRSI", "parameters": [ { - "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "X:BTC-USD", + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "I:SPX", "in": "path", - "name": "cryptoTicker", + "name": "indicesTicker", "required": true, "schema": { "type": "string" @@ -9363,17 +9621,27 @@ } }, { - "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 50, + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the relative strength index (RSI).", + "example": 14, "in": "query", "name": "window", "schema": { - "default": 50, + "default": 14, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "description": "The value in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close values to \ncalculate the relative strength index (RSI).", "example": "close", "in": "query", "name": "series_type", @@ -9459,38 +9727,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/I:SPX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "aggregates": [ - { - "c": 75.0875, - "h": 75.15, - "l": 73.7975, - "n": 1, - "o": 74.06, - "t": 1577941200000, - "v": 135647456, - "vw": 74.6099 - }, - { - "c": 74.3575, - "h": 75.145, - "l": 74.125, - "n": 1, - "o": 74.2875, - "t": 1578027600000, - "v": 146535512, - "vw": 74.7026 - } - ], - "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" }, "values": [ { - "timestamp": 1517562000016, - "value": 140.139 + "timestamp": 1678165200000, + "value": 82.621486402274 } ] }, @@ -9610,7 +9856,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "SMAResults" + "name": "RSIResults" } }, "status": { @@ -9620,42 +9866,36 @@ }, "type": "object" } - }, - "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", - "schema": { - "type": "string" - } } }, - "description": "Simple Moving Average (SMA) data for each period." + "description": "Relative Strength Index (RSI) data for each period." } }, - "summary": "Simple Moving Average (SMA)", + "summary": "Relative Strength Index (RSI)", "tags": [ - "crpyto:aggregates" + "indices:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Indices data", + "name": "indices" } }, "x-polygon-ignore": true }, - "/v1/indicators/sma/{fxTicker}": { + "/v1/indicators/rsi/{optionsTicker}": { "get": { - "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "ForexSMA", + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "OptionsRSI", "parameters": [ { - "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "C:EUR-USD", + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "O:SPY241220P00720000", "in": "path", - "name": "fxTicker", + "name": "optionsTicker", "required": true, "schema": { "type": "string" @@ -9693,7 +9933,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -9703,17 +9943,17 @@ } }, { - "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 50, + "description": "The window size used to calculate the relative strength index (RSI).", + "example": 14, "in": "query", "name": "window", "schema": { - "default": 50, + "default": 14, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", "example": "close", "in": "query", "name": "series_type", @@ -9799,33 +10039,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "aggregates": [ - { - "c": 75.0875, - "h": 75.15, - "l": 73.7975, - "n": 1, - "o": 74.06, - "t": 1577941200000, - "v": 135647456, - "vw": 74.6099 - }, - { - "c": 74.3575, - "h": 75.145, - "l": 74.125, - "n": 1, - "o": 74.2875, - "t": 1578027600000, - "v": 146535512, - "vw": 74.7026 - } - ], - "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -9950,7 +10168,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "SMAResults" + "name": "RSIResults" } }, "status": { @@ -9962,40 +10180,40 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,30.837887188419387\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,15.546598157051605\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,88.61520575036505\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,88.61520575036505\n", "schema": { "type": "string" } } }, - "description": "Simple Moving Average (SMA) data for each period." + "description": "Relative Strength Index (RSI) data for each period." } }, - "summary": "Simple Moving Average (SMA)", + "summary": "Relative Strength Index (RSI)", "tags": [ - "fx:aggregates" + "options:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Options data", + "name": "options" } }, "x-polygon-ignore": true }, - "/v1/indicators/sma/{optionsTicker}": { + "/v1/indicators/rsi/{stockTicker}": { "get": { - "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "OptionsSMA", + "description": "Get the relative strength index (RSI) for a ticker symbol over a given time range.", + "operationId": "RSI", "parameters": [ { - "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "O:SPY241220P00720000", + "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "example": "AAPL", "in": "path", - "name": "optionsTicker", + "name": "stockTicker", "required": true, "schema": { "type": "string" @@ -10033,7 +10251,7 @@ } }, { - "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "description": "Whether or not the aggregates used to calculate the relative strength index are adjusted for splits. By default, aggregates are adjusted. Set this to false to get results that are NOT adjusted for splits.", "example": true, "in": "query", "name": "adjusted", @@ -10043,17 +10261,17 @@ } }, { - "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", - "example": 50, + "description": "The window size used to calculate the relative strength index (RSI).", + "example": 14, "in": "query", "name": "window", "schema": { - "default": 50, + "default": 14, "type": "integer" } }, { - "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "description": "The price in the aggregate which will be used to calculate the relative strength index. i.e. 'close' will result in using close prices to \ncalculate the relative strength index (RSI).", "example": "close", "in": "query", "name": "series_type", @@ -10139,33 +10357,11 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/rsi/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "aggregates": [ - { - "c": 75.0875, - "h": 75.15, - "l": 73.7975, - "n": 1, - "o": 74.06, - "t": 1577941200000, - "v": 135647456, - "vw": 74.6099 - }, - { - "c": 74.3575, - "h": 75.145, - "l": 74.125, - "n": 1, - "o": 74.2875, - "t": 1578027600000, - "v": 146535512, - "vw": 74.7026 - } - ], - "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -10290,7 +10486,7 @@ }, "type": "object", "x-polygon-go-type": { - "name": "SMAResults" + "name": "RSIResults" } }, "status": { @@ -10302,40 +10498,39 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.0121999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,284.61099999999965\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,282.50919999999974\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,281.80859999999973\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,281.1079999999998\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.4949999999996\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,285.6801999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,285.31159999999966\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,283.9103999999997\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,283.2097999999997\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,23.065352237561996\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,29.877761913419718\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,29.58201330468151\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,30.233508748331047\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,19.857312489527956\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,32.18008680069761\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,28.71109953239781\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,31.140902927103383\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,32.21491128713248\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,35.950871523070575\n", "schema": { "type": "string" } } }, - "description": "Simple Moving Average (SMA) data for each period." + "description": "Relative strength Index data for each period." } }, - "summary": "Simple Moving Average (SMA)", + "summary": "Relative Strength Index (RSI)", "tags": [ - "options:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Options data", - "name": "options" + "description": "Stocks data", + "name": "stocks" } - }, - "x-polygon-ignore": true + } }, - "/v1/indicators/sma/{stockTicker}": { + "/v1/indicators/sma/{cryptoTicker}": { "get": { "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", - "operationId": "SMA", + "operationId": "CryptoSMA", "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "AAPL", + "example": "X:BTC-USD", "in": "path", - "name": "stockTicker", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -10372,16 +10567,6 @@ "type": "string" } }, - { - "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "default": true, - "type": "boolean" - } - }, { "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", "example": 50, @@ -10479,7 +10664,7 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/sma/X:BTCUSD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { @@ -10505,7 +10690,7 @@ "vw": 74.7026 } ], - "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + "url": "https://api.polygon.io/v2/aggs/ticker/X:BTCUSD/range/1/day/2003-01-01/2022-07-25" }, "values": [ { @@ -10642,7 +10827,7 @@ } }, "text/csv": { - "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,164.19240000000005\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,164.40360000000007\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,164.42680000000007\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,164.33300000000006\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,164.13680000000005\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,164.32100000000005\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,164.28180000000003\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,163.97960000000006\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.73900000000006\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.59020000000007\n", + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664164800000,297389,,0,,0,0,0,0,0,false,1664164800000,19846.01135387188\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664078400000,78936,,0,,0,0,0,0,0,false,1664078400000,19902.65703099573\nX:BTCUSD,4798.38258637,18914.0766,0,18928,18784.41,19184.3,18636,1664064000000,78936,,0,,0,0,0,0,0,false,1664064000000,19948.29976695474\nX:BTCUSD,15457.24362826,19317.486,0,19529.04,19475.84,19651.2772302,18846.67,1664409600000,191936,,0,,0,0,0,0,0,false,1664409600000,19751.714760699124\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664337600000,225076,,0,,0,0,0,0,0,false,1664337600000,19762.974955013375\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664251200000,183075,,0,,0,0,0,0,0,false,1664251200000,19791.86053850303\nX:BTCUSD,2868.09828007,19069.8521,0,19210.31,18925.87,19400,18805.1,1663992000000,58721,,0,,0,0,0,0,0,false,1663992000000,19995.805471728403\nX:BTCUSD,23180.93663313,19103.9189,0,19090,19416.20352522,19791,18461,1664323200000,225076,,0,,0,0,0,0,0,false,1664323200000,19777.128890923308\nX:BTCUSD,17479.00092209,19776.6697,0,19228.2,19141.78,20372.17374536,18821.55,1664236800000,183075,,0,,0,0,0,0,0,false,1664236800000,19818.394438033767\nX:BTCUSD,55188.33773657,18970.3019,0,18816.66899332,19165.98,19333,18690,1664150400000,297389,,0,,0,0,0,0,0,false,1664150400000,19873.767735662568\n", "schema": { "type": "string" } @@ -10653,170 +10838,162 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "stocks:aggregates" + "crpyto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Crypto data", + "name": "crypto" } - } + }, + "x-polygon-ignore": true }, - "/v1/last/crypto/{from}/{to}": { + "/v1/indicators/sma/{fxTicker}": { "get": { - "description": "Get the last trade tick for a cryptocurrency pair.", - "operationId": "LastTradeCrypto", + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "ForexSMA", "parameters": [ { - "description": "The \"from\" symbol of the pair.", - "example": "BTC", + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "C:EUR-USD", "in": "path", - "name": "from", + "name": "fxTicker", "required": true, "schema": { "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true } }, { - "description": "The \"to\" symbol of the pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], "type": "string" } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "last": { - "conditions": [ - 1 - ], - "exchange": 4, - "price": 16835.42, - "size": 0.006909, - "timestamp": 1605560885027 - }, - "request_id": "d2d779df015fe2b7fbb8e58366610ef7", - "status": "success", - "symbol": "BTC-USD" - }, - "schema": { - "properties": { - "last": { - "properties": { - "conditions": { - "description": "A list of condition codes.", - "items": { - "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", - "format": "int32", - "type": "integer" - }, - "type": "array", - "x-polygon-go-type": { - "name": "Int32Array" - } - }, - "exchange": { - "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.", - "type": "integer" - }, - "price": { - "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", - "format": "double", - "type": "number" - }, - "size": { - "description": "The size of a trade (also known as volume).", - "format": "double", - "type": "number" - }, - "timestamp": { - "description": "The Unix millisecond timestamp.", - "type": "integer", - "x-polygon-go-type": { - "name": "IMilliseconds", - "path": "github.com/polygon-io/ptime" - } - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastTradeCrypto" - } - }, - "request_id": { - "description": "A request id assigned by the server.", - "type": "string" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" - } - }, - "type": "object" - } - }, - "text/csv": { - "example": "conditions,exchange,price,size,timestamp\n1,4,16835.42,0.006909,1605560885027\n", - "schema": { - "type": "string" - } - } - }, - "description": "The last tick for this currency pair." }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Last Trade for a Crypto Pair", - "tags": [ - "crypto:last:trade" - ], - "x-polygon-entitlement-data-type": { - "description": "Trade data", - "name": "trades" - }, - "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" - } - } - }, - "/v1/last_quote/currencies/{from}/{to}": { - "get": { - "description": "Get the last quote tick for a forex currency pair.", - "operationId": "LastQuoteCurrencies", - "parameters": [ { - "description": "The \"from\" symbol of the pair.", - "example": "AUD", - "in": "path", - "name": "from", - "required": true, + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], "type": "string" } }, { - "description": "The \"to\" symbol of the pair.", - "example": "USD", - "in": "path", - "name": "to", - "required": true, + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", "schema": { "type": "string" } @@ -10827,112 +11004,1452 @@ "content": { "application/json": { "example": { - "last": { - "ask": 0.73124, - "bid": 0.73122, - "exchange": 48, - "timestamp": 1605557756000 + "next_url": "https://api.polygon.io/v1/indicators/sma/C:USDAUD?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/C:USDAUD/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] }, - "request_id": "a73a29dbcab4613eeaf48583d3baacf0", - "status": "success", - "symbol": "AUD/USD" + "status": "OK" }, "schema": { "properties": { - "last": { - "properties": { - "ask": { - "description": "The ask price.", - "format": "double", - "type": "number" - }, - "bid": { - "description": "The bid price.", - "format": "double", - "type": "number" - }, - "exchange": { - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", - "type": "integer" - }, - "timestamp": { - "description": "The Unix millisecond timestamp.", - "type": "integer", - "x-polygon-go-type": { - "name": "IMilliseconds", - "path": "github.com/polygon-io/ptime" - } - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "LastQuoteCurrencies" - } + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" }, "request_id": { "description": "A request id assigned by the server.", "type": "string" }, - "status": { - "description": "The status of this request's response.", - "type": "string" - }, - "symbol": { - "description": "The symbol pair that was evaluated from the request.", - "type": "string" - } - }, - "type": "object" - } - }, - "text/csv": { - "example": "ask,bid,exchange,timestamp\n0.73124,0.73122,48,1605557756000\n", - "schema": { - "type": "string" - } - } - }, - "description": "The last quote tick for this currency pair." - }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Last Quote for a Currency Pair", - "tags": [ - "fx:last:quote" - ], - "x-polygon-entitlement-data-type": { - "description": "NBBO data", - "name": "nbbo" - }, - "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" - } - } - }, - "/v1/marketstatus/now": { - "get": { - "description": "Get the current trading status of the exchanges and overall financial markets.\n", - "responses": { - "200": { - "content": { - "application/json": { - "example": { - "afterHours": true, - "currencies": { - "crypto": "open", - "fx": "open" - }, - "earlyHours": false, - "exchanges": { - "nasdaq": "extended-hours", - "nyse": "extended-hours", - "otc": "closed" - }, - "market": "extended-hours", - "serverTime": "2020-11-10T22:37:37.000Z" + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664323200000,685,,0,,0,0,0,0,0,false,1664323200000,1.4915199239999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664164800000,550,,0,,0,0,0,0,0,false,1664164800000,1.4863299679999997\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664078400000,10,,0,,0,0,0,0,0,false,1664078400000,1.4826388699999997\nC:USDAUD,686,1.5442,0,1.53763,1.5404,1.5526022,1.537279,1664409600000,686,,0,,0,0,0,0,0,false,1664409600000,1.4942168479999998\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664251200000,536,,0,,0,0,0,0,0,false,1664251200000,1.4900704799999993\nC:USDAUD,536,1.5459,0,1.5446162,1.5550165,1.5587,1.5364287,1664236800000,536,,0,,0,0,0,0,0,false,1664236800000,1.4882634499999994\nC:USDAUD,550,1.5405,0,1.5298,1.54531,1.5526263,1.5298,1664150400000,550,,0,,0,0,0,0,0,false,1664150400000,1.4845906159999998\nC:USDAUD,10,1.5312,0,1.5324261,1.53107,1.5326375,1.5301,1664064000000,10,,0,,0,0,0,0,0,false,1664064000000,1.4809719239999999\nC:USDAUD,1,1.5314,0,1.5313936,1.5313936,1.5313936,1.5313936,1663977600000,1,,0,,0,0,0,0,0,false,1663977600000,1.4794745239999998\nC:USDAUD,685,1.5537,0,1.5539533,1.5371372,1.5705737,1.5316281,1664337600000,685,,0,,0,0,0,0,0,false,1664337600000,1.4928357579999996\n", + "schema": { + "type": "string" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "fx:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/sma/{indicesTicker}": { + "get": { + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "IndicesSMA", + "parameters": [ + { + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "I:SPX", + "in": "path", + "name": "indicesTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The value in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close values to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/sma/I:SPX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" + }, + "values": [ + { + "timestamp": 1678165200000, + "value": 4035.913999999998 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "indices:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Indices data", + "name": "indices" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/sma/{optionsTicker}": { + "get": { + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "OptionsSMA", + "parameters": [ + { + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "O:SPY241220P00720000", + "in": "path", + "name": "optionsTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/sma/O:SPY241220P00720000?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/O:SPY241220P00720000/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649304000000,1,,0,,0,0,0,0,0,false,1649304000000,286.0121999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649131200000,1,,0,,0,0,0,0,0,false,1649131200000,284.61099999999965\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648699200000,1,,0,,0,0,0,0,0,false,1648699200000,282.50919999999974\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648612800000,1,,0,,0,0,0,0,0,false,1648612800000,281.80859999999973\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648526400000,1,,0,,0,0,0,0,0,false,1648526400000,281.1079999999998\nO:SPY241220P00720000,3,277.8267,0,277.82,277.83,277.83,277.82,1649649600000,2,,0,,0,0,0,0,0,false,1649649600000,285.4949999999996\nO:SPY241220P00720000,2,270.49,0,270.49,270.49,270.49,270.49,1649390400000,1,,0,,0,0,0,0,0,false,1649390400000,285.6801999999996\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649217600000,1,,0,,0,0,0,0,0,false,1649217600000,285.31159999999966\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1649044800000,1,,0,,0,0,0,0,0,false,1649044800000,283.9103999999997\nO:SPY241220P00720000,1,299.97,0,299.97,299.97,299.97,299.97,1648785600000,1,,0,,0,0,0,0,0,false,1648785600000,283.2097999999997\n", + "schema": { + "type": "string" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "options:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Options data", + "name": "options" + } + }, + "x-polygon-ignore": true + }, + "/v1/indicators/sma/{stockTicker}": { + "get": { + "description": "Get the simple moving average (SMA) for a ticker symbol over a given time range.", + "operationId": "SMA", + "parameters": [ + { + "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "example": "AAPL", + "in": "path", + "name": "stockTicker", + "required": true, + "schema": { + "type": "string" + }, + "x-polygon-go-id": "Ticker" + }, + { + "description": "Query by timestamp. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "in": "query", + "name": "timestamp", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true + } + }, + { + "description": "The size of the aggregate time window.", + "example": "day", + "in": "query", + "name": "timespan", + "schema": { + "default": "day", + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "Whether or not the aggregates used to calculate the simple moving average are adjusted for splits. By default, aggregates are adjusted.\nSet this to false to get results that are NOT adjusted for splits.", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "default": true, + "type": "boolean" + } + }, + { + "description": "The window size used to calculate the simple moving average (SMA). i.e. a window size of 10 with daily aggregates would result in a 10 day moving average.", + "example": 50, + "in": "query", + "name": "window", + "schema": { + "default": 50, + "type": "integer" + } + }, + { + "description": "The price in the aggregate which will be used to calculate the simple moving average. i.e. 'close' will result in using close prices to \ncalculate the simple moving average (SMA).", + "example": "close", + "in": "query", + "name": "series_type", + "schema": { + "default": "close", + "enum": [ + "open", + "high", + "low", + "close" + ], + "type": "string" + } + }, + { + "description": "Whether or not to include the aggregates used to calculate this indicator in the response.", + "in": "query", + "name": "expand_underlying", + "schema": { + "default": false, + "type": "boolean" + } + }, + { + "description": "The order in which to return the results, ordered by timestamp.", + "example": "desc", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 5000", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "maximum": 5000, + "type": "integer" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Search by timestamp.", + "in": "query", + "name": "timestamp.lt", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/v1/indicators/sma/AAPL?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "results": { + "underlying": { + "aggregates": [ + { + "c": 75.0875, + "h": 75.15, + "l": 73.7975, + "n": 1, + "o": 74.06, + "t": 1577941200000, + "v": 135647456, + "vw": 74.6099 + }, + { + "c": 74.3575, + "h": 75.145, + "l": 74.125, + "n": 1, + "o": 74.2875, + "t": 1578027600000, + "v": 146535512, + "vw": 74.7026 + } + ], + "url": "https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2003-01-01/2022-07-25" + }, + "values": [ + { + "timestamp": 1517562000016, + "value": 140.139 + } + ] + }, + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "properties": { + "underlying": { + "properties": { + "aggregates": { + "items": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "format": "float", + "type": "number" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "float", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "float", + "type": "number" + } + }, + "required": [ + "v", + "vw", + "o", + "c", + "h", + "l", + "t", + "n" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Aggregate", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "url": { + "description": "The URL which can be used to request the underlying aggregates used in this request.", + "type": "string" + } + }, + "type": "object" + }, + "values": { + "items": { + "properties": { + "timestamp": { + "description": "The Unix Msec timestamp from the last aggregate used in this calculation.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "IMicroseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "value": { + "description": "The indicator value for this period.", + "format": "float", + "type": "number", + "x-polygon-go-type": { + "name": "*float64" + } + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "SMAResults" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "aggregate_T,aggregate_v,aggregate_vw,aggregate_a,aggregate_o,aggregate_c,aggregate_h,aggregate_l,aggregate_t,aggregate_n,aggregate_m,aggregate_x,aggregate_g,aggregate_op,aggregate_z,aggregate_av,aggregate_s,aggregate_e,aggregate_otc,timestamp,value\nAAPL,1.27849501E+08,142.9012,0,146.1,142.48,146.72,140.68,1664424000000,1061692,,0,,0,0,0,0,0,false,1664424000000,164.19240000000005\nAAPL,1.46755122E+08,147.599,0,147.64,149.84,150.6414,144.84,1664337600000,1140818,,0,,0,0,0,0,0,false,1664337600000,164.40360000000007\nAAPL,8.4461761E+07,152.1354,0,152.74,151.76,154.72,149.945,1664251200000,683781,,0,,0,0,0,0,0,false,1664251200000,164.42680000000007\nAAPL,9.3339409E+07,151.5222,0,149.66,150.77,153.7701,149.64,1664164800000,747666,,0,,0,0,0,0,0,false,1664164800000,164.33300000000006\nAAPL,9.3308449E+07,156.1877,0,157.34,153.72,158.61,153.6,1663732800000,712645,,0,,0,0,0,0,0,false,1663732800000,164.13680000000005\nAAPL,9.6031641E+07,150.0222,0,151.19,150.43,151.47,148.56,1663905600000,766888,,0,,0,0,0,0,0,false,1663905600000,164.32100000000005\nAAPL,8.6651514E+07,152.5709,0,152.38,152.74,154.47,150.91,1663819200000,686866,,0,,0,0,0,0,0,false,1663819200000,164.28180000000003\nAAPL,1.07691097E+08,156.1317,0,153.4,156.9,158.08,153.08,1663646400000,792177,,0,,0,0,0,0,0,false,1663646400000,163.97960000000006\nAAPL,8.1599225E+07,152.5505,0,149.31,154.48,154.56,149.1,1663560000000,671961,,0,,0,0,0,0,0,false,1663560000000,163.73900000000006\nAAPL,1.64879031E+08,150.2387,0,151.21,150.7,151.35,148.37,1663300800000,850358,,0,,0,0,0,0,0,false,1663300800000,163.59020000000007\n", + "schema": { + "type": "string" + } + } + }, + "description": "Simple Moving Average (SMA) data for each period." + } + }, + "summary": "Simple Moving Average (SMA)", + "tags": [ + "stocks:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, + "/v1/last/crypto/{from}/{to}": { + "get": { + "description": "Get the last trade tick for a cryptocurrency pair.", + "operationId": "LastTradeCrypto", + "parameters": [ + { + "description": "The \"from\" symbol of the pair.", + "example": "BTC", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "last": { + "conditions": [ + 1 + ], + "exchange": 4, + "price": 16835.42, + "size": 0.006909, + "timestamp": 1605560885027 + }, + "request_id": "d2d779df015fe2b7fbb8e58366610ef7", + "status": "success", + "symbol": "BTC-USD" + }, + "schema": { + "properties": { + "last": { + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array", + "x-polygon-go-type": { + "name": "Int32Array" + } + }, + "exchange": { + "description": "The exchange that this crypto trade happened on. \nSee Exchanges for a mapping of exchanges to IDs.", + "type": "integer" + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "double", + "type": "number" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastTradeCrypto" + } + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "conditions,exchange,price,size,timestamp\n1,4,16835.42,0.006909,1605560885027\n", + "schema": { + "type": "string" + } + } + }, + "description": "The last tick for this currency pair." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Last Trade for a Crypto Pair", + "tags": [ + "crypto:last:trade" + ], + "x-polygon-entitlement-data-type": { + "description": "Trade data", + "name": "trades" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + } + }, + "/v1/last_quote/currencies/{from}/{to}": { + "get": { + "description": "Get the last quote tick for a forex currency pair.", + "operationId": "LastQuoteCurrencies", + "parameters": [ + { + "description": "The \"from\" symbol of the pair.", + "example": "AUD", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The \"to\" symbol of the pair.", + "example": "USD", + "in": "path", + "name": "to", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "last": { + "ask": 0.73124, + "bid": 0.73122, + "exchange": 48, + "timestamp": 1605557756000 + }, + "request_id": "a73a29dbcab4613eeaf48583d3baacf0", + "status": "success", + "symbol": "AUD/USD" + }, + "schema": { + "properties": { + "last": { + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "timestamp": { + "description": "The Unix millisecond timestamp.", + "type": "integer", + "x-polygon-go-type": { + "name": "IMilliseconds", + "path": "github.com/polygon-io/ptime" + } + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "LastQuoteCurrencies" + } + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "ask,bid,exchange,timestamp\n0.73124,0.73122,48,1605557756000\n", + "schema": { + "type": "string" + } + } + }, + "description": "The last quote tick for this currency pair." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Last Quote for a Currency Pair", + "tags": [ + "fx:last:quote" + ], + "x-polygon-entitlement-data-type": { + "description": "NBBO data", + "name": "nbbo" + }, + "x-polygon-entitlement-market-type": { + "description": "Forex data", + "name": "fx" + } + } + }, + "/v1/marketstatus/now": { + "get": { + "description": "Get the current trading status of the exchanges and overall financial markets.\n", + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "afterHours": true, + "currencies": { + "crypto": "open", + "fx": "open" + }, + "earlyHours": false, + "exchanges": { + "nasdaq": "extended-hours", + "nyse": "extended-hours", + "otc": "closed" + }, + "market": "extended-hours", + "serverTime": "2020-11-10T22:37:37.000Z" }, "schema": { "properties": { @@ -11326,30 +12843,149 @@ "type": "array" }, "symbol": { - "description": "The symbol pair that was evaluated from the request.", + "description": "The symbol pair that was evaluated from the request.", + "type": "string" + } + }, + "required": [ + "symbol", + "isUTC", + "day", + "open", + "close", + "openTrades", + "closingTrades" + ], + "type": "object" + } + }, + "text/csv": { + "example": "isUTC,day,open,close,openTrades,closingTrades\ntrue,2020-10-09,10932.44,11050.64,\"[{\\\"s\\\":0.002,\\\"p\\\":10932.44,\\\"x\\\":1,\\\"t\\\":1602201600056,\\\"c\\\":[2],\\\"i\\\":\\\"511235746\\\"},{\\\"s\\\":0.02,\\\"p\\\":10923.76,\\\"x\\\":4,\\\"t\\\":1602201600141,\\\"c\\\":[2],\\\"i\\\":\\\"511235751\\\"}]\",\"[{\\\"s\\\":0.006128,\\\"p\\\":11050.64,\\\"x\\\":4,\\\"t\\\":1602287999795,\\\"c\\\":[2],\\\"i\\\":\\\"973323250\\\"},{\\\"s\\\":0.014,\\\"p\\\":11049.4,\\\"x\\\":17,\\\"t\\\":1602287999659,\\\"c\\\":[1],\\\"i\\\":\\\"105717893\\\"}]\"\n", + "schema": { + "type": "string" + } + } + }, + "description": "The open/close of this symbol." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Daily Open/Close", + "tags": [ + "crypto:open-close" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + } + }, + "/v1/open-close/{indicesTicker}/{date}": { + "get": { + "description": "Get the open, close and afterhours values of a index symbol on a certain date.\n", + "parameters": [ + { + "description": "The ticker symbol of Index.", + "example": "I:SPX", + "in": "path", + "name": "indicesTicker", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The date of the requested open/close in the format YYYY-MM-DD.", + "example": "2023-03-10", + "in": "path", + "name": "date", + "required": true, + "schema": { + "format": "date", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "afterHours": "4,078.49", + "close": "4,045.64", + "from": "2023-01-09", + "high": "4,078.49", + "low": "4,051.82", + "open": "4,055.15", + "preMarket": "4,078.49", + "status": "OK", + "symbol": "SPX" + }, + "schema": { + "properties": { + "afterHours": { + "description": "The close value of the ticker symbol in after hours trading.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The close value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "from": { + "description": "The requested date.", + "format": "date", + "type": "string" + }, + "high": { + "description": "The highest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "low": { + "description": "The lowest value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open value for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "preMarket": { + "description": "The open value of the ticker symbol in pre-market trading.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "symbol": { + "description": "The exchange symbol that this item is traded under.", "type": "string" } }, "required": [ + "status", + "from", "symbol", - "isUTC", - "day", "open", - "close", - "openTrades", - "closingTrades" + "high", + "low", + "close" ], "type": "object" } - }, - "text/csv": { - "example": "isUTC,day,open,close,openTrades,closingTrades\ntrue,2020-10-09,10932.44,11050.64,\"[{\\\"s\\\":0.002,\\\"p\\\":10932.44,\\\"x\\\":1,\\\"t\\\":1602201600056,\\\"c\\\":[2],\\\"i\\\":\\\"511235746\\\"},{\\\"s\\\":0.02,\\\"p\\\":10923.76,\\\"x\\\":4,\\\"t\\\":1602201600141,\\\"c\\\":[2],\\\"i\\\":\\\"511235751\\\"}]\",\"[{\\\"s\\\":0.006128,\\\"p\\\":11050.64,\\\"x\\\":4,\\\"t\\\":1602287999795,\\\"c\\\":[2],\\\"i\\\":\\\"973323250\\\"},{\\\"s\\\":0.014,\\\"p\\\":11049.4,\\\"x\\\":17,\\\"t\\\":1602287999659,\\\"c\\\":[1],\\\"i\\\":\\\"105717893\\\"}]\"\n", - "schema": { - "type": "string" - } } }, - "description": "The open/close of this symbol." + "description": "The open/close of this stock symbol." }, "default": { "description": "Unexpected error" @@ -11357,15 +12993,15 @@ }, "summary": "Daily Open/Close", "tags": [ - "crypto:open-close" + "stocks:open-close" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Indices data", + "name": "indices" } } }, @@ -12373,14 +14009,237 @@ { "description": "Sort field used for ordering.", "in": "query", - "name": "sort", + "name": "sort", + "schema": { + "default": "sequence", + "enum": [ + "sequence", + "filename" + ], + "example": "sequence", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "description": "FIXME", + "example": {}, + "schema": { + "properties": { + "count": { + "type": "integer" + }, + "next_url": { + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "description": "File associated with the filing.\n\nThis provides information to uniquly identify the additional data and a URL\nwhere the file may be downloaded.", + "properties": { + "description": { + "description": "A description for the contents of the file.", + "type": "string" + }, + "filename": { + "description": "The name for the file.", + "type": "string" + }, + "id": { + "description": "An identifier unique to the filing for this data entry.", + "example": "1", + "type": "string" + }, + "sequence": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, + "type": "integer" + }, + "size_bytes": { + "description": "The size of the file in bytes.", + "format": "int64", + "type": "integer" + }, + "source_url": { + "description": "The source URL is a link back to the upstream source for this file.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "The type of document contained in the file.", + "type": "string" + } + }, + "required": [ + "id", + "file", + "description", + "type", + "size_bytes", + "sequence", + "source_url" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECFilingFile", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "type": "array" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "request_id", + "count", + "results" + ], + "type": "object" + } + } + }, + "description": "FIXME" + } + }, + "summary": "SEC Filing Files", + "tags": [ + "reference:sec:filing:files" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-paginate": { + "sort": { + "default": "sequence", + "enum": [ + "sequence", + "filename" + ] + } + } + }, + "x-polygon-draft": true + }, + "/v1/reference/sec/filings/{filing_id}/files/{file_id}": { + "get": { + "description": "Get filing file", + "operationId": "GetFilingFile", + "parameters": [ + { + "description": "Select by filing id.", + "in": "path", + "name": "filing_id", + "schema": { + "description": "Unique identifier for the filing.", + "type": "string" + } + }, + { + "description": "Select by file id.", + "in": "path", + "name": "file_id", + "schema": { + "description": "An identifier unique to the filing for this data entry.", + "example": "1", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "description": "File associated with the filing.\n\nThis provides information to uniquly identify the additional data and a URL\nwhere the file may be downloaded.", + "properties": { + "description": { + "description": "A description for the contents of the file.", + "type": "string" + }, + "filename": { + "description": "The name for the file.", + "type": "string" + }, + "id": { + "description": "An identifier unique to the filing for this data entry.", + "example": "1", + "type": "string" + }, + "sequence": { + "description": "File Sequence Number", + "format": "int64", + "max": 999, + "min": 1, + "type": "integer" + }, + "size_bytes": { + "description": "The size of the file in bytes.", + "format": "int64", + "type": "integer" + }, + "source_url": { + "description": "The source URL is a link back to the upstream source for this file.", + "format": "uri", + "type": "string" + }, + "type": { + "description": "The type of document contained in the file.", + "type": "string" + } + }, + "required": [ + "id", + "file", + "description", + "type", + "size_bytes", + "sequence", + "source_url" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECFilingFile", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + } + } + }, + "description": "The file data." + } + }, + "summary": "SEC Filing File", + "tags": [ + "reference:sec:filing:file" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + }, + "x-polygon-draft": true + }, + "/v1/summaries": { + "get": { + "description": "Get everything needed to visualize the tick-by-tick movement of a list of tickers.", + "operationId": "SnapshotSummary", + "parameters": [ + { + "description": "Comma separated list of tickers. This API currently supports Stocks/Equities, Crypto, Options, and Forex. See the tickers endpoint for more details on supported tickers. If no tickers are passed then no results will be returned.", + "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD", + "in": "query", + "name": "ticker.any_of", "schema": { - "default": "sequence", - "enum": [ - "sequence", - "filename" - ], - "example": "sequence", "type": "string" } } @@ -12389,222 +14248,563 @@ "200": { "content": { "application/json": { - "description": "FIXME", - "example": {}, - "schema": { - "properties": { - "count": { - "type": "integer" + "example": { + "request_id": "abc123", + "results": [ + { + "branding": { + "icon_url": "https://api.polygon.io/icon.png", + "logo_url": "https://api.polygon.io/logo.svg" + }, + "market_status": "closed", + "name": "Norwegian Cruise Lines", + "price": 22.3, + "session": { + "change": -1.05, + "change_percent": -4.67, + "close": 21.4, + "early_trading_change": -0.39, + "early_trading_change_percent": -0.07, + "high": 22.49, + "late_trading_change": 1.2, + "late_trading_change_percent": 3.92, + "low": 21.35, + "open": 22.49, + "previous_close": 22.45, + "volume": 37 + }, + "ticker": "NCLH", + "type": "stock" }, - "next_url": { - "type": "string" + { + "market_status": "closed", + "name": "NCLH $5 Call", + "options": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-10-14", + "shares_per_contract": 100, + "strike_price": 5, + "underlying_ticker": "NCLH" + }, + "price": 6.6, + "session": { + "change": -0.05, + "change_percent": -1.07, + "close": 6.65, + "early_trading_change": -0.01, + "early_trading_change_percent": -0.03, + "high": 7.01, + "late_trading_change": -0.4, + "late_trading_change_percent": -0.02, + "low": 5.42, + "open": 6.7, + "previous_close": 6.71, + "volume": 67 + }, + "ticker": "O:NCLH221014C00005000", + "type": "options" + }, + { + "market_status": "open", + "name": "Euro - United States Dollar", + "price": 0.97989, + "session": { + "change": -0.0001, + "change_percent": -0.67, + "close": 0.97989, + "high": 0.98999, + "low": 0.96689, + "open": 0.97889, + "previous_close": 0.98001 + }, + "ticker": "C:EURUSD", + "type": "fx" + }, + { + "branding": { + "icon_url": "https://api.polygon.io/icon.png", + "logo_url": "https://api.polygon.io/logo.svg" + }, + "market_status": "open", + "name": "Bitcoin - United States Dollar", + "price": 32154.68, + "session": { + "change": -201.23, + "change_percent": -0.77, + "close": 32154.68, + "high": 33124.28, + "low": 28182.88, + "open": 31129.32, + "previous_close": 33362.18 + }, + "ticker": "X:BTCUSD", + "type": "crypto" }, + { + "error": "NOT_FOUND", + "message": "Ticker not found.", + "ticker": "APx" + } + ], + "status": "OK" + }, + "schema": { + "properties": { "request_id": { "type": "string" }, "results": { "items": { - "description": "File associated with the filing.\n\nThis provides information to uniquly identify the additional data and a URL\nwhere the file may be downloaded.", "properties": { - "description": { - "description": "A description for the contents of the file.", + "branding": { + "properties": { + "icon_url": { + "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", + "type": "string" + }, + "logo_url": { + "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "Branding" + } + }, + "error": { + "description": "The error while looking for this ticker.", "type": "string" }, - "filename": { - "description": "The name for the file.", + "market_status": { + "description": "The market status for the market that trades this ticker.", "type": "string" }, - "id": { - "description": "An identifier unique to the filing for this data entry.", - "example": "1", + "message": { + "description": "The error message while looking for this ticker.", "type": "string" }, - "sequence": { - "description": "File Sequence Number", - "format": "int64", - "max": 999, - "min": 1, - "type": "integer" + "name": { + "description": "Name of ticker, forex, or crypto asset.", + "type": "string" }, - "size_bytes": { - "description": "The size of the file in bytes.", - "format": "int64", - "type": "integer" + "options": { + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See this link for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "format": "double", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract", + "format": "double", + "type": "number" + }, + "underlying_ticker": { + "description": "The ticker for the option contract.", + "type": "string" + } + }, + "required": [ + "contract_type", + "expiration_date", + "exercise_style", + "shares_per_contract", + "strike_price", + "underlying_ticker" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Options" + } + }, + "price": { + "description": "The most up to date ticker price.", + "format": "double", + "type": "number" + }, + "session": { + "properties": { + "change": { + "description": "The value of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "change_percent": { + "description": "The percent of the price change for the contract from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price for the asset of the day.", + "format": "double", + "type": "number" + }, + "early_trading_change": { + "description": "Today\u2019s early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", + "format": "double", + "type": "number" + }, + "early_trading_change_percent": { + "description": "Today\u2019s early trading change as a percentage.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price for the asset of the day.", + "format": "double", + "type": "number" + }, + "late_trading_change": { + "description": "Today\u2019s late trading change amount, difference between price and today\u2019s close if in late trading hours, otherwise difference between last price during late trading and today\u2019s close.", + "format": "double", + "type": "number" + }, + "late_trading_change_percent": { + "description": "Today\u2019s late trading change as a percentage.", + "format": "double", + "type": "number" + }, + "low": { + "description": "The lowest price for the asset of the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price for the asset of the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price for the asset of previous trading day.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the asset of the day.", + "format": "double", + "type": "number" + } + }, + "required": [ + "change", + "change_percent", + "close", + "high", + "low", + "open", + "previous_close" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Session" + } }, - "source_url": { - "description": "The source URL is a link back to the upstream source for this file.", - "format": "uri", + "ticker": { + "description": "Ticker of asset queried.", "type": "string" }, "type": { - "description": "The type of document contained in the file.", + "description": "The market for this ticker of stock, crypto, fx, option.", + "enum": [ + "stocks", + "crypto", + "options", + "fx" + ], "type": "string" } }, "required": [ - "id", - "file", - "description", + "ticker", + "name", + "price", + "branding", + "market_status", "type", - "size_bytes", - "sequence", - "source_url" + "session", + "options" ], "type": "object", "x-polygon-go-type": { - "name": "SECFilingFile", - "path": "github.com/polygon-io/go-lib-models/v2/globals" + "name": "SummaryResult" } }, "type": "array" }, "status": { + "description": "The status of this request's response.", "type": "string" } }, "required": [ "status", - "request_id", - "count", - "results" + "request_id" ], "type": "object" } } }, - "description": "FIXME" + "description": "Snapshot Summary for ticker list" + } + }, + "summary": "Summaries", + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Stocks data", + "name": "stocks" + } + } + }, + "/v2/aggs/grouped/locale/global/market/crypto/{date}": { + "get": { + "description": "Get the daily open, high, low, and close (OHLC) for the entire cryptocurrency markets.\n", + "parameters": [ + { + "description": "The beginning date for the aggregate window.", + "example": "2023-01-09", + "in": "path", + "name": "date", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, + "in": "query", + "name": "adjusted", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "adjusted": true, + "queryCount": 3, + "results": [ + { + "T": "X:ARDRUSD", + "c": 0.0550762, + "h": 0.0550762, + "l": 0.0550762, + "n": 18388, + "o": 0.0550762, + "t": 1580676480000, + "v": 2, + "vw": 0.0551 + }, + { + "T": "X:NGCUSD", + "c": 0.0272983, + "h": 0.0273733, + "l": 0.0272983, + "n": 18, + "o": 0.0273733, + "t": 1580674080000, + "v": 4734, + "vw": 0.0273 + }, + { + "T": "X:ZSCUSD", + "c": 0.00028531, + "h": 0.00028531, + "l": 0.00028531, + "n": 151, + "o": 0.00028531, + "t": 1580671080000, + "v": 390, + "vw": 0.0003 + } + ], + "resultsCount": 3, + "status": "OK" + }, + "schema": { + "allOf": [ + { + "properties": { + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], + "type": "object" + }, + { + "properties": { + "results": { + "items": { + "properties": { + "T": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + }, + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "vw": { + "description": "The volume weighted average price.", + "format": "double", + "type": "number" + } + }, + "required": [ + "o", + "h", + "l", + "c", + "v", + "t", + "T" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + }, + "text/csv": { + "example": "T,c,h,l,n,o,t,v,vw\nX:ARDRUSD,0.0550762,0.0550762,0.0550762,18388,0.0550762,1580676480000,2,0.0551\nX:NGCUSD,0.0272983,0.0273733,0.0272983,18,0.0273733,1580674080000,4734,0.0273\nX:ZSCUSD,0.00028531,0.00028531,0.00028531,151,0.00028531,1580671080000,390,0.0003\n", + "schema": { + "type": "string" + } + } + }, + "description": "The previous day OHLC for the ticker." + }, + "default": { + "description": "Unexpected error" } }, - "summary": "SEC Filing Files", + "summary": "Grouped Daily (Bars)", "tags": [ - "reference:sec:filing:files" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" + "description": "Aggregate data", + "name": "aggregates" }, - "x-polygon-paginate": { - "sort": { - "default": "sequence", - "enum": [ - "sequence", - "filename" - ] - } + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" } - }, - "x-polygon-draft": true + } }, - "/v1/reference/sec/filings/{filing_id}/files/{file_id}": { + "/v2/aggs/grouped/locale/global/market/fx/{date}": { "get": { - "description": "Get filing file", - "operationId": "GetFilingFile", + "description": "Get the daily open, high, low, and close (OHLC) for the entire forex markets.\n", "parameters": [ { - "description": "Select by filing id.", + "description": "The beginning date for the aggregate window.", + "example": "2023-01-09", "in": "path", - "name": "filing_id", + "name": "date", + "required": true, "schema": { - "description": "Unique identifier for the filing.", "type": "string" } }, { - "description": "Select by file id.", - "in": "path", - "name": "file_id", - "schema": { - "description": "An identifier unique to the filing for this data entry.", - "example": "1", - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "description": "File associated with the filing.\n\nThis provides information to uniquly identify the additional data and a URL\nwhere the file may be downloaded.", - "properties": { - "description": { - "description": "A description for the contents of the file.", - "type": "string" - }, - "filename": { - "description": "The name for the file.", - "type": "string" - }, - "id": { - "description": "An identifier unique to the filing for this data entry.", - "example": "1", - "type": "string" - }, - "sequence": { - "description": "File Sequence Number", - "format": "int64", - "max": 999, - "min": 1, - "type": "integer" - }, - "size_bytes": { - "description": "The size of the file in bytes.", - "format": "int64", - "type": "integer" - }, - "source_url": { - "description": "The source URL is a link back to the upstream source for this file.", - "format": "uri", - "type": "string" - }, - "type": { - "description": "The type of document contained in the file.", - "type": "string" - } - }, - "required": [ - "id", - "file", - "description", - "type", - "size_bytes", - "sequence", - "source_url" - ], - "type": "object", - "x-polygon-go-type": { - "name": "SECFilingFile", - "path": "github.com/polygon-io/go-lib-models/v2/globals" - } - } - } - }, - "description": "The file data." - } - }, - "summary": "SEC Filing File", - "tags": [ - "reference:sec:filing:file" - ], - "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" - } - }, - "x-polygon-draft": true - }, - "/v1/summaries": { - "get": { - "description": "Get everything needed to visualize the tick-by-tick movement of a list of tickers.", - "operationId": "SnapshotSummary", - "parameters": [ - { - "description": "Comma separated list of tickers. This API currently supports Stocks/Equities, Crypto, Options, and Forex. See the tickers endpoint for more details on supported tickers. If no tickers are passed then no results will be returned.", - "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD", + "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", + "example": true, "in": "query", - "name": "ticker.any_of", + "name": "adjusted", "schema": { - "type": "string" + "type": "boolean" } } ], @@ -12613,347 +14813,177 @@ "content": { "application/json": { "example": { - "request_id": "abc123", + "adjusted": true, + "queryCount": 3, "results": [ { - "branding": { - "icon_url": "https://api.polygon.io/icon.png", - "logo_url": "https://api.polygon.io/logo.svg" - }, - "market_status": "closed", - "name": "Norwegian Cruise Lines", - "price": 22.3, - "session": { - "change": -1.05, - "change_percent": -4.67, - "close": 21.4, - "early_trading_change": -0.39, - "early_trading_change_percent": -0.07, - "high": 22.49, - "late_trading_change": 1.2, - "late_trading_change_percent": 3.92, - "low": 21.35, - "open": 22.49, - "previous_close": 22.45, - "volume": 37 - }, - "ticker": "NCLH", - "type": "stock" - }, - { - "market_status": "closed", - "name": "NCLH $5 Call", - "options": { - "contract_type": "call", - "exercise_style": "american", - "expiration_date": "2022-10-14", - "shares_per_contract": 100, - "strike_price": 5, - "underlying_ticker": "NCLH" - }, - "price": 6.6, - "session": { - "change": -0.05, - "change_percent": -1.07, - "close": 6.65, - "early_trading_change": -0.01, - "early_trading_change_percent": -0.03, - "high": 7.01, - "late_trading_change": -0.4, - "late_trading_change_percent": -0.02, - "low": 5.42, - "open": 6.7, - "previous_close": 6.71, - "volume": 67 - }, - "ticker": "O:NCLH221014C00005000", - "type": "options" - }, - { - "market_status": "open", - "name": "Euro - United States Dollar", - "price": 0.97989, - "session": { - "change": -0.0001, - "change_percent": -0.67, - "close": 0.97989, - "high": 0.98999, - "low": 0.96689, - "open": 0.97889, - "previous_close": 0.98001 - }, - "ticker": "C:EURUSD", - "type": "fx" + "T": "C:ILSCHF", + "c": 0.2704, + "h": 0.2706, + "l": 0.2693, + "n": 689, + "o": 0.2698, + "t": 1602719999999, + "v": 689, + "vw": 0.2702 }, { - "branding": { - "icon_url": "https://api.polygon.io/icon.png", - "logo_url": "https://api.polygon.io/logo.svg" - }, - "market_status": "open", - "name": "Bitcoin - United States Dollar", - "price": 32154.68, - "session": { - "change": -201.23, - "change_percent": -0.77, - "close": 32154.68, - "high": 33124.28, - "low": 28182.88, - "open": 31129.32, - "previous_close": 33362.18 - }, - "ticker": "X:BTCUSD", - "type": "crypto" + "T": "C:GBPCAD", + "c": 1.71103, + "h": 1.71642, + "l": 1.69064, + "n": 407324, + "o": 1.69955, + "t": 1602719999999, + "v": 407324, + "vw": 1.7062 }, { - "error": "NOT_FOUND", - "message": "Ticker not found.", - "ticker": "APx" + "T": "C:DKKAUD", + "c": 0.2214, + "h": 0.2214, + "l": 0.2195, + "n": 10639, + "o": 0.22, + "t": 1602719999999, + "v": 10639, + "vw": 0.2202 } ], + "resultsCount": 3, "status": "OK" }, "schema": { - "properties": { - "request_id": { - "type": "string" + "allOf": [ + { + "properties": { + "adjusted": { + "description": "Whether or not this response was adjusted for splits.", + "type": "boolean" + }, + "queryCount": { + "description": "The number of aggregates (minute or day) used to generate the response.", + "type": "integer" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "resultsCount": { + "description": "The total number of results for this request.", + "type": "integer" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "required": [ + "status", + "adjusted", + "queryCount", + "resultsCount", + "request_id" + ], + "type": "object" }, - "results": { - "items": { - "properties": { - "branding": { - "properties": { - "icon_url": { - "description": "A link to this ticker's company's icon. Icon's are generally smaller, square images that represent the company at a glance.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", - "type": "string" - }, - "logo_url": { - "description": "A link to this ticker's company's logo.\nNote that you must provide an API key when accessing this URL. See the \"Authentication\" section at the top of this page for more details.", - "type": "string" - } - }, - "type": "object", - "x-polygon-go-type": { - "name": "Branding" - } - }, - "error": { - "description": "The error while looking for this ticker.", - "type": "string" - }, - "market_status": { - "description": "The market status for the market that trades this ticker.", - "type": "string" - }, - "message": { - "description": "The error message while looking for this ticker.", - "type": "string" - }, - "name": { - "description": "Name of ticker, forex, or crypto asset.", - "type": "string" - }, - "options": { + { + "properties": { + "results": { + "items": { "properties": { - "contract_type": { - "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", - "enum": [ - "put", - "call", - "other" - ], - "type": "string" - }, - "exercise_style": { - "description": "The exercise style of this contract. See this link for more details on exercise styles.", - "enum": [ - "american", - "european", - "bermudan" - ], - "type": "string" - }, - "expiration_date": { - "description": "The contract's expiration date in YYYY-MM-DD format.", - "format": "date", - "type": "string", - "x-polygon-go-type": { - "name": "IDaysPolygonDateString", - "path": "github.com/polygon-io/ptime" - } - }, - "shares_per_contract": { - "description": "The number of shares per contract for this contract.", - "format": "double", - "type": "number" - }, - "strike_price": { - "description": "The strike price of the option contract", - "format": "double", - "type": "number" - }, - "underlying_ticker": { - "description": "The ticker for the option contract.", + "T": { + "description": "The exchange symbol that this item is traded under.", "type": "string" - } - }, - "required": [ - "contract_type", - "expiration_date", - "exercise_style", - "shares_per_contract", - "strike_price", - "underlying_ticker" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Options" - } - }, - "price": { - "description": "The most up to date ticker price.", - "format": "double", - "type": "number" - }, - "session": { - "properties": { - "change": { - "description": "The value of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" - }, - "change_percent": { - "description": "The percent of the price change for the contract from the previous trading day.", - "format": "double", - "type": "number" }, - "close": { - "description": "The closing price for the asset of the day.", - "format": "double", - "type": "number" - }, - "early_trading_change": { - "description": "Today\u2019s early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", - "format": "double", - "type": "number" - }, - "early_trading_change_percent": { - "description": "Today\u2019s early trading change as a percentage.", + "c": { + "description": "The close price for the symbol in the given time period.", "format": "double", "type": "number" }, - "high": { - "description": "The highest price for the asset of the day.", + "h": { + "description": "The highest price for the symbol in the given time period.", "format": "double", "type": "number" }, - "late_trading_change": { - "description": "Today\u2019s late trading change amount, difference between price and today\u2019s close if in late trading hours, otherwise difference between last price during late trading and today\u2019s close.", + "l": { + "description": "The lowest price for the symbol in the given time period.", "format": "double", "type": "number" }, - "late_trading_change_percent": { - "description": "Today\u2019s late trading change as a percentage.", - "format": "double", - "type": "number" + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" }, - "low": { - "description": "The lowest price for the asset of the day.", + "o": { + "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, - "open": { - "description": "The open price for the asset of the day.", - "format": "double", - "type": "number" + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" }, - "previous_close": { - "description": "The closing price for the asset of previous trading day.", + "v": { + "description": "The trading volume of the symbol in the given time period.", "format": "double", "type": "number" }, - "volume": { - "description": "The trading volume for the asset of the day.", + "vw": { + "description": "The volume weighted average price.", "format": "double", "type": "number" } }, "required": [ - "change", - "change_percent", - "close", - "high", - "low", - "open", - "previous_close" - ], - "type": "object", - "x-polygon-go-type": { - "name": "Session" - } - }, - "ticker": { - "description": "Ticker of asset queried.", - "type": "string" - }, - "type": { - "description": "The market for this ticker of stock, crypto, fx, option.", - "enum": [ - "stocks", - "crypto", - "options", - "fx" - ], - "type": "string" - } - }, - "required": [ - "ticker", - "name", - "price", - "branding", - "market_status", - "type", - "session", - "options" - ], - "type": "object", - "x-polygon-go-type": { - "name": "SummaryResult" + "o", + "h", + "l", + "c", + "v", + "t", + "T" + ], + "type": "object" + }, + "type": "array" } }, - "type": "array" - }, - "status": { - "description": "The status of this request's response.", - "type": "string" + "type": "object" } - }, - "required": [ - "status", - "request_id" - ], - "type": "object" + ] + } + }, + "text/csv": { + "example": "T,c,h,l,n,o,t,v,vw\nC:ILSCHF,0.2704,0.2706,0.2693,689,0.2698,1602719999999,689,0.2702\nC:GBPCAD,1.71103,1.71642,1.69064,407324,1.69955,1602719999999,407324,1.7062\nC:DKKAUD,0.2214,0.2214,0.2195,10639,0.22,1602719999999,10639,0.2202\n", + "schema": { + "type": "string" } } }, - "description": "Snapshot Summary for ticker list" + "description": "Previous day OHLC for ticker" + }, + "default": { + "description": "Unexpected error" } }, - "summary": "Summaries", + "summary": "Grouped Daily (Bars)", + "tags": [ + "fx:aggregates" + ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Forex data", + "name": "fx" } } }, - "/v2/aggs/grouped/locale/global/market/crypto/{date}": { + "/v2/aggs/grouped/locale/us/market/stocks/{date}": { "get": { - "description": "Get the daily open, high, low, and close (OHLC) for the entire cryptocurrency markets.\n", + "description": "Get the daily open, high, low, and close (OHLC) for the entire stocks/equities markets.\n", "parameters": [ { "description": "The beginning date for the aggregate window.", @@ -12973,6 +15003,14 @@ "schema": { "type": "boolean" } + }, + { + "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "in": "query", + "name": "include_otc", + "schema": { + "type": "boolean" + } } ], "responses": { @@ -12984,37 +15022,37 @@ "queryCount": 3, "results": [ { - "T": "X:ARDRUSD", - "c": 0.0550762, - "h": 0.0550762, - "l": 0.0550762, - "n": 18388, - "o": 0.0550762, - "t": 1580676480000, - "v": 2, - "vw": 0.0551 + "T": "KIMpL", + "c": 25.9102, + "h": 26.25, + "l": 25.91, + "n": 74, + "o": 26.07, + "t": 1602705600000, + "v": 4369, + "vw": 26.0407 }, { - "T": "X:NGCUSD", - "c": 0.0272983, - "h": 0.0273733, - "l": 0.0272983, - "n": 18, - "o": 0.0273733, - "t": 1580674080000, - "v": 4734, - "vw": 0.0273 + "T": "TANH", + "c": 23.4, + "h": 24.763, + "l": 22.65, + "n": 1096, + "o": 24.5, + "t": 1602705600000, + "v": 25933.6, + "vw": 23.493 }, { - "T": "X:ZSCUSD", - "c": 0.00028531, - "h": 0.00028531, - "l": 0.00028531, - "n": 151, - "o": 0.00028531, - "t": 1580671080000, - "v": 390, - "vw": 0.0003 + "T": "VSAT", + "c": 34.24, + "h": 35.47, + "l": 34.21, + "n": 4966, + "o": 34.9, + "t": 1602705600000, + "v": 312583, + "vw": 34.4736 } ], "resultsCount": 3, @@ -13087,6 +15125,10 @@ "format": "double", "type": "number" }, + "otc": { + "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", + "type": "boolean" + }, "t": { "description": "The Unix Msec timestamp for the start of the aggregate window.", "type": "integer" @@ -13107,8 +15149,8 @@ "h", "l", "c", - "v", "t", + "v", "T" ], "type": "object" @@ -13122,13 +15164,13 @@ } }, "text/csv": { - "example": "T,c,h,l,n,o,t,v,vw\nX:ARDRUSD,0.0550762,0.0550762,0.0550762,18388,0.0550762,1580676480000,2,0.0551\nX:NGCUSD,0.0272983,0.0273733,0.0272983,18,0.0273733,1580674080000,4734,0.0273\nX:ZSCUSD,0.00028531,0.00028531,0.00028531,151,0.00028531,1580671080000,390,0.0003\n", + "example": "T,c,h,l,n,o,t,v,vw\nKIMpL,25.9102,26.25,25.91,74,26.07,1602705600000,4369,26.0407\nTANH,23.4,24.763,22.65,1096,24.5,1602705600000,25933.6,23.493\nVSAT,34.24,35.47,34.21,4966,34.9,1602705600000,312583,34.4736\n", "schema": { "type": "string" } } }, - "description": "The previous day OHLC for the ticker." + "description": "Previous day OHLC for ticker" }, "default": { "description": "Unexpected error" @@ -13136,27 +15178,27 @@ }, "summary": "Grouped Daily (Bars)", "tags": [ - "crypto:aggregates" + "stocks:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Stocks data", + "name": "stocks" } } }, - "/v2/aggs/grouped/locale/global/market/fx/{date}": { + "/v2/aggs/ticker/{cryptoTicker}/prev": { "get": { - "description": "Get the daily open, high, low, and close (OHLC) for the entire forex markets.\n", + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified cryptocurrency pair.\n", "parameters": [ { - "description": "The beginning date for the aggregate window.", - "example": "2023-01-09", + "description": "The ticker symbol of the currency pair.", + "example": "X:BTCUSD", "in": "path", - "name": "date", + "name": "cryptoTicker", "required": true, "schema": { "type": "string" @@ -13178,47 +15220,38 @@ "application/json": { "example": { "adjusted": true, - "queryCount": 3, + "queryCount": 1, + "request_id": "b2170df985474b6d21a6eeccfb6bee67", "results": [ { - "T": "C:ILSCHF", - "c": 0.2704, - "h": 0.2706, - "l": 0.2693, - "n": 689, - "o": 0.2698, - "t": 1602719999999, - "v": 689, - "vw": 0.2702 - }, - { - "T": "C:GBPCAD", - "c": 1.71103, - "h": 1.71642, - "l": 1.69064, - "n": 407324, - "o": 1.69955, - "t": 1602719999999, - "v": 407324, - "vw": 1.7062 - }, - { - "T": "C:DKKAUD", - "c": 0.2214, - "h": 0.2214, - "l": 0.2195, - "n": 10639, - "o": 0.22, - "t": 1602719999999, - "v": 10639, - "vw": 0.2202 + "T": "X:BTCUSD", + "c": 16035.9, + "h": 16180, + "l": 15639.2, + "o": 15937.1, + "t": 1605416400000, + "v": 95045.16897951, + "vw": 15954.2111 } ], - "resultsCount": 3, - "status": "OK" + "resultsCount": 1, + "status": "OK", + "ticker": "X:BTCUSD" }, "schema": { "allOf": [ + { + "properties": { + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, { "properties": { "adjusted": { @@ -13319,41 +15352,90 @@ } }, "text/csv": { - "example": "T,c,h,l,n,o,t,v,vw\nC:ILSCHF,0.2704,0.2706,0.2693,689,0.2698,1602719999999,689,0.2702\nC:GBPCAD,1.71103,1.71642,1.69064,407324,1.69955,1602719999999,407324,1.7062\nC:DKKAUD,0.2214,0.2214,0.2195,10639,0.22,1602719999999,10639,0.2202\n", + "example": "T,c,h,l,o,t,v,vw\nX:BTCUSD,16035.9,16180,15639.2,15937.1,1605416400000,95045.16897951,15954.2111\n", "schema": { "type": "string" } } }, - "description": "Previous day OHLC for ticker" + "description": "The previous day OHLC for a ticker." + }, + "default": { + "description": "Unexpected error" + } + }, + "summary": "Previous Close", + "tags": [ + "crypto:aggregates" + ], + "x-polygon-entitlement-data-type": { + "description": "Aggregate data", + "name": "aggregates" + }, + "x-polygon-entitlement-market-type": { + "description": "Crypto data", + "name": "crypto" + } + } + }, + "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "get": { + "description": "Get aggregate bars for a cryptocurrency pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", + "parameters": [ + { + "description": "The ticker symbol of the currency pair.", + "example": "X:BTCUSD", + "in": "path", + "name": "cryptoTicker", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The size of the timespan multiplier.", + "example": 1, + "in": "path", + "name": "multiplier", + "required": true, + "schema": { + "type": "integer" + } + }, + { + "description": "The size of the time window.", + "example": "day", + "in": "path", + "name": "timespan", + "required": true, + "schema": { + "enum": [ + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "type": "string" + } + }, + { + "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", + "example": "2023-01-09", + "in": "path", + "name": "from", + "required": true, + "schema": { + "type": "string" + } }, - "default": { - "description": "Unexpected error" - } - }, - "summary": "Grouped Daily (Bars)", - "tags": [ - "fx:aggregates" - ], - "x-polygon-entitlement-data-type": { - "description": "Aggregate data", - "name": "aggregates" - }, - "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" - } - } - }, - "/v2/aggs/grouped/locale/us/market/stocks/{date}": { - "get": { - "description": "Get the daily open, high, low, and close (OHLC) for the entire stocks/equities markets.\n", - "parameters": [ { - "description": "The beginning date for the aggregate window.", + "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", "example": "2023-01-09", "in": "path", - "name": "date", + "name": "to", "required": true, "schema": { "type": "string" @@ -13369,11 +15451,24 @@ } }, { - "description": "Include OTC securities in the response. Default is false (don't include OTC securities).\n", + "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", + "example": "asc", "in": "query", - "name": "include_otc", + "name": "sort", "schema": { - "type": "boolean" + "enum": [ + "asc", + "desc" + ] + } + }, + { + "description": "Limits the number of base aggregates queried to create the aggregate results. Max 50000 and Default 5000.\nRead more about how limit is used to calculate aggregate results in our article on\nAggregate Data API Improvements.\n", + "example": 120, + "in": "query", + "name": "limit", + "schema": { + "type": "integer" } } ], @@ -13383,47 +15478,48 @@ "application/json": { "example": { "adjusted": true, - "queryCount": 3, + "queryCount": 2, + "request_id": "0cf72b6da685bcd386548ffe2895904a", "results": [ { - "T": "KIMpL", - "c": 25.9102, - "h": 26.25, - "l": 25.91, - "n": 74, - "o": 26.07, - "t": 1602705600000, - "v": 4369, - "vw": 26.0407 - }, - { - "T": "TANH", - "c": 23.4, - "h": 24.763, - "l": 22.65, - "n": 1096, - "o": 24.5, - "t": 1602705600000, - "v": 25933.6, - "vw": 23.493 + "c": 10094.75, + "h": 10429.26, + "l": 9490, + "n": 1, + "o": 9557.9, + "t": 1590984000000, + "v": 303067.6562332156, + "vw": 9874.5529 }, { - "T": "VSAT", - "c": 34.24, - "h": 35.47, - "l": 34.21, - "n": 4966, - "o": 34.9, - "t": 1602705600000, - "v": 312583, - "vw": 34.4736 + "c": 9492.62, + "h": 10222.72, + "l": 9135.68, + "n": 1, + "o": 10096.87, + "t": 1591070400000, + "v": 323339.6922892879, + "vw": 9729.5701 } ], - "resultsCount": 3, - "status": "OK" + "resultsCount": 2, + "status": "OK", + "ticker": "X:BTCUSD" }, "schema": { "allOf": [ + { + "properties": { + "ticker": { + "description": "The exchange symbol that this item is traded under.", + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, { "properties": { "adjusted": { @@ -13461,10 +15557,6 @@ "results": { "items": { "properties": { - "T": { - "description": "The exchange symbol that this item is traded under.", - "type": "string" - }, "c": { "description": "The close price for the symbol in the given time period.", "format": "double", @@ -13489,10 +15581,6 @@ "format": "double", "type": "number" }, - "otc": { - "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", - "type": "boolean" - }, "t": { "description": "The Unix Msec timestamp for the start of the aggregate window.", "type": "integer" @@ -13513,9 +15601,8 @@ "h", "l", "c", - "t", "v", - "T" + "t" ], "type": "object" }, @@ -13528,41 +15615,41 @@ } }, "text/csv": { - "example": "T,c,h,l,n,o,t,v,vw\nKIMpL,25.9102,26.25,25.91,74,26.07,1602705600000,4369,26.0407\nTANH,23.4,24.763,22.65,1096,24.5,1602705600000,25933.6,23.493\nVSAT,34.24,35.47,34.21,4966,34.9,1602705600000,312583,34.4736\n", + "example": "c,h,l,n,o,t,v,vw\n10094.75,10429.26,9490,1,9557.9,1590984000000,303067.6562332156,9874.5529\n9492.62,10222.72,9135.68,1,10096.87,1591070400000,323339.6922892879,9729.5701\n", "schema": { "type": "string" } } }, - "description": "Previous day OHLC for ticker" + "description": "Cryptocurrency Aggregates." }, "default": { "description": "Unexpected error" } }, - "summary": "Grouped Daily (Bars)", + "summary": "Aggregates (Bars)", "tags": [ - "stocks:aggregates" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Stocks data", - "name": "stocks" + "description": "Crypto data", + "name": "crypto" } } }, - "/v2/aggs/ticker/{cryptoTicker}/prev": { + "/v2/aggs/ticker/{forexTicker}/prev": { "get": { - "description": "Get the previous day's open, high, low, and close (OHLC) for the specified cryptocurrency pair.\n", + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified forex pair.\n", "parameters": [ { "description": "The ticker symbol of the currency pair.", - "example": "X:BTCUSD", + "example": "C:EURUSD", "in": "path", - "name": "cryptoTicker", + "name": "forexTicker", "required": true, "schema": { "type": "string" @@ -13585,22 +15672,23 @@ "example": { "adjusted": true, "queryCount": 1, - "request_id": "b2170df985474b6d21a6eeccfb6bee67", + "request_id": "08ec061fb85115678d68452c0a609cb7", "results": [ { - "T": "X:BTCUSD", - "c": 16035.9, - "h": 16180, - "l": 15639.2, - "o": 15937.1, - "t": 1605416400000, - "v": 95045.16897951, - "vw": 15954.2111 + "T": "C:EURUSD", + "c": 1.06206, + "h": 1.0631, + "l": 1.0505, + "n": 180300, + "o": 1.05252, + "t": 1651708799999, + "v": 180300, + "vw": 1.055 } ], "resultsCount": 1, "status": "OK", - "ticker": "X:BTCUSD" + "ticker": "C:EURUSD" }, "schema": { "allOf": [ @@ -13697,13 +15785,13 @@ } }, "required": [ + "T", + "v", "o", + "c", "h", "l", - "c", - "v", - "t", - "T" + "t" ], "type": "object" }, @@ -13716,13 +15804,13 @@ } }, "text/csv": { - "example": "T,c,h,l,o,t,v,vw\nX:BTCUSD,16035.9,16180,15639.2,15937.1,1605416400000,95045.16897951,15954.2111\n", + "example": "T,c,h,l,n,o,t,v,vw\nC:EURUSD,1.06206,1.0631,1.0505,180300,1.05252,1651708799999,180300,1.055\n", "schema": { "type": "string" } } }, - "description": "The previous day OHLC for a ticker." + "description": "The previous day OHLC for the ticker." }, "default": { "description": "Unexpected error" @@ -13730,27 +15818,27 @@ }, "summary": "Previous Close", "tags": [ - "crypto:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Forex data", + "name": "fx" } } }, - "/v2/aggs/ticker/{cryptoTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "description": "Get aggregate bars for a cryptocurrency pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", + "description": "Get aggregate bars for a forex pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", "parameters": [ { "description": "The ticker symbol of the currency pair.", - "example": "X:BTCUSD", + "example": "C:EURUSD", "in": "path", - "name": "cryptoTicker", + "name": "forexTicker", "required": true, "schema": { "type": "string" @@ -13842,33 +15930,23 @@ "application/json": { "example": { "adjusted": true, - "queryCount": 2, - "request_id": "0cf72b6da685bcd386548ffe2895904a", + "queryCount": 1, + "request_id": "79c061995d8b627b736170bc9653f15d", "results": [ { - "c": 10094.75, - "h": 10429.26, - "l": 9490, - "n": 1, - "o": 9557.9, - "t": 1590984000000, - "v": 303067.6562332156, - "vw": 9874.5529 - }, - { - "c": 9492.62, - "h": 10222.72, - "l": 9135.68, - "n": 1, - "o": 10096.87, - "t": 1591070400000, - "v": 323339.6922892879, - "vw": 9729.5701 + "c": 1.17721, + "h": 1.18305, + "l": 1.1756, + "n": 125329, + "o": 1.17921, + "t": 1626912000000, + "v": 125329, + "vw": 1.1789 } ], - "resultsCount": 2, + "resultsCount": 1, "status": "OK", - "ticker": "X:BTCUSD" + "ticker": "C:EURUSD" }, "schema": { "allOf": [ @@ -13979,13 +16057,13 @@ } }, "text/csv": { - "example": "c,h,l,n,o,t,v,vw\n10094.75,10429.26,9490,1,9557.9,1590984000000,303067.6562332156,9874.5529\n9492.62,10222.72,9135.68,1,10096.87,1591070400000,323339.6922892879,9729.5701\n", + "example": "c,h,l,n,o,t,v,vw\n1.17721,1.18305,1.1756,125329,1.17921,1626912000000,125329,1.1789\n", "schema": { "type": "string" } } }, - "description": "Cryptocurrency Aggregates." + "description": "Forex Aggregates." }, "default": { "description": "Unexpected error" @@ -13993,39 +16071,30 @@ }, "summary": "Aggregates (Bars)", "tags": [ - "crypto:aggregates" + "fx:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Crypto data", - "name": "crypto" + "description": "Forex data", + "name": "fx" } } }, - "/v2/aggs/ticker/{forexTicker}/prev": { + "/v2/aggs/ticker/{indicesTicker}/prev": { "get": { - "description": "Get the previous day's open, high, low, and close (OHLC) for the specified forex pair.\n", + "description": "Get the previous day's open, high, low, and close (OHLC) for the specified index.\n", "parameters": [ { - "description": "The ticker symbol of the currency pair.", - "example": "C:EURUSD", - "in": "path", - "name": "forexTicker", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "example": true, - "in": "query", - "name": "adjusted", + "description": "The ticker symbol of Index.", + "example": "I:SPX", + "in": "path", + "name": "indicesTicker", + "required": true, "schema": { - "type": "boolean" + "type": "string" } } ], @@ -14034,25 +16103,21 @@ "content": { "application/json": { "example": { - "adjusted": true, "queryCount": 1, - "request_id": "08ec061fb85115678d68452c0a609cb7", + "request_id": "b2170df985474b6d21a6eeccfb6bee67", "results": [ { - "T": "C:EURUSD", - "c": 1.06206, - "h": 1.0631, - "l": 1.0505, - "n": 180300, - "o": 1.05252, - "t": 1651708799999, - "v": 180300, - "vw": 1.055 + "T": "SPX", + "c": "4,048.42", + "h": "4,050.00", + "l": "3,980.31", + "o": "4,048.26", + "t": 1678221584688 } ], "resultsCount": 1, "status": "OK", - "ticker": "C:EURUSD" + "ticker": "I:SPX" }, "schema": { "allOf": [ @@ -14070,10 +16135,6 @@ }, { "properties": { - "adjusted": { - "description": "Whether or not this response was adjusted for splits.", - "type": "boolean" - }, "queryCount": { "description": "The number of aggregates (minute or day) used to generate the response.", "type": "integer" @@ -14093,7 +16154,6 @@ }, "required": [ "status", - "adjusted", "queryCount", "resultsCount", "request_id" @@ -14105,56 +16165,36 @@ "results": { "items": { "properties": { - "T": { - "description": "The exchange symbol that this item is traded under.", - "type": "string" - }, "c": { - "description": "The close price for the symbol in the given time period.", + "description": "The close value for the symbol in the given time period.", "format": "double", "type": "number" }, "h": { - "description": "The highest price for the symbol in the given time period.", + "description": "The highest value for the symbol in the given time period.", "format": "double", "type": "number" }, "l": { - "description": "The lowest price for the symbol in the given time period.", + "description": "The lowest value for the symbol in the given time period.", "format": "double", "type": "number" }, - "n": { - "description": "The number of transactions in the aggregate window.", - "type": "integer" - }, "o": { - "description": "The open price for the symbol in the given time period.", + "description": "The open value for the symbol in the given time period.", "format": "double", "type": "number" }, "t": { "description": "The Unix Msec timestamp for the start of the aggregate window.", "type": "integer" - }, - "v": { - "description": "The trading volume of the symbol in the given time period.", - "format": "double", - "type": "number" - }, - "vw": { - "description": "The volume weighted average price.", - "format": "double", - "type": "number" } }, "required": [ - "T", - "v", "o", - "c", "h", "l", + "c", "t" ], "type": "object" @@ -14166,15 +16206,9 @@ } ] } - }, - "text/csv": { - "example": "T,c,h,l,n,o,t,v,vw\nC:EURUSD,1.06206,1.0631,1.0505,180300,1.05252,1651708799999,180300,1.055\n", - "schema": { - "type": "string" - } } }, - "description": "The previous day OHLC for the ticker." + "description": "The previous day OHLC for a index." }, "default": { "description": "Unexpected error" @@ -14182,27 +16216,27 @@ }, "summary": "Previous Close", "tags": [ - "fx:aggregates" + "indices:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Indices data", + "name": "indices" } } }, - "/v2/aggs/ticker/{forexTicker}/range/{multiplier}/{timespan}/{from}/{to}": { + "/v2/aggs/ticker/{indicesTicker}/range/{multiplier}/{timespan}/{from}/{to}": { "get": { - "description": "Get aggregate bars for a forex pair over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", + "description": "Get aggregate bars for an index over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", "parameters": [ { - "description": "The ticker symbol of the currency pair.", - "example": "C:EURUSD", + "description": "The ticker symbol of Index.", + "example": "I:SPX", "in": "path", - "name": "forexTicker", + "name": "indicesTicker", "required": true, "schema": { "type": "string" @@ -14239,7 +16273,7 @@ }, { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-01-09", + "example": "2023-03-10", "in": "path", "name": "from", "required": true, @@ -14249,7 +16283,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-01-09", + "example": "2023-03-10", "in": "path", "name": "to", "required": true, @@ -14257,15 +16291,6 @@ "type": "string" } }, - { - "description": "Whether or not the results are adjusted for splits. By default, results are adjusted.\nSet this to false to get results that are NOT adjusted for splits.\n", - "example": true, - "in": "query", - "name": "adjusted", - "schema": { - "type": "boolean" - } - }, { "description": "Sort the results by timestamp.\n`asc` will return results in ascending order (oldest at the top),\n`desc` will return results in descending order (newest at the top).\n", "example": "asc", @@ -14293,24 +16318,29 @@ "content": { "application/json": { "example": { - "adjusted": true, - "queryCount": 1, - "request_id": "79c061995d8b627b736170bc9653f15d", + "queryCount": 2, + "request_id": "0cf72b6da685bcd386548ffe2895904a", "results": [ { - "c": 1.17721, - "h": 1.18305, - "l": 1.1756, - "n": 125329, - "o": 1.17921, - "t": 1626912000000, - "v": 125329, - "vw": 1.1789 + "c": "4,048.42", + "h": "4,050.00", + "l": "3,980.31", + "n": 1, + "o": "4,048.26", + "t": 1678221133236 + }, + { + "c": "4,048.42", + "h": "4,050.00", + "l": "3,980.31", + "n": 1, + "o": "4,048.26", + "t": 1678221139690 } ], - "resultsCount": 1, + "resultsCount": 2, "status": "OK", - "ticker": "C:EURUSD" + "ticker": "I:SPX" }, "schema": { "allOf": [ @@ -14328,10 +16358,6 @@ }, { "properties": { - "adjusted": { - "description": "Whether or not this response was adjusted for splits.", - "type": "boolean" - }, "queryCount": { "description": "The number of aggregates (minute or day) used to generate the response.", "type": "integer" @@ -14351,7 +16377,6 @@ }, "required": [ "status", - "adjusted", "queryCount", "resultsCount", "request_id" @@ -14364,42 +16389,28 @@ "items": { "properties": { "c": { - "description": "The close price for the symbol in the given time period.", + "description": "The close value for the symbol in the given time period.", "format": "double", "type": "number" }, "h": { - "description": "The highest price for the symbol in the given time period.", + "description": "The highest value for the symbol in the given time period.", "format": "double", "type": "number" }, "l": { - "description": "The lowest price for the symbol in the given time period.", + "description": "The lowest value for the symbol in the given time period.", "format": "double", "type": "number" }, - "n": { - "description": "The number of transactions in the aggregate window.", - "type": "integer" - }, "o": { - "description": "The open price for the symbol in the given time period.", + "description": "The open value for the symbol in the given time period.", "format": "double", "type": "number" }, "t": { "description": "The Unix Msec timestamp for the start of the aggregate window.", "type": "integer" - }, - "v": { - "description": "The trading volume of the symbol in the given time period.", - "format": "double", - "type": "number" - }, - "vw": { - "description": "The volume weighted average price.", - "format": "double", - "type": "number" } }, "required": [ @@ -14407,7 +16418,6 @@ "h", "l", "c", - "v", "t" ], "type": "object" @@ -14419,15 +16429,9 @@ } ] } - }, - "text/csv": { - "example": "c,h,l,n,o,t,v,vw\n1.17721,1.18305,1.1756,125329,1.17921,1626912000000,125329,1.1789\n", - "schema": { - "type": "string" - } } }, - "description": "Forex Aggregates." + "description": "Index Aggregates." }, "default": { "description": "Unexpected error" @@ -14435,15 +16439,15 @@ }, "summary": "Aggregates (Bars)", "tags": [ - "fx:aggregates" + "indices:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" }, "x-polygon-entitlement-market-type": { - "description": "Forex data", - "name": "fx" + "description": "Indices data", + "name": "indices" } } }, @@ -23174,7 +25178,7 @@ } }, "primary_exchange": { - "description": "The MIC code of the primarcy exchange that this contract is listed on.", + "description": "The MIC code of the primary exchange that this contract is listed on.", "type": "string" }, "shares_per_contract": { @@ -23362,7 +25366,7 @@ } }, "primary_exchange": { - "description": "The MIC code of the primarcy exchange that this contract is listed on.", + "description": "The MIC code of the primary exchange that this contract is listed on.", "type": "string" }, "shares_per_contract": { @@ -24292,6 +26296,7 @@ "name": "Apple Inc.", "phone_number": "(408) 996-1010", "primary_exchange": "XNAS", + "round_lot": 100, "share_class_figi": "BBG001S5N8V8", "share_class_shares_outstanding": 16406400000, "sic_code": "3571", @@ -24420,6 +26425,11 @@ "description": "The ISO code of the primary listing exchange for this asset.", "type": "string" }, + "round_lot": { + "description": "Round lot size of this security.", + "format": "double", + "type": "number" + }, "share_class_figi": { "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", "type": "string" @@ -24486,7 +26496,7 @@ } }, "text/csv": { - "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", + "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,round_lot,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,100,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", "schema": { "type": "string" } @@ -24518,7 +26528,6 @@ "example": "I:SPX", "in": "query", "name": "ticker.any_of", - "required": true, "schema": { "type": "string" } @@ -24562,10 +26571,6 @@ }, "schema": { "properties": { - "next_url": { - "description": "If present, this value can be used to fetch the next page of data.", - "type": "string" - }, "request_id": { "type": "string" }, @@ -24591,78 +26596,44 @@ "session": { "properties": { "change": { - "description": "The value of the price change for the contract from the previous trading day.", + "description": "The value of the change for the index from the previous trading day.", "format": "double", "type": "number" }, "change_percent": { - "description": "The percent of the price change for the contract from the previous trading day.", + "description": "The percent of the change for the index from the previous trading day.", "format": "double", "type": "number" }, "close": { - "description": "The closing price for the asset of the day.", - "format": "double", - "type": "number" - }, - "early_trading_change": { - "description": "Today\u2019s early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", - "format": "double", - "type": "number" - }, - "early_trading_change_percent": { - "description": "Today\u2019s early trading change as a percentage.", + "description": "The closing value for the index of the day.", "format": "double", "type": "number" }, "high": { - "description": "The highest price for the asset of the day.", - "format": "double", - "type": "number" - }, - "late_trading_change": { - "description": "Today\u2019s late trading change amount, difference between price and today\u2019s close if in late trading hours, otherwise difference between last price during late trading and today\u2019s close.", - "format": "double", - "type": "number" - }, - "late_trading_change_percent": { - "description": "Today\u2019s late trading change as a percentage.", + "description": "The highest value for the index of the day.", "format": "double", "type": "number" }, "low": { - "description": "The lowest price for the asset of the day.", + "description": "The lowest value for the index of the day.", "format": "double", "type": "number" }, "open": { - "description": "The open price for the asset of the day.", + "description": "The open value for the index of the day.", "format": "double", "type": "number" }, "previous_close": { - "description": "The closing price for the asset of previous trading day.", - "format": "double", - "type": "number" - }, - "volume": { - "description": "The trading volume for the asset of the day.", + "description": "The closing value for the index of previous trading day.", "format": "double", "type": "number" } }, - "required": [ - "change", - "change_percent", - "close", - "high", - "low", - "open", - "previous_close" - ], "type": "object", "x-polygon-go-type": { - "name": "Session" + "name": "IndicesSession" } }, "ticker": { @@ -26699,7 +28670,8 @@ "schema": { "enum": [ "annual", - "quarterly" + "quarterly", + "ttm" ], "type": "string" } @@ -26837,7 +28809,6 @@ "200": { "content": { "application/json": { - "description": "FIXME", "example": { "count": 1, "next_url": "https://api.polygon.io/vX/reference/financials?", @@ -27168,8 +29139,16 @@ "*": { "description": "An individual financial data point.", "properties": { + "derived_from": { + "description": "The list of report IDs (or errata) which were used to derive this data point.\nThis value is only returned for data points taken directly from XBRL when the `include_sources` query parameter is `true` and if source is SourceInterReportDerived.", + "items": { + "type": "string" + }, + "type": "array" + }, "formula": { - "description": "The name of the formula used to derive this data point from other financial data points.\nInformation about the formulas can be found here.\nThis value is only returned for data points that are not explicitly expressed within the XBRL source file when the `include_sources` query parameter is `true`." + "description": "The name of the formula used to derive this data point from other financial data points.\nInformation about the formulas can be found here.\nThis value is only returned for data points that are not explicitly expressed within the XBRL source file when the `include_sources` query parameter is `true` and if source is SourceIntraReportImpute.", + "type": "string" }, "label": { "description": "A human readable label for the financial data point.", @@ -27179,6 +29158,9 @@ "description": "An indicator of what order within the statement that you would find this data point.", "type": "integer" }, + "source": { + "description": "The source where this data point came from. This will be one of: SourceDirectReport, SourceIntraReportImpute or SourceInterReportDerived." + }, "unit": { "description": "The unit of the financial data point.", "type": "string" @@ -27188,7 +29170,8 @@ "type": "number" }, "xpath": { - "description": "The XPath 1.0 query that identifies the fact from within the XBRL source file.\nThis value is only returned for data points taken directly from XBRL when the `include_sources` query parameter is `true`." + "description": "The XPath 1.0 query that identifies the fact from within the XBRL source file.\nThis value is only returned for data points taken directly from XBRL when the `include_sources` query parameter is `true` and if source is SourceDirectReport.", + "type": "string" } }, "required": [ @@ -27235,23 +29218,29 @@ "start_date": { "description": "The start date of the period that these financials cover in YYYYMMDD format.", "type": "string" + }, + "tickers": { + "description": "The list of ticker symbols for the company.", + "items": { + "type": "string" + }, + "type": "array" + }, + "timeframe": { + "description": "The timeframe of the report (quarterly, annual or ttm).", + "type": "string" } }, "required": [ - "reporting_period", "cik", "company_name", "financials", - "fiscal_period", - "fiscal_year", - "filing_type", - "source_filing_url", - "source_filing_file_url" + "timeframe", + "fiscal_period" ], "type": "object", "x-polygon-go-type": { - "name": "ResolvedFinancials", - "path": "github.com/polygon-io/go-app-api-financials/extract" + "name": "FinancialReport" } }, "type": "array" @@ -27513,6 +29502,17 @@ "aggregates", "snapshot" ] + }, + { + "description": "Indices API", + "name": "indices", + "x-polygon-sub-tags": [ + "trades", + "last:trade", + "open-close", + "aggregates", + "snapshot" + ] } ], "x-polygon-order": { @@ -27697,6 +29697,63 @@ } ] }, + "indices": { + "market": [ + { + "launchpad": "shared", + "paths": [ + "/v2/aggs/ticker/{indicesTicker}/range/{multiplier}/{timespan}/{from}/{to}" + ] + }, + { + "paths": [ + "/v2/aggs/ticker/{indicesTicker}/prev" + ] + }, + { + "paths": [ + "/v1/open-close/{indicesTicker}/{date}" + ] + }, + { + "group": "Technical Indicators", + "paths": [ + "/v1/indicators/sma/{indicesTicker}", + "/v1/indicators/ema/{indicesTicker}", + "/v1/indicators/macd/{indicesTicker}", + "/v1/indicators/rsi/{indicesTicker}" + ] + }, + { + "group": "Snapshots", + "paths": [ + "/v3/snapshot/indices" + ] + } + ], + "reference": [ + { + "paths": [ + "/v3/reference/tickers" + ] + }, + { + "paths": [ + "/v3/reference/tickers/types" + ] + }, + { + "paths": [ + "/v1/marketstatus/upcoming" + ] + }, + { + "paths": [ + "/v1/marketstatus/now" + ] + } + ] + }, "options": { "market": [ { diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 332d5555..970ecc82 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -111,6 +111,20 @@ ] } ] + }, + "indices": { + "market": [ + { + "paths": [ + "/indices/AM" + ] + }, + { + "paths": [ + "/indices/V" + ] + } + ] } }, "paths": { @@ -1977,6 +1991,195 @@ } ] } + }, + "/indices/AM": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time minute aggregates for a given index ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an index ticker using \"I:\" prefix or use * to subscribe to all index tickers.\nYou can also use a comma separated list to subscribe to multiple index tickers.\nYou can retrieve available index tickers from our [Index Tickers API](https://polygon.io/docs/indices/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(I:[a-zA-Z0-9]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a minute aggregate event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The symbol representing the given index." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening value." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening index value for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing index value for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest index value for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest index value for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "AM" + ], + "description": "The event type." + } + } + } + ] + }, + "example": { + "ev": "AM", + "sym": "I:SPX", + "op": 3985.67, + "o": 3985.67, + "c": 3985.67, + "h": 3985.67, + "l": 3985.67, + "s": 1678220675805, + "e": 1678220675805 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "indices", + "description": "Indices data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/indices/V": { + "get": { + "summary": "Value", + "description": "Real-time value for a given index ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an index ticker using \"I:\" prefix or use * to subscribe to all index tickers.\nYou can also use a comma separated list to subscribe to multiple index tickers.\nYou can retrieve available index tickers from our [Index Tickers API](https://polygon.io/docs/indices/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(I:[a-zA-Z0-9]+)$/" + }, + "example": "I:SPX" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "V" + ], + "description": "The event type." + }, + "val": { + "description": "The value of the index." + }, + "T": { + "description": "The assigned ticker of the index." + }, + "t": { + "description": "The Timestamp in Unix MS." + } + } + }, + "example": { + "ev": "V", + "val": 3988.5, + "T": "I:SPX", + "t": 1678220098130 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "value", + "description": "Index value data" + }, + "x-polygon-entitlement-market-type": { + "name": "indices", + "description": "Indices data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } } }, "components": { @@ -3349,6 +3552,131 @@ "CryptoReceivedTimestamp": { "type": "integer", "description": "The timestamp that the tick was received by Polygon." + }, + "IndicesBaseAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The symbol representing the given index." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening value." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening index value for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing index value for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest index value for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest index value for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + } + } + }, + "IndicesMinuteAggregateEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The symbol representing the given index." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening value." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening index value for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing index value for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest index value for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest index value for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "AM" + ], + "description": "The event type." + } + } + } + ] + }, + "IndicesValueEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "V" + ], + "description": "The event type." + }, + "val": { + "description": "The value of the index." + }, + "T": { + "description": "The assigned ticker of the index." + }, + "t": { + "description": "The Timestamp in Unix MS." + } + } } }, "parameters": { @@ -3406,6 +3734,28 @@ "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" }, "example": "*" + }, + "IndicesIndexParam": { + "name": "ticker", + "in": "query", + "description": "Specify an index ticker using \"I:\" prefix or use * to subscribe to all index tickers.\nYou can also use a comma separated list to subscribe to multiple index tickers.\nYou can retrieve available index tickers from our [Index Tickers API](https://polygon.io/docs/indices/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(I:[a-zA-Z0-9]+)$/" + }, + "example": "*" + }, + "IndicesIndexParamWithoutWildcard": { + "name": "ticker", + "in": "query", + "description": "Specify an index ticker using \"I:\" prefix or use * to subscribe to all index tickers.\nYou can also use a comma separated list to subscribe to multiple index tickers.\nYou can retrieve available index tickers from our [Index Tickers API](https://polygon.io/docs/indices/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(I:[a-zA-Z0-9]+)$/" + }, + "example": "I:SPX" } } } From adc6b2a0d98d6f4bdbe4ec4c5edeb5945fb735e8 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 3 Apr 2023 10:15:26 -0700 Subject: [PATCH 224/448] Added limit param to indicators (#420) --- polygon/rest/indicators.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/polygon/rest/indicators.py b/polygon/rest/indicators.py index ce87927d..188b59b9 100644 --- a/polygon/rest/indicators.py +++ b/polygon/rest/indicators.py @@ -28,6 +28,7 @@ def get_sma( adjusted: Optional[bool] = None, expand_underlying: Optional[bool] = None, order: Optional[Union[str, Order]] = None, + limit: Optional[int] = None, params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, @@ -50,6 +51,7 @@ def get_sma( :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window + :param limit: Limit the number of results returned, default is 10 and max is 5000 :param params: Any additional query params :param series_type: The price in the aggregate which will be used to calculate the simple moving average i.e. 'close' will result in using close prices to calculate the simple moving average @@ -81,6 +83,7 @@ def get_ema( adjusted: Optional[bool] = None, expand_underlying: Optional[bool] = None, order: Optional[Union[str, Order]] = None, + limit: Optional[int] = None, params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, @@ -103,6 +106,7 @@ def get_ema( :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window + :param limit: Limit the number of results returned, default is 10 and max is 5000 :param params: Any additional query params :param series_type: The price in the aggregate which will be used to calculate the simple moving average i.e. 'close' will result in using close prices to calculate the simple moving average @@ -134,6 +138,7 @@ def get_rsi( adjusted: Optional[bool] = None, expand_underlying: Optional[bool] = None, order: Optional[Union[str, Order]] = None, + limit: Optional[int] = None, params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, @@ -156,6 +161,7 @@ def get_rsi( :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window + :param limit: Limit the number of results returned, default is 10 and max is 5000 :param params: Any additional query params :param series_type: The price in the aggregate which will be used to calculate the simple moving average i.e. 'close' will result in using close prices to calculate the simple moving average @@ -189,6 +195,7 @@ def get_macd( adjusted: Optional[bool] = None, expand_underlying: Optional[bool] = None, order: Optional[Union[str, Order]] = None, + limit: Optional[int] = None, params: Optional[Dict[str, Any]] = None, series_type: Optional[Union[str, SeriesType]] = None, raw: bool = False, @@ -212,6 +219,7 @@ def get_macd( :param expand_underlying: Whether to include the aggregates used to calculate this indicator in the response :param order: Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).The end of the aggregate time window + :param limit: Limit the number of results returned, default is 10 and max is 5000 :param params: Any additional query params :param series_type: The price in the aggregate which will be used to calculate the simple moving average i.e. 'close' will result in using close prices to calculate the simple moving average From 29ecabc0e5bc4da8a868a959e51dff2b995ad976 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 3 Apr 2023 14:07:06 -0700 Subject: [PATCH 225/448] Added indices to market status (#416) --- polygon/rest/models/markets.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 2192b2df..509caa86 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -80,6 +80,9 @@ def from_dict(d): exchanges=None if "exchanges" not in d else MarketExchanges.from_dict(d["exchanges"]), + indicesGroups=None + if "indicesGroups" not in d + else MarketIndices.from_dict(d["indicesGroups"]), market=d.get("market", None), server_time=d.get("serverTime", None), ) From a09584ad9592cced22b7676cdf9a8cfd48c6bda8 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 3 Apr 2023 14:25:20 -0700 Subject: [PATCH 226/448] add/update examples (#383) * add/update examples * added comment to on how to use --- .../rest/stocks-aggregates_bars_highcharts.py | 137 ++++++++++++++++++ examples/rest/stocks-grouped_daily_bars.py | 2 +- examples/rest/stocks-tickers.py | 2 +- examples/rest/stocks-trades_extra.py | 2 +- examples/websocket/stocks-ws.py | 21 ++- examples/websocket/stocks-ws_extra.py | 77 +++++++--- 6 files changed, 206 insertions(+), 35 deletions(-) create mode 100644 examples/rest/stocks-aggregates_bars_highcharts.py diff --git a/examples/rest/stocks-aggregates_bars_highcharts.py b/examples/rest/stocks-aggregates_bars_highcharts.py new file mode 100644 index 00000000..08fccd4c --- /dev/null +++ b/examples/rest/stocks-aggregates_bars_highcharts.py @@ -0,0 +1,137 @@ +from polygon import RESTClient +from polygon.rest.models import ( + Agg, +) +import datetime +import http.server +import socketserver +import traceback +import json + +# This program retrieves stock price data for the AAPL stock from the Polygon +# API using a REST client, and formats the data in a format expected by the +# Highcharts JavaScript library. The program creates a web server that serves +# an HTML page that includes a candlestick chart of the AAPL stock prices using +# Highcharts. The chart displays data for the time range from January 1, 2019, +# to February 16, 2023. The chart data is updated by retrieving the latest data +# from the Polygon API every time the HTML page is loaded or refreshed. The +# server listens on port 8888 and exits gracefully when a KeyboardInterrupt is +# received. +# +# Connect to http://localhost:8888 in your browser to view candlestick chart. + +PORT = 8888 + +# https://www.highcharts.com/blog/products/stock/ +# JavaScript StockChart with Date-Time Axis +html = """ + + + + + + + + + + + +
+ + + + +""" + +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_aggs( + "AAPL", + 1, + "day", + "2019-01-01", + "2023-02-16", + limit=50000, +) + +# print(aggs) + +data = [] + +# writing data +for agg in aggs: + + # verify this is an agg + if isinstance(agg, Agg): + + # verify this is an int + if isinstance(agg.timestamp, int): + + new_record = { + "date": agg.timestamp, + "open": agg.open, + "high": agg.high, + "low": agg.low, + "close": agg.close, + "volume": agg.volume, + } + + data.append(new_record) + +values = [[v for k, v in d.items()] for d in data] + +# json_data = json.dumps(data) +# print(json_data) + + +class handler(http.server.SimpleHTTPRequestHandler): + def do_GET(self): + if self.path == "/data": + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + json_data = json.dumps(values) + self.wfile.write(json_data.encode()) + else: + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + self.wfile.write(html.encode()) + + +# handle ctrl-c KeyboardInterrupt to exit the program gracefully +try: + while True: + # run http server + with socketserver.TCPServer(("", PORT), handler) as httpd: + print("serving at port", PORT) + httpd.serve_forever() + pass +except KeyboardInterrupt: + print("\nExiting gracefully...") + # traceback.print_exc() diff --git a/examples/rest/stocks-grouped_daily_bars.py b/examples/rest/stocks-grouped_daily_bars.py index 8d9e92c5..ea0ff1cd 100644 --- a/examples/rest/stocks-grouped_daily_bars.py +++ b/examples/rest/stocks-grouped_daily_bars.py @@ -9,7 +9,7 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used grouped = client.get_grouped_daily_aggs( - "2023-02-07", + "2023-02-16", ) # print(grouped) diff --git a/examples/rest/stocks-tickers.py b/examples/rest/stocks-tickers.py index bffd518e..7fc09230 100644 --- a/examples/rest/stocks-tickers.py +++ b/examples/rest/stocks-tickers.py @@ -8,6 +8,6 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used tickers = [] -for t in client.list_tickers(limit=1000): +for t in client.list_tickers(market="stocks", type="CS", active=True, limit=1000): tickers.append(t) print(tickers) diff --git a/examples/rest/stocks-trades_extra.py b/examples/rest/stocks-trades_extra.py index 1015f22a..61bc6b7d 100644 --- a/examples/rest/stocks-trades_extra.py +++ b/examples/rest/stocks-trades_extra.py @@ -21,7 +21,7 @@ if isinstance(t, Trade): # verify these are float - if isinstance(t.price, float) and isinstance(t.size, float): + if isinstance(t.price, float) and isinstance(t.size, int): money += t.price * t.size diff --git a/examples/websocket/stocks-ws.py b/examples/websocket/stocks-ws.py index 98064ece..cf238953 100644 --- a/examples/websocket/stocks-ws.py +++ b/examples/websocket/stocks-ws.py @@ -2,23 +2,28 @@ from polygon.websocket.models import WebSocketMessage from typing import List -client = WebSocketClient("N_4QqOFs3X_pCHeIJjW4pCETSOBerS4_") # api_key is used +# client = WebSocketClient("XXXXXX") # hardcoded api_key is used +client = WebSocketClient() # POLYGON_API_KEY environment variable is used # docs # https://polygon.io/docs/stocks/ws_stocks_am # https://polygon-api-client.readthedocs.io/en/latest/WebSocket.html# -# aggregates -# client.subscribe("AM.*") # aggregates (per minute) -# client.subscribe("A.*") # aggregates (per second) +# aggregates (per minute) +# client.subscribe("AM.*") # all aggregates +# client.subscribe("AM.TSLA") # single ticker + +# aggregates (per second) +client.subscribe("A.*") # all aggregates +# client.subscribe("A.TSLA") # single ticker # trades -# client.subscribe("T.*") # all trades -# client.subscribe("T.TSLA", "T.UBER") # limited trades +# client.subscribe("T.*") # all trades +# client.subscribe("T.TSLA", "T.UBER") # multiple tickers # quotes -# client.subscribe("Q.*") # all quotes -# client.subscribe("Q.TSLA", "Q.UBER") # limited quotes +# client.subscribe("Q.*") # all quotes +# client.subscribe("Q.TSLA", "Q.UBER") # multiple tickers def handle_msg(msgs: List[WebSocketMessage]): diff --git a/examples/websocket/stocks-ws_extra.py b/examples/websocket/stocks-ws_extra.py index 59883e6c..0fdd6bd8 100644 --- a/examples/websocket/stocks-ws_extra.py +++ b/examples/websocket/stocks-ws_extra.py @@ -1,11 +1,11 @@ from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage +from polygon.websocket.models import WebSocketMessage, EquityTrade from typing import List from typing import Dict +from datetime import datetime import time import threading - # docs # https://polygon.io/docs/stocks/ws_stocks_am # https://polygon-api-client.readthedocs.io/en/latest/WebSocket.html# @@ -16,18 +16,6 @@ # program then prints the map, which gives a readout of the top stocks # traded in the past 5 seconds. -# aggregates -# client.subscribe("AM.*") # aggregates (per minute) -# client.subscribe("A.*") # aggregates (per second) - -# trades -# client.subscribe("T.*") # all trades -# client.subscribe("T.TSLA", "T.UBER") # limited trades - -# quotes -# client.subscribe("Q.*") # all quotes -# client.subscribe("Q.TSLA", "Q.UBER") # limited quotes - def run_websocket_client(): # client = WebSocketClient("XXXXXX") # hardcoded api_key is used @@ -38,32 +26,73 @@ def run_websocket_client(): string_map: Dict[str, int] string_map = {} # +cash_traded = float(0) def handle_msg(msgs: List[WebSocketMessage]): for m in msgs: # print(m) - # verify this is a string - if isinstance(m, str): + if type(m) == EquityTrade: - if m.symbol in string_map: - string_map[m.symbol] += 1 - else: - string_map[m.symbol] = 1 + # verify this is a string + if isinstance(m.symbol, str): + if m.symbol in string_map: + string_map[m.symbol] += 1 + else: + string_map[m.symbol] = 1 -# print messages -# client.run(handle_msg) + # verify these are float + if isinstance(m.price, float) and isinstance(m.size, int): + + global cash_traded + cash_traded += m.price * m.size + # print(cash_traded) def top_function(): + + # start timer + start_time = time.time() + sorted_string_map = sorted(string_map.items(), key=lambda x: x[1], reverse=True) print("\033c", end="") # ANSI escape sequence to clear the screen - for index, item in sorted_string_map[:10]: + for index, item in sorted_string_map[:25]: print("{:<15}{:<15}".format(index, item)) - string_map.clear() # clear map for next loop + + # end timer + end_time = time.time() + + # print stats + print() + + # current time + current_time = datetime.now() + print(f"Time: {current_time}") + + # how many tickers seen + ticker_count = len(sorted_string_map) + print(f"Tickers seen: {ticker_count}") + + # how many trades seen + trade_count = 0 + for index, item in sorted_string_map: + trade_count += item + print(f"Trades seen: {trade_count}") + + # cash traded + global cash_traded + formatted_number = "{:,.2f}".format(cash_traded) + print("Roughly " + formatted_number + " cash changed hands") + + # performance? + print(f"Time taken: {end_time - start_time:.6f} seconds") + + # clear map and cash for next loop + string_map.clear() + cash_traded = 0 def run_function_periodically(): From 5d8560ccf1db68cb895b8cf9e54970e71a823361 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 3 Apr 2023 14:49:29 -0700 Subject: [PATCH 227/448] Add crypto, forex, and indices examples (#415) --- examples/rest/crypto-aggregates_bars.py | 27 +++++++++++ examples/rest/crypto-conditions.py | 13 ++++++ examples/rest/crypto-daily_open_close.py | 16 +++++++ examples/rest/crypto-exchanges.py | 27 +++++++++++ examples/rest/crypto-grouped_daily_bars.py | 20 +++++++++ .../crypto-last_trade_for_a_crypto_pair.py | 12 +++++ examples/rest/crypto-market_holidays.py | 22 +++++++++ examples/rest/crypto-market_status.py | 11 +++++ examples/rest/crypto-previous_close.py | 14 ++++++ examples/rest/crypto-snapshots_all_tickers.py | 45 +++++++++++++++++++ .../rest/crypto-snapshots_gainers_losers.py | 43 ++++++++++++++++++ examples/rest/crypto-snapshots_ticker.py | 11 +++++ .../crypto-snapshots_ticker_full_book_l2.py | 13 ++++++ .../rest/crypto-technical_indicators_ema.py | 11 +++++ .../rest/crypto-technical_indicators_macd.py | 11 +++++ .../rest/crypto-technical_indicators_rsi.py | 11 +++++ .../rest/crypto-technical_indicators_sma.py | 11 +++++ examples/rest/crypto-tickers.py | 13 ++++++ examples/rest/crypto-trades.py | 15 +++++++ examples/rest/forex-aggregates_bars.py | 27 +++++++++++ examples/rest/forex-conditions.py | 13 ++++++ examples/rest/forex-exchanges.py | 27 +++++++++++ examples/rest/forex-grouped_daily_bars.py | 22 +++++++++ .../forex-last_quote_for_a_currency_pair.py | 15 +++++++ examples/rest/forex-market_holidays.py | 22 +++++++++ examples/rest/forex-market_status.py | 11 +++++ examples/rest/forex-previous_close.py | 14 ++++++ examples/rest/forex-quotes.py | 13 ++++++ .../forex-real-time_currency_conversion.py | 15 +++++++ examples/rest/forex-snapshots_all_tickers.py | 45 +++++++++++++++++++ .../rest/forex-snapshots_gainers_losers.py | 43 ++++++++++++++++++ examples/rest/forex-snapshots_ticker.py | 11 +++++ .../rest/forex-technical_indicators_ema.py | 11 +++++ .../rest/forex-technical_indicators_macd.py | 11 +++++ .../rest/forex-technical_indicators_rsi.py | 11 +++++ .../rest/forex-technical_indicators_sma.py | 11 +++++ examples/rest/forex-tickers.py | 13 ++++++ examples/rest/indices-aggregates_bars.py | 27 +++++++++++ examples/rest/indices-daily_open_close.py | 16 +++++++ examples/rest/indices-market_holidays.py | 22 +++++++++ examples/rest/indices-market_status.py | 11 +++++ examples/rest/indices-previous_close.py | 14 ++++++ examples/rest/indices-snapshots.py | 13 ++++++ .../rest/indices-technical_indicators_ema.py | 11 +++++ .../rest/indices-technical_indicators_macd.py | 11 +++++ .../rest/indices-technical_indicators_rsi.py | 11 +++++ .../rest/indices-technical_indicators_sma.py | 11 +++++ examples/rest/indices-ticker_types.py | 27 +++++++++++ examples/rest/indices-tickers.py | 13 ++++++ 49 files changed, 868 insertions(+) create mode 100644 examples/rest/crypto-aggregates_bars.py create mode 100644 examples/rest/crypto-conditions.py create mode 100644 examples/rest/crypto-daily_open_close.py create mode 100644 examples/rest/crypto-exchanges.py create mode 100644 examples/rest/crypto-grouped_daily_bars.py create mode 100644 examples/rest/crypto-last_trade_for_a_crypto_pair.py create mode 100644 examples/rest/crypto-market_holidays.py create mode 100644 examples/rest/crypto-market_status.py create mode 100644 examples/rest/crypto-previous_close.py create mode 100644 examples/rest/crypto-snapshots_all_tickers.py create mode 100644 examples/rest/crypto-snapshots_gainers_losers.py create mode 100644 examples/rest/crypto-snapshots_ticker.py create mode 100644 examples/rest/crypto-snapshots_ticker_full_book_l2.py create mode 100644 examples/rest/crypto-technical_indicators_ema.py create mode 100644 examples/rest/crypto-technical_indicators_macd.py create mode 100644 examples/rest/crypto-technical_indicators_rsi.py create mode 100644 examples/rest/crypto-technical_indicators_sma.py create mode 100644 examples/rest/crypto-tickers.py create mode 100644 examples/rest/crypto-trades.py create mode 100644 examples/rest/forex-aggregates_bars.py create mode 100644 examples/rest/forex-conditions.py create mode 100644 examples/rest/forex-exchanges.py create mode 100644 examples/rest/forex-grouped_daily_bars.py create mode 100644 examples/rest/forex-last_quote_for_a_currency_pair.py create mode 100644 examples/rest/forex-market_holidays.py create mode 100644 examples/rest/forex-market_status.py create mode 100644 examples/rest/forex-previous_close.py create mode 100644 examples/rest/forex-quotes.py create mode 100644 examples/rest/forex-real-time_currency_conversion.py create mode 100644 examples/rest/forex-snapshots_all_tickers.py create mode 100644 examples/rest/forex-snapshots_gainers_losers.py create mode 100644 examples/rest/forex-snapshots_ticker.py create mode 100644 examples/rest/forex-technical_indicators_ema.py create mode 100644 examples/rest/forex-technical_indicators_macd.py create mode 100644 examples/rest/forex-technical_indicators_rsi.py create mode 100644 examples/rest/forex-technical_indicators_sma.py create mode 100644 examples/rest/forex-tickers.py create mode 100644 examples/rest/indices-aggregates_bars.py create mode 100644 examples/rest/indices-daily_open_close.py create mode 100644 examples/rest/indices-market_holidays.py create mode 100644 examples/rest/indices-market_status.py create mode 100644 examples/rest/indices-previous_close.py create mode 100644 examples/rest/indices-snapshots.py create mode 100644 examples/rest/indices-technical_indicators_ema.py create mode 100644 examples/rest/indices-technical_indicators_macd.py create mode 100644 examples/rest/indices-technical_indicators_rsi.py create mode 100644 examples/rest/indices-technical_indicators_sma.py create mode 100644 examples/rest/indices-ticker_types.py create mode 100644 examples/rest/indices-tickers.py diff --git a/examples/rest/crypto-aggregates_bars.py b/examples/rest/crypto-aggregates_bars.py new file mode 100644 index 00000000..b75ea762 --- /dev/null +++ b/examples/rest/crypto-aggregates_bars.py @@ -0,0 +1,27 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v2_aggs_ticker__cryptoticker__range__multiplier___timespan___from___to +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs + +# API key injected below for easy use. If not provided, the script will attempt +# to use the environment variable "POLYGON_API_KEY". +# +# setx POLYGON_API_KEY "" <- windows +# export POLYGON_API_KEY="" <- mac/linux +# +# Note: To persist the environment variable you need to add the above command +# to the shell startup script (e.g. .bashrc or .bash_profile. +# +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_aggs( + "X:BTCUSD", + 1, + "day", + "2023-01-30", + "2023-02-03", +) + +print(aggs) diff --git a/examples/rest/crypto-conditions.py b/examples/rest/crypto-conditions.py new file mode 100644 index 00000000..93e3feda --- /dev/null +++ b/examples/rest/crypto-conditions.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v3_reference_conditions +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-conditions + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +conditions = [] +for c in client.list_conditions("crypto", limit=1000): + conditions.append(c) +print(conditions) diff --git a/examples/rest/crypto-daily_open_close.py b/examples/rest/crypto-daily_open_close.py new file mode 100644 index 00000000..8ff3ad41 --- /dev/null +++ b/examples/rest/crypto-daily_open_close.py @@ -0,0 +1,16 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v1_open-close_crypto__from___to___date +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-daily-open-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# make request +request = client.get_daily_open_close_agg( + "X:BTCUSD", + "2023-01-09", +) + +print(request) diff --git a/examples/rest/crypto-exchanges.py b/examples/rest/crypto-exchanges.py new file mode 100644 index 00000000..c5c2cf79 --- /dev/null +++ b/examples/rest/crypto-exchanges.py @@ -0,0 +1,27 @@ +from polygon import RESTClient +from polygon.rest.models import ( + Exchange, +) + +# docs +# https://polygon.io/docs/crypto/get_v3_reference_exchanges +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-exchanges + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +exchanges = client.get_exchanges("crypto") +print(exchanges) + +# loop over exchanges +for exchange in exchanges: + + # verify this is an exchange + if isinstance(exchange, Exchange): + + # print exchange info + print( + "{:<15}{} ({})".format( + exchange.asset_class, exchange.name, exchange.operating_mic + ) + ) diff --git a/examples/rest/crypto-grouped_daily_bars.py b/examples/rest/crypto-grouped_daily_bars.py new file mode 100644 index 00000000..ec1bdb81 --- /dev/null +++ b/examples/rest/crypto-grouped_daily_bars.py @@ -0,0 +1,20 @@ +from polygon import RESTClient +import pprint + +# docs +# https://polygon.io/docs/crypto/get_v2_aggs_grouped_locale_global_market_crypto__date +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-grouped-daily-aggs + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +grouped = client.get_grouped_daily_aggs( + "2023-01-09", locale="global", market_type="crypto" +) + +# print(grouped) + +# pprint (short for "pretty-print") is a module that provides a more human- +# readable output format for data structures. +pp = pprint.PrettyPrinter(indent=2) +pp.pprint(grouped) diff --git a/examples/rest/crypto-last_trade_for_a_crypto_pair.py b/examples/rest/crypto-last_trade_for_a_crypto_pair.py new file mode 100644 index 00000000..850bd98a --- /dev/null +++ b/examples/rest/crypto-last_trade_for_a_crypto_pair.py @@ -0,0 +1,12 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v1_last_crypto__from___to +# https://polygon-api-client.readthedocs.io/en/latest/Trades.html#get-last-crypto-trade + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +trade = client.get_last_crypto_trade("BTC", "USD") + +print(trade) diff --git a/examples/rest/crypto-market_holidays.py b/examples/rest/crypto-market_holidays.py new file mode 100644 index 00000000..13113917 --- /dev/null +++ b/examples/rest/crypto-market_holidays.py @@ -0,0 +1,22 @@ +from polygon import RESTClient +from polygon.rest.models import ( + MarketHoliday, +) + +# docs +# https://polygon.io/docs/crypto/get_v1_marketstatus_upcoming +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-holidays + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +holidays = client.get_market_holidays() +# print(holidays) + +# print date, name, and exchange +for holiday in holidays: + + # verify this is an exchange + if isinstance(holiday, MarketHoliday): + + print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/crypto-market_status.py b/examples/rest/crypto-market_status.py new file mode 100644 index 00000000..4265997c --- /dev/null +++ b/examples/rest/crypto-market_status.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v1_marketstatus_now +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-status + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +result = client.get_market_status() +print(result) diff --git a/examples/rest/crypto-previous_close.py b/examples/rest/crypto-previous_close.py new file mode 100644 index 00000000..bf309fed --- /dev/null +++ b/examples/rest/crypto-previous_close.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v2_aggs_ticker__cryptoticker__prev +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-previous-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_previous_close_agg( + "X:BTCUSD", +) + +print(aggs) diff --git a/examples/rest/crypto-snapshots_all_tickers.py b/examples/rest/crypto-snapshots_all_tickers.py new file mode 100644 index 00000000..91441aae --- /dev/null +++ b/examples/rest/crypto-snapshots_all_tickers.py @@ -0,0 +1,45 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerSnapshot, + Agg, +) + +# docs +# https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-all-snapshots + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +snapshot = client.get_snapshot_all("crypto") # all tickers + +# print raw values +print(snapshot) + +# crunch some numbers +for item in snapshot: + + # verify this is an TickerSnapshot + if isinstance(item, TickerSnapshot): + + # verify this is an Agg + if isinstance(item.prev_day, Agg): + + # verify this is a float + if isinstance(item.prev_day.open, float) and isinstance( + item.prev_day.close, float + ): + + percent_change = ( + (item.prev_day.close - item.prev_day.open) + / item.prev_day.open + * 100 + ) + print( + "{:<15}{:<15}{:<15}{:.2f} %".format( + item.ticker, + item.prev_day.open, + item.prev_day.close, + percent_change, + ) + ) diff --git a/examples/rest/crypto-snapshots_gainers_losers.py b/examples/rest/crypto-snapshots_gainers_losers.py new file mode 100644 index 00000000..61a51fa1 --- /dev/null +++ b/examples/rest/crypto-snapshots_gainers_losers.py @@ -0,0 +1,43 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerSnapshot, +) + +# docs +# https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto__direction +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-gainers-losers-snapshot + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# get gainers +gainers = client.get_snapshot_direction("crypto", "gainers") +# print(gainers) + +# print ticker with % change +for gainer in gainers: + + # verify this is a TickerSnapshot + if isinstance(gainer, TickerSnapshot): + + # verify this is a float + if isinstance(gainer.todays_change_percent, float): + + print("{:<15}{:.2f} %".format(gainer.ticker, gainer.todays_change_percent)) + +print() + +# get losers +losers = client.get_snapshot_direction("crypto", "losers") +# print(losers) + +# print ticker with % change +for loser in losers: + + # verify this is a TickerSnapshot + if isinstance(loser, TickerSnapshot): + + # verify this is a float + if isinstance(loser.todays_change_percent, float): + + print("{:<15}{:.2f} %".format(loser.ticker, loser.todays_change_percent)) diff --git a/examples/rest/crypto-snapshots_ticker.py b/examples/rest/crypto-snapshots_ticker.py new file mode 100644 index 00000000..31a48ebd --- /dev/null +++ b/examples/rest/crypto-snapshots_ticker.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers__ticker +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-ticker-snapshot + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ticker = client.get_snapshot_ticker("crypto", "X:BTCUSD") +print(ticker) diff --git a/examples/rest/crypto-snapshots_ticker_full_book_l2.py b/examples/rest/crypto-snapshots_ticker_full_book_l2.py new file mode 100644 index 00000000..38d239cf --- /dev/null +++ b/examples/rest/crypto-snapshots_ticker_full_book_l2.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers__ticker__book +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-crypto-l2-book-snapshot + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +snapshot = client.get_snapshot_crypto_book("X:BTCUSD") + +# print raw values +print(snapshot) diff --git a/examples/rest/crypto-technical_indicators_ema.py b/examples/rest/crypto-technical_indicators_ema.py new file mode 100644 index 00000000..edd45dee --- /dev/null +++ b/examples/rest/crypto-technical_indicators_ema.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v1_indicators_ema__cryptoticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ema = client.get_ema("X:BTCUSD") +print(ema) diff --git a/examples/rest/crypto-technical_indicators_macd.py b/examples/rest/crypto-technical_indicators_macd.py new file mode 100644 index 00000000..d1f60337 --- /dev/null +++ b/examples/rest/crypto-technical_indicators_macd.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v1_indicators_macd__cryptoticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +macd = client.get_macd("X:BTCUSD") +print(macd) diff --git a/examples/rest/crypto-technical_indicators_rsi.py b/examples/rest/crypto-technical_indicators_rsi.py new file mode 100644 index 00000000..38423590 --- /dev/null +++ b/examples/rest/crypto-technical_indicators_rsi.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v1_indicators_rsi__cryptoticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +rsi = client.get_rsi("X:BTCUSD") +print(rsi) diff --git a/examples/rest/crypto-technical_indicators_sma.py b/examples/rest/crypto-technical_indicators_sma.py new file mode 100644 index 00000000..f343ff7b --- /dev/null +++ b/examples/rest/crypto-technical_indicators_sma.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v1_indicators_sma__cryptoticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +sma = client.get_sma("X:BTCUSD") +print(sma) diff --git a/examples/rest/crypto-tickers.py b/examples/rest/crypto-tickers.py new file mode 100644 index 00000000..8eb07170 --- /dev/null +++ b/examples/rest/crypto-tickers.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v3_reference_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-tickers + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +tickers = [] +for t in client.list_tickers(market="crypto", limit=1000): + tickers.append(t) +print(tickers) diff --git a/examples/rest/crypto-trades.py b/examples/rest/crypto-trades.py new file mode 100644 index 00000000..7cafd989 --- /dev/null +++ b/examples/rest/crypto-trades.py @@ -0,0 +1,15 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/crypto/get_v3_trades__cryptoticker +# https://polygon-api-client.readthedocs.io/en/latest/Trades.html#polygon.RESTClient.list_trades + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +trades = [] +for t in client.list_trades("X:BTC-USD", "2023-02-01", limit=50000): + trades.append(t) + +# prints each trade that took place +print(trades) diff --git a/examples/rest/forex-aggregates_bars.py b/examples/rest/forex-aggregates_bars.py new file mode 100644 index 00000000..56f50aa6 --- /dev/null +++ b/examples/rest/forex-aggregates_bars.py @@ -0,0 +1,27 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v2_aggs_ticker__forexticker__range__multiplier___timespan___from___to +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs + +# API key injected below for easy use. If not provided, the script will attempt +# to use the environment variable "POLYGON_API_KEY". +# +# setx POLYGON_API_KEY "" <- windows +# export POLYGON_API_KEY="" <- mac/linux +# +# Note: To persist the environment variable you need to add the above command +# to the shell startup script (e.g. .bashrc or .bash_profile. +# +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_aggs( + "C:EURUSD", + 1, + "day", + "2023-01-30", + "2023-02-03", +) + +print(aggs) diff --git a/examples/rest/forex-conditions.py b/examples/rest/forex-conditions.py new file mode 100644 index 00000000..fca1e887 --- /dev/null +++ b/examples/rest/forex-conditions.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v3_reference_conditions +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-conditions + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +conditions = [] +for c in client.list_conditions("fx", limit=1000): + conditions.append(c) +print(conditions) diff --git a/examples/rest/forex-exchanges.py b/examples/rest/forex-exchanges.py new file mode 100644 index 00000000..a573a19b --- /dev/null +++ b/examples/rest/forex-exchanges.py @@ -0,0 +1,27 @@ +from polygon import RESTClient +from polygon.rest.models import ( + Exchange, +) + +# docs +# https://polygon.io/docs/options/get_v3_reference_exchanges +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-exchanges + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +exchanges = client.get_exchanges("fx") +print(exchanges) + +# loop over exchanges +for exchange in exchanges: + + # verify this is an exchange + if isinstance(exchange, Exchange): + + # print exchange info + print( + "{:<15}{} ({})".format( + exchange.asset_class, exchange.name, exchange.operating_mic + ) + ) diff --git a/examples/rest/forex-grouped_daily_bars.py b/examples/rest/forex-grouped_daily_bars.py new file mode 100644 index 00000000..f8130877 --- /dev/null +++ b/examples/rest/forex-grouped_daily_bars.py @@ -0,0 +1,22 @@ +from polygon import RESTClient +import pprint + +# docs +# https://polygon.io/docs/forex/get_v2_aggs_grouped_locale_global_market_fx__date +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-grouped-daily-aggs + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +grouped = client.get_grouped_daily_aggs( + "2023-03-27", + locale="global", + market_type="fx", +) + +# print(grouped) + +# pprint (short for "pretty-print") is a module that provides a more human- +# readable output format for data structures. +pp = pprint.PrettyPrinter(indent=2) +pp.pprint(grouped) diff --git a/examples/rest/forex-last_quote_for_a_currency_pair.py b/examples/rest/forex-last_quote_for_a_currency_pair.py new file mode 100644 index 00000000..8b3c78b1 --- /dev/null +++ b/examples/rest/forex-last_quote_for_a_currency_pair.py @@ -0,0 +1,15 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v1_last_quote_currencies__from___to +# https://polygon-api-client.readthedocs.io/en/latest/Quotes.html#get-last-forex-quote + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +quote = client.get_last_forex_quote( + "AUD", + "USD", +) + +print(quote) diff --git a/examples/rest/forex-market_holidays.py b/examples/rest/forex-market_holidays.py new file mode 100644 index 00000000..85489844 --- /dev/null +++ b/examples/rest/forex-market_holidays.py @@ -0,0 +1,22 @@ +from polygon import RESTClient +from polygon.rest.models import ( + MarketHoliday, +) + +# docs +# https://polygon.io/docs/forex/get_v1_marketstatus_upcoming +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-holidays + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +holidays = client.get_market_holidays() +# print(holidays) + +# print date, name, and exchange +for holiday in holidays: + + # verify this is an exchange + if isinstance(holiday, MarketHoliday): + + print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/forex-market_status.py b/examples/rest/forex-market_status.py new file mode 100644 index 00000000..06f544cc --- /dev/null +++ b/examples/rest/forex-market_status.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v1_marketstatus_now +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-status + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +result = client.get_market_status() +print(result) diff --git a/examples/rest/forex-previous_close.py b/examples/rest/forex-previous_close.py new file mode 100644 index 00000000..0de11709 --- /dev/null +++ b/examples/rest/forex-previous_close.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v2_aggs_ticker__forexticker__prev +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-previous-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_previous_close_agg( + "C:EURUSD", +) + +print(aggs) diff --git a/examples/rest/forex-quotes.py b/examples/rest/forex-quotes.py new file mode 100644 index 00000000..880ebca8 --- /dev/null +++ b/examples/rest/forex-quotes.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v3_quotes__fxticker +# https://polygon-api-client.readthedocs.io/en/latest/Quotes.html#list-quotes + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +quotes = [] +for t in client.list_quotes("C:EUR-USD", "2023-02-01", limit=50000): + quotes.append(t) +print(quotes) diff --git a/examples/rest/forex-real-time_currency_conversion.py b/examples/rest/forex-real-time_currency_conversion.py new file mode 100644 index 00000000..b50099c9 --- /dev/null +++ b/examples/rest/forex-real-time_currency_conversion.py @@ -0,0 +1,15 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v1_conversion__from___to +# https://polygon-api-client.readthedocs.io/en/latest/Quotes.html#get-real-time-currency-conversion + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +rate = client.get_real_time_currency_conversion( + "AUD", + "USD", +) + +print(rate) diff --git a/examples/rest/forex-snapshots_all_tickers.py b/examples/rest/forex-snapshots_all_tickers.py new file mode 100644 index 00000000..0650bbc6 --- /dev/null +++ b/examples/rest/forex-snapshots_all_tickers.py @@ -0,0 +1,45 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerSnapshot, + Agg, +) + +# docs +# https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-all-snapshots + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +snapshot = client.get_snapshot_all("forex") # all tickers + +# print raw values +print(snapshot) + +# crunch some numbers +for item in snapshot: + + # verify this is an TickerSnapshot + if isinstance(item, TickerSnapshot): + + # verify this is an Agg + if isinstance(item.prev_day, Agg): + + # verify this is a float + if isinstance(item.prev_day.open, float) and isinstance( + item.prev_day.close, float + ): + + percent_change = ( + (item.prev_day.close - item.prev_day.open) + / item.prev_day.open + * 100 + ) + print( + "{:<15}{:<15}{:<15}{:.2f} %".format( + item.ticker, + item.prev_day.open, + item.prev_day.close, + percent_change, + ) + ) diff --git a/examples/rest/forex-snapshots_gainers_losers.py b/examples/rest/forex-snapshots_gainers_losers.py new file mode 100644 index 00000000..16a59149 --- /dev/null +++ b/examples/rest/forex-snapshots_gainers_losers.py @@ -0,0 +1,43 @@ +from polygon import RESTClient +from polygon.rest.models import ( + TickerSnapshot, +) + +# docs +# https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex__direction +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-gainers-losers-snapshot + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# get gainers +gainers = client.get_snapshot_direction("forex", "gainers") +# print(gainers) + +# print ticker with % change +for gainer in gainers: + + # verify this is a TickerSnapshot + if isinstance(gainer, TickerSnapshot): + + # verify this is a float + if isinstance(gainer.todays_change_percent, float): + + print("{:<15}{:.2f} %".format(gainer.ticker, gainer.todays_change_percent)) + +print() + +# get losers +losers = client.get_snapshot_direction("forex", "losers") +# print(losers) + +# print ticker with % change +for loser in losers: + + # verify this is a TickerSnapshot + if isinstance(loser, TickerSnapshot): + + # verify this is a float + if isinstance(loser.todays_change_percent, float): + + print("{:<15}{:.2f} %".format(loser.ticker, loser.todays_change_percent)) diff --git a/examples/rest/forex-snapshots_ticker.py b/examples/rest/forex-snapshots_ticker.py new file mode 100644 index 00000000..9dbfc0ff --- /dev/null +++ b/examples/rest/forex-snapshots_ticker.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex_tickers__ticker +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html#get-ticker-snapshot + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ticker = client.get_snapshot_ticker("forex", "C:EURUSD") +print(ticker) diff --git a/examples/rest/forex-technical_indicators_ema.py b/examples/rest/forex-technical_indicators_ema.py new file mode 100644 index 00000000..ab927dcb --- /dev/null +++ b/examples/rest/forex-technical_indicators_ema.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v1_indicators_ema__fxticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ema = client.get_ema("C:EURUSD") +print(ema) diff --git a/examples/rest/forex-technical_indicators_macd.py b/examples/rest/forex-technical_indicators_macd.py new file mode 100644 index 00000000..2613f61a --- /dev/null +++ b/examples/rest/forex-technical_indicators_macd.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v1_indicators_macd__fxticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +macd = client.get_macd("C:EURUSD") +print(macd) diff --git a/examples/rest/forex-technical_indicators_rsi.py b/examples/rest/forex-technical_indicators_rsi.py new file mode 100644 index 00000000..0b3001ac --- /dev/null +++ b/examples/rest/forex-technical_indicators_rsi.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v1_indicators_rsi__fxticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +rsi = client.get_rsi("C:EURUSD") +print(rsi) diff --git a/examples/rest/forex-technical_indicators_sma.py b/examples/rest/forex-technical_indicators_sma.py new file mode 100644 index 00000000..22389b63 --- /dev/null +++ b/examples/rest/forex-technical_indicators_sma.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v1_indicators_sma__fxticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +sma = client.get_sma("C:EURUSD") +print(sma) diff --git a/examples/rest/forex-tickers.py b/examples/rest/forex-tickers.py new file mode 100644 index 00000000..c1736721 --- /dev/null +++ b/examples/rest/forex-tickers.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/forex/get_v3_reference_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-tickers + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +tickers = [] +for t in client.list_tickers(market="fx", limit=1000): + tickers.append(t) +print(tickers) diff --git a/examples/rest/indices-aggregates_bars.py b/examples/rest/indices-aggregates_bars.py new file mode 100644 index 00000000..b5305648 --- /dev/null +++ b/examples/rest/indices-aggregates_bars.py @@ -0,0 +1,27 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v2_aggs_ticker__indicesticker__range__multiplier___timespan___from___to +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs + +# API key injected below for easy use. If not provided, the script will attempt +# to use the environment variable "POLYGON_API_KEY". +# +# setx POLYGON_API_KEY "" <- windows +# export POLYGON_API_KEY="" <- mac/linux +# +# Note: To persist the environment variable you need to add the above command +# to the shell startup script (e.g. .bashrc or .bash_profile. +# +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_aggs( + "I:SPX", + 1, + "day", + "2023-03-10", + "2023-03-10", +) + +print(aggs) diff --git a/examples/rest/indices-daily_open_close.py b/examples/rest/indices-daily_open_close.py new file mode 100644 index 00000000..f84a51ab --- /dev/null +++ b/examples/rest/indices-daily_open_close.py @@ -0,0 +1,16 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v1_open-close__indicesticker___date +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-daily-open-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +# make request +request = client.get_daily_open_close_agg( + "I:SPX", + "2023-03-28", +) + +print(request) diff --git a/examples/rest/indices-market_holidays.py b/examples/rest/indices-market_holidays.py new file mode 100644 index 00000000..c1e94932 --- /dev/null +++ b/examples/rest/indices-market_holidays.py @@ -0,0 +1,22 @@ +from polygon import RESTClient +from polygon.rest.models import ( + MarketHoliday, +) + +# docs +# https://polygon.io/docs/indices/get_v1_marketstatus_upcoming +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-holidays + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +holidays = client.get_market_holidays() +# print(holidays) + +# print date, name, and exchange +for holiday in holidays: + + # verify this is an exchange + if isinstance(holiday, MarketHoliday): + + print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/indices-market_status.py b/examples/rest/indices-market_status.py new file mode 100644 index 00000000..6c74dee3 --- /dev/null +++ b/examples/rest/indices-market_status.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v1_marketstatus_now +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-market-status + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +result = client.get_market_status() +print(result) diff --git a/examples/rest/indices-previous_close.py b/examples/rest/indices-previous_close.py new file mode 100644 index 00000000..8774bd6e --- /dev/null +++ b/examples/rest/indices-previous_close.py @@ -0,0 +1,14 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v2_aggs_ticker__indicesticker__prev +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#get-previous-close-agg + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = client.get_previous_close_agg( + "I:SPX", +) + +print(aggs) diff --git a/examples/rest/indices-snapshots.py b/examples/rest/indices-snapshots.py new file mode 100644 index 00000000..ed1560cc --- /dev/null +++ b/examples/rest/indices-snapshots.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v3_snapshot_indices +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/snapshot.py# + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +snapshot = client.get_snapshot_indices("I:SPX") + +# print raw values +print(snapshot) diff --git a/examples/rest/indices-technical_indicators_ema.py b/examples/rest/indices-technical_indicators_ema.py new file mode 100644 index 00000000..bbf9bc39 --- /dev/null +++ b/examples/rest/indices-technical_indicators_ema.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v1_indicators_ema__indicesticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ema = client.get_ema("I:SPX") +print(ema) diff --git a/examples/rest/indices-technical_indicators_macd.py b/examples/rest/indices-technical_indicators_macd.py new file mode 100644 index 00000000..751258aa --- /dev/null +++ b/examples/rest/indices-technical_indicators_macd.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v1_indicators_macd__indicesticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +macd = client.get_macd("I:SPX") +print(macd) diff --git a/examples/rest/indices-technical_indicators_rsi.py b/examples/rest/indices-technical_indicators_rsi.py new file mode 100644 index 00000000..93f1a16b --- /dev/null +++ b/examples/rest/indices-technical_indicators_rsi.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v1_indicators_rsi__indicesticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +rsi = client.get_rsi("I:SPX") +print(rsi) diff --git a/examples/rest/indices-technical_indicators_sma.py b/examples/rest/indices-technical_indicators_sma.py new file mode 100644 index 00000000..5343e54d --- /dev/null +++ b/examples/rest/indices-technical_indicators_sma.py @@ -0,0 +1,11 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v1_indicators_sma__indicesticker +# https://github.com/polygon-io/client-python/blob/master/polygon/rest/indicators.py + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +sma = client.get_sma("I:SPX") +print(sma) diff --git a/examples/rest/indices-ticker_types.py b/examples/rest/indices-ticker_types.py new file mode 100644 index 00000000..ec3277e9 --- /dev/null +++ b/examples/rest/indices-ticker_types.py @@ -0,0 +1,27 @@ +from typing import Optional, Union, List +from urllib3 import HTTPResponse +from polygon import RESTClient +from polygon.rest.models import ( + TickerTypes, +) + +# docs +# https://polygon.io/docs/indices/get_v3_reference_tickers_types +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#get-ticker-types + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +types: Optional[Union[List[TickerTypes], HTTPResponse]] = None + +try: + types = client.get_ticker_types("indices") +except TypeError as e: + if "not NoneType" in str(e): + print("None found") + types = None + else: + raise + +if types is not None: + print(types) diff --git a/examples/rest/indices-tickers.py b/examples/rest/indices-tickers.py new file mode 100644 index 00000000..a0786f19 --- /dev/null +++ b/examples/rest/indices-tickers.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/indices/get_v3_reference_tickers +# https://polygon-api-client.readthedocs.io/en/latest/Reference.html#list-tickers + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +tickers = [] +for t in client.list_tickers(market="indices", limit=1000): + tickers.append(t) +print(tickers) From 46e3a9c1b27b6a3112dbc28a570a652ca472c789 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 4 May 2023 08:38:40 -0700 Subject: [PATCH 228/448] Update README.md (#430) Updated readme with a little burb on getting started and pointing people to the docs and the getting started tutorial. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c707afb6..60e65f31 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ # Polygon Python Client - WebSocket & RESTful APIs -Python client for the [Polygon.io API](https://polygon.io). +Welcome to the official Python client library for the [Polygon](https://polygon.io/) REST and WebSocket API. To get started, please see the [Getting Started](https://polygon.io/docs/stocks/getting-started) section in our documentation, view the [examples](./examples/) directory for code snippets, or the [blog post](https://polygon.io/blog/polygon-io-with-python-for-stock-market-data/) with video tutorials to learn more. ## Install From e9fb4ba8c653f6717f9455879f2327b7a451357e Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 4 May 2023 08:43:46 -0700 Subject: [PATCH 229/448] Update indices-snapshots.py (#431) Fix bug where we're expecting an array of tickers vs a string. --- examples/rest/indices-snapshots.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/rest/indices-snapshots.py b/examples/rest/indices-snapshots.py index ed1560cc..407d2de1 100644 --- a/examples/rest/indices-snapshots.py +++ b/examples/rest/indices-snapshots.py @@ -7,7 +7,8 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -snapshot = client.get_snapshot_indices("I:SPX") +tickers = ["I:SPX", "I:DJI", "I:VIX"] +snapshot = client.get_snapshot_indices(tickers) # print raw values print(snapshot) From dd8f02d0d2cace66396aa997d2a7aa710e3d8256 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 4 May 2023 08:48:53 -0700 Subject: [PATCH 230/448] Update: Add MIC specification for primary exchange (#436) This PR updates this param text to align with our documentation on the website. --- polygon/rest/reference.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 8741e8a0..21deafa2 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -99,7 +99,7 @@ def list_tickers( :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 exchange: Specify the assets primary exchange Market Identifier Code (MIC) according to ISO 10383. 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. From 567815d0c80cb217f46667a035aea6f1a94748ae Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 4 May 2023 08:52:38 -0700 Subject: [PATCH 231/448] Update reference.py to include indices (#435) The v3 Tickers endpoint supports indices too. Minor tweak here to fix this comment. --- polygon/rest/reference.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 21deafa2..0a0b63c3 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -90,7 +90,7 @@ def list_tickers( options: Optional[RequestOptionBuilder] = None, ) -> Union[Iterator[Ticker], HTTPResponse]: """ - Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex. + Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Indices, Forex, and Crypto. :param ticker: Specify a ticker symbol. Defaults to empty string which queries all tickers. :param ticker_lt: Ticker less than. From 37d931fac356b9e2c9904758cbbf56bb5d7e7bf6 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 4 May 2023 09:32:35 -0700 Subject: [PATCH 232/448] Update options-snapshots_options_chain.py (#433) * Update options-snapshots_options_chain.py Updated with better example using additional filters in the params. This was a customer request off the public slack. * Update options-snapshots_options_chain.py Update syntax to fix linting. --- examples/rest/options-snapshots_options_chain.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/rest/options-snapshots_options_chain.py b/examples/rest/options-snapshots_options_chain.py index 85a69d02..9ebdd93a 100644 --- a/examples/rest/options-snapshots_options_chain.py +++ b/examples/rest/options-snapshots_options_chain.py @@ -8,6 +8,12 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used options_chain = [] -for o in client.list_snapshot_options_chain("HCP"): +for o in client.list_snapshot_options_chain( + "HCP", + params={ + "expiration_date.gte": "2024-03-16", + "strike_price.gte": 20, + }, +): options_chain.append(o) print(options_chain) From 384db1104e70909aa2df1e84a3d6210155d60629 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 4 May 2023 09:36:23 -0700 Subject: [PATCH 233/448] Spec spelling/examples updates (#434) * Spec spelling/exmaples updates * Adding more no-code updated spec changes --- .polygon/rest.json | 183 ++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 92 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index c1f8f557..1925b814 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -150,7 +150,7 @@ }, "IndicesTickerPathParam": { "description": "The ticker symbol of Index.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -1041,7 +1041,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -1127,7 +1127,7 @@ "type": "array" }, "spread": { - "description": "The difference between the best bid and the best ask price accross exchanges.", + "description": "The difference between the best bid and the best ask price across exchanges.", "format": "double", "type": "number" }, @@ -1344,7 +1344,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -2479,7 +2479,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -2668,7 +2668,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -3971,7 +3971,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -4226,7 +4226,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -4865,7 +4865,7 @@ "type": "integer" }, "TodaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -5589,7 +5589,7 @@ "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "X:BTC-USD", + "example": "X:BTCUSD", "in": "path", "name": "cryptoTicker", "required": true, @@ -6215,7 +6215,7 @@ "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -6361,16 +6361,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/I:SPX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", + "next_url": "https://api.polygon.io/v1/indicators/ema/I:DJI?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678726291180?limit=35&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678726291180?limit=35&sort=desc" }, "values": [ { - "timestamp": 1678165200000, - "value": 4033.086001449211 + "timestamp": 1681966800000, + "value": 33355.64416487007 } ] }, @@ -7162,7 +7162,7 @@ "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "X:BTC-USD", + "example": "X:BTCUSD", "in": "path", "name": "cryptoTicker", "required": true, @@ -7876,7 +7876,7 @@ "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -8042,24 +8042,24 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/I:SPX?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "next_url": "https://api.polygon.io/v1/indicators/macd/I:DJI?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678726155743?limit=129&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678726155743?limit=129&sort=desc" }, "values": [ { - "histogram": 10.897861258863195, - "signal": -25.314340901212, - "timestamp": 1678168800000, - "value": -14.416479642348804 + "histogram": -48.29157370302107, + "signal": 225.60959338746886, + "timestamp": 1681966800000, + "value": 177.3180196844478 }, { - "histogram": 15.308854617117138, - "signal": -28.038806215927796, - "timestamp": 1678165200000, - "value": -12.729951598810658 + "histogram": -37.55634001543484, + "signal": 237.6824868132241, + "timestamp": 1681963200000, + "value": 200.12614679778926 } ] }, @@ -8955,7 +8955,7 @@ "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "X:BTC-USD", + "example": "X:BTCUSD", "in": "path", "name": "cryptoTicker", "required": true, @@ -9581,7 +9581,7 @@ "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -9727,16 +9727,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/I:SPX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", + "next_url": "https://api.polygon.io/v1/indicators/rsi/I:DJI?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" }, "values": [ { - "timestamp": 1678165200000, - "value": 82.621486402274 + "timestamp": 1681966800000, + "value": 55.89394103205648 } ] }, @@ -10528,7 +10528,7 @@ "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "X:BTC-USD", + "example": "X:BTCUSD", "in": "path", "name": "cryptoTicker", "required": true, @@ -11198,7 +11198,7 @@ "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -11344,16 +11344,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/I:SPX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", + "next_url": "https://api.polygon.io/v1/indicators/sma/I:DJI?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:SPX/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" }, "values": [ { - "timestamp": 1678165200000, - "value": 4035.913999999998 + "timestamp": 1681966800000, + "value": 33236.3424 } ] }, @@ -12892,7 +12892,7 @@ "parameters": [ { "description": "The ticker symbol of Index.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -12917,15 +12917,15 @@ "content": { "application/json": { "example": { - "afterHours": "4,078.49", - "close": "4,045.64", - "from": "2023-01-09", - "high": "4,078.49", - "low": "4,051.82", - "open": "4,055.15", - "preMarket": "4,078.49", + "afterHours": 31909.64, + "close": 32245.14, + "from": "2023-03-10", + "high": 32988.26, + "low": 32200.66, + "open": 32922.75, + "preMarket": 32338.23, "status": "OK", - "symbol": "SPX" + "symbol": "I:DJI" }, "schema": { "properties": { @@ -14235,7 +14235,7 @@ "operationId": "SnapshotSummary", "parameters": [ { - "description": "Comma separated list of tickers. This API currently supports Stocks/Equities, Crypto, Options, and Forex. See the tickers endpoint for more details on supported tickers. If no tickers are passed then no results will be returned.", + "description": "Comma separated list of tickers. This API currently supports Stocks/Equities, Crypto, Options, and Forex. See the tickers endpoint for more details on supported tickers. If no tickers are passed then no results will be returned.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.", "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD", "in": "query", "name": "ticker.any_of", @@ -14454,17 +14454,17 @@ "session": { "properties": { "change": { - "description": "The value of the price change for the contract from the previous trading day.", + "description": "The value of the price change for the asset from the previous trading day.", "format": "double", "type": "number" }, "change_percent": { - "description": "The percent of the price change for the contract from the previous trading day.", + "description": "The percent of the price change for the asset from the previous trading day.", "format": "double", "type": "number" }, "close": { - "description": "The closing price for the asset of the day.", + "description": "The closing price of the asset for the day.", "format": "double", "type": "number" }, @@ -14479,7 +14479,7 @@ "type": "number" }, "high": { - "description": "The highest price for the asset of the day.", + "description": "The highest price of the asset for the day.", "format": "double", "type": "number" }, @@ -14494,22 +14494,22 @@ "type": "number" }, "low": { - "description": "The lowest price for the asset of the day.", + "description": "The lowest price of the asset for the day.", "format": "double", "type": "number" }, "open": { - "description": "The open price for the asset of the day.", + "description": "The open price of the asset for the day.", "format": "double", "type": "number" }, "previous_close": { - "description": "The closing price for the asset of previous trading day.", + "description": "The closing price of the asset for the previous trading day.", "format": "double", "type": "number" }, "volume": { - "description": "The trading volume for the asset of the day.", + "description": "The trading volume for the asset for the day.", "format": "double", "type": "number" } @@ -16089,7 +16089,7 @@ "parameters": [ { "description": "The ticker symbol of Index.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -16107,17 +16107,17 @@ "request_id": "b2170df985474b6d21a6eeccfb6bee67", "results": [ { - "T": "SPX", - "c": "4,048.42", - "h": "4,050.00", - "l": "3,980.31", - "o": "4,048.26", - "t": 1678221584688 + "T": "I:DJI", + "c": 33786.62, + "h": 33786.62, + "l": 33677.74, + "o": 33677.74, + "t": 1682020800000 } ], "resultsCount": 1, "status": "OK", - "ticker": "I:SPX" + "ticker": "I:DJI" }, "schema": { "allOf": [ @@ -16234,7 +16234,7 @@ "parameters": [ { "description": "The ticker symbol of Index.", - "example": "I:SPX", + "example": "I:DJI", "in": "path", "name": "indicesTicker", "required": true, @@ -16318,29 +16318,27 @@ "content": { "application/json": { "example": { + "count": 2, "queryCount": 2, "request_id": "0cf72b6da685bcd386548ffe2895904a", "results": [ { - "c": "4,048.42", - "h": "4,050.00", - "l": "3,980.31", - "n": 1, - "o": "4,048.26", - "t": 1678221133236 + "c": 32245.14, + "h": 32988.26, + "l": 32200.66, + "o": 32922.75, + "t": 1678341600000 }, { - "c": "4,048.42", - "h": "4,050.00", - "l": "3,980.31", - "n": 1, - "o": "4,048.26", - "t": 1678221139690 + "c": 31787.7, + "h": 32422.100000000002, + "l": 31786.06, + "o": 32198.9, + "t": 1678428000000 } ], - "resultsCount": 2, "status": "OK", - "ticker": "I:SPX" + "ticker": "I:DJI" }, "schema": { "allOf": [ @@ -18532,7 +18530,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -18881,7 +18879,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -19071,7 +19069,7 @@ "type": "array" }, "spread": { - "description": "The difference between the best bid and the best ask price accross exchanges.", + "description": "The difference between the best bid and the best ask price across exchanges.", "format": "double", "type": "number" }, @@ -19402,7 +19400,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -19706,7 +19704,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -20020,7 +20018,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -20325,7 +20323,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -20735,7 +20733,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -21129,7 +21127,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -21522,7 +21520,7 @@ "type": "string" }, "todaysChange": { - "description": "The value of the change the from previous day.", + "description": "The value of the change from the previous day.", "format": "double", "type": "number" }, @@ -26524,7 +26522,7 @@ "operationId": "IndicesSnapshot", "parameters": [ { - "description": "Comma separated list of tickers", + "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.", "example": "I:SPX", "in": "query", "name": "ticker.any_of", @@ -26553,6 +26551,7 @@ "previous_close": 3812.19 }, "ticker": "I:SPX", + "timeframe": "REAL-TIME", "type": "indices", "value": 3822.39 }, @@ -26884,7 +26883,7 @@ "expiration_date": "2022-01-21", "shares_per_contract": 100, "strike_price": 150, - "ticker": "AAPL211022C000150000" + "ticker": "O:AAPL211022C000150000" }, "greeks": { "delta": 1, From b9c5be187924cab211c5b3fcea76f3e1c50fae90 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 11 May 2023 07:54:05 -0700 Subject: [PATCH 234/448] Added demo for correlation matrix (#441) * Added demo for correlation matrix --- examples/rest/demo_correlation_matrix.py | 136 +++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 examples/rest/demo_correlation_matrix.py diff --git a/examples/rest/demo_correlation_matrix.py b/examples/rest/demo_correlation_matrix.py new file mode 100644 index 00000000..dbb37cec --- /dev/null +++ b/examples/rest/demo_correlation_matrix.py @@ -0,0 +1,136 @@ +""" +This script computes and visualizes the correlation matrix of a selected set of +stocks using Polygon's API. This script is for educational purposes only and is +not intended to provide investment advice. The examples provided analyze the +correlation between different stocks from diverse sectors, as well as within +specific sectors. + +Before running this script, there are 4 prerequisites: + +1) Dependencies: Ensure that the following Python libraries are installed in + your environment: + - pandas + - numpy + - seaborn + - matplotlib.pyplot + - polygon's python-client library + + You can likely run: + pip install pandas numpy seaborn matplotlib polygon-api-client + +2) API Key: You will need a Polygon API key to fetch the stock data. This can + be set manually in the script below, or you can set an environment variable + 'POLYGON_API_KEY'. + + setx POLYGON_API_KEY "" <- windows + export POLYGON_API_KEY="" <- mac/linux + +3) Select Stocks: You need to select the stocks you're interested in analyzing. + Update the 'symbols' variable in this script with your chosen stock symbols. + +4) Select Date Range: You need to specify the date range for the historical + data that you want to fetch. Update the 'start_date' and 'end_date' + variables in this script accordingly. + +Understanding stock correlation is important when building a diverse portfolio, +as it can help manage risk and inform investment strategies. It's always +essential to do your own research or consult a financial advisor for +personalized advice when investing. +""" +import pandas as pd # type: ignore +import numpy as np # type: ignore +import seaborn as sns # type: ignore +import matplotlib.pyplot as plt # type: ignore +from polygon import RESTClient + +# Less likely to be correlated due to being in different sectors and are +# exposed to different market forces, economic trends, and price risks. +# symbols = ["TSLA", "PFE", "XOM", "HD", "JPM", "AAPL", "KO", "UNH", "LMT", "AMZN"] + +# Here we have two groups, one with 5 technology stocks and another with 5 oil +# stocks. These two groups are likely to be highly correlated within their +# respective sectors but are expected to be less correlated between sectors. +# symbols = ["AAPL", "MSFT", "GOOG", "ADBE", "CRM", "XOM", "CVX", "COP", "PSX", "OXY"] + +# Likely to be highly correlated due to being in the technology sector, +# specifically in the sub-industry of Semiconductors: +symbols = ["INTC", "AMD", "NVDA", "TXN", "QCOM", "MU", "AVGO", "ADI", "MCHP", "NXPI"] + +# Date range you are interested in +start_date = "2022-04-01" +end_date = "2023-05-10" + + +def fetch_stock_data(symbols, start_date, end_date): + stocks = [] + + # client = RESTClient("XXXXXX") # hardcoded api_key is used + client = RESTClient() # POLYGON_API_KEY environment variable is used + + try: + for symbol in symbols: + aggs = client.get_aggs( + symbol, + 1, + "day", + start_date, + end_date, + ) + df = pd.DataFrame(aggs, columns=["timestamp", "close"]) + + # Filter out rows with invalid timestamps + df = df[df["timestamp"] > 0] + + df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms") + df.set_index("timestamp", inplace=True) + + df.rename(columns={"close": symbol}, inplace=True) + stocks.append(df) + finally: + pass + + merged_stocks = pd.concat(stocks, axis=1) + return merged_stocks + + +def calculate_daily_returns(stock_data): + daily_returns = stock_data.pct_change().dropna() + return daily_returns + + +def compute_correlation_matrix(daily_returns): + correlation_matrix = daily_returns.corr() + return correlation_matrix + + +def plot_correlation_heatmap(correlation_matrix): + plt.figure(figsize=(8, 8)) + ax = sns.heatmap( + correlation_matrix, + annot=True, + cmap="coolwarm", + vmin=-1, + vmax=1, + square=True, + linewidths=0.5, + cbar_kws={"shrink": 0.8}, + ) + ax.xaxis.tick_top() + ax.xaxis.set_label_position("top") + plt.title("Correlation Matrix Heatmap", y=1.08) + plt.show() + + +def main(): + stock_data = fetch_stock_data(symbols, start_date, end_date) + daily_returns = calculate_daily_returns(stock_data) + correlation_matrix = compute_correlation_matrix(daily_returns) + + print("Correlation Matrix:") + print(correlation_matrix) + + plot_correlation_heatmap(correlation_matrix) + + +if __name__ == "__main__": + main() From d271e44def5b2c3312c8178087a8a5df169f3279 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 17 May 2023 07:55:44 -0700 Subject: [PATCH 235/448] Fix ws IndexValue parse (#428) --- polygon/websocket/models/__init__.py | 2 ++ polygon/websocket/models/models.py | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py index 184acba9..bbc65cbb 100644 --- a/polygon/websocket/models/__init__.py +++ b/polygon/websocket/models/__init__.py @@ -26,6 +26,8 @@ def parse_single(data: Dict[str, Any]): return LimitUpLimitDown.from_dict(data) elif event_type == EventType.CryptoL2.value: return Level2Book.from_dict(data) + elif event_type == EventType.Value.value: + return IndexValue.from_dict(data) return None diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 9c68db39..dc37189e 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -317,10 +317,12 @@ class IndexValue: @staticmethod def from_dict(d): - d.get("ev", None), - d.get("val", None), - d.get("T", None), - d.get("t", None) + return IndexValue( + d.get("ev", None), + d.get("val", None), + d.get("T", None), + d.get("t", None), + ) WebSocketMessage = NewType( From 0b86ae7a1623b828bbaff43857bce658b2736120 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 17 May 2023 08:01:07 -0700 Subject: [PATCH 236/448] Add indices.py ws example (#429) Adding a example Indices example that works for streaming both aggregates and values. --- examples/websocket/indices.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 examples/websocket/indices.py diff --git a/examples/websocket/indices.py b/examples/websocket/indices.py new file mode 100644 index 00000000..83ecf27b --- /dev/null +++ b/examples/websocket/indices.py @@ -0,0 +1,27 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, Market +from typing import List + +client = WebSocketClient(market=Market.Indices) + +# aggregates (per minute) +# client.subscribe("AM.*") # all aggregates +client.subscribe("AM.I:SPX") # Standard & Poor's 500 +client.subscribe("AM.I:DJI") # Dow Jones Industrial Average +client.subscribe("AM.I:NDX") # Nasdaq-100 +client.subscribe("AM.I:VIX") # Volatility Index + +# single index +# client.subscribe("V.*") # all tickers +# client.subscribe("V.I:SPX") # Standard & Poor's 500 +# client.subscribe("V.I:DJI") # Dow Jones Industrial Average +# client.subscribe("V.I:NDX") # Nasdaq-100 +# client.subscribe("V.I:VIX") # Volatility Index + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + +client.run(handle_msg) From 5f36401f021acf260c7ddb37170788fd3dd2feb9 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 18 May 2023 08:37:45 -0700 Subject: [PATCH 237/448] Update demo_correlation_matrix.py (#443) Added links to tutorial and video. --- examples/rest/demo_correlation_matrix.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/rest/demo_correlation_matrix.py b/examples/rest/demo_correlation_matrix.py index dbb37cec..f056ab6d 100644 --- a/examples/rest/demo_correlation_matrix.py +++ b/examples/rest/demo_correlation_matrix.py @@ -3,7 +3,10 @@ stocks using Polygon's API. This script is for educational purposes only and is not intended to provide investment advice. The examples provided analyze the correlation between different stocks from diverse sectors, as well as within -specific sectors. +specific sectors. + +Blog: https://polygon.io/blog/finding-correlation-between-stocks/ +Video: https://www.youtube.com/watch?v=q0TgaUGWPFc Before running this script, there are 4 prerequisites: From 3cc7130134b88320f7fa557a4ac22d94d1005054 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 18 May 2023 09:30:04 -0700 Subject: [PATCH 238/448] Add trace option for better API call debugging (#432) * Add `trace=True` option for debugging --- polygon/rest/__init__.py | 4 +++- polygon/rest/base.py | 23 ++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/polygon/rest/__init__.py b/polygon/rest/__init__.py index aa8722e3..7484378e 100644 --- a/polygon/rest/__init__.py +++ b/polygon/rest/__init__.py @@ -17,7 +17,6 @@ from typing import Optional, Any import os - BASE = "https://api.polygon.io" ENV_KEY = "POLYGON_API_KEY" @@ -46,6 +45,7 @@ def __init__( retries: int = 3, base: str = BASE, verbose: bool = False, + trace: bool = False, custom_json: Optional[Any] = None, ): super().__init__( @@ -56,6 +56,7 @@ def __init__( retries=retries, base=base, verbose=verbose, + trace=trace, custom_json=custom_json, ) self.vx = VXClient( @@ -66,5 +67,6 @@ def __init__( retries=retries, base=base, verbose=verbose, + trace=trace, custom_json=custom_json, ) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 69d06dde..1523114e 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -9,6 +9,7 @@ from .models.request import RequestOptionBuilder from ..logging import get_logger import logging +from urllib.parse import urlencode from ..exceptions import AuthError, BadResponse, NoResultsError logger = get_logger("RESTClient") @@ -29,6 +30,7 @@ def __init__( retries: int, base: str, verbose: bool, + trace: bool, custom_json: Optional[Any] = None, ): if api_key is None: @@ -58,6 +60,7 @@ def __init__( self.retries = retries if verbose: logger.setLevel(logging.DEBUG) + self.trace = trace if custom_json: self.json = custom_json else: @@ -77,14 +80,32 @@ def _get( ) -> Any: option = options if options is not None else RequestOptionBuilder() + headers = self._concat_headers(option.headers) + + if self.trace: + full_url = f"{self.BASE}{path}" + if params: + full_url += f"?{urlencode(params)}" + print_headers = headers.copy() + if "Authorization" in print_headers: + print_headers["Authorization"] = print_headers["Authorization"].replace( + self.API_KEY, "REDACTED" + ) + print(f"Request URL: {full_url}") + print(f"Request Headers: {print_headers}") + resp = self.client.request( "GET", self.BASE + path, fields=params, retries=self.retries, - headers=self._concat_headers(option.headers), + headers=headers, ) + if self.trace: + resp_headers_dict = dict(resp.headers.items()) + print(f"Response Headers: {resp_headers_dict}") + if resp.status != 200: raise BadResponse(resp.data.decode("utf-8")) From 6d5adb3a0e5c52a8e2bc72462c79b2247c152a55 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 16:35:17 +0000 Subject: [PATCH 239/448] Bump types-urllib3 from 1.26.25.4 to 1.26.25.13 (#442) --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index e40bec4d..e52a88b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -845,14 +845,14 @@ files = [ [[package]] name = "types-urllib3" -version = "1.26.25.4" +version = "1.26.25.13" description = "Typing stubs for urllib3" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-urllib3-1.26.25.4.tar.gz", hash = "sha256:eec5556428eec862b1ac578fb69aab3877995a99ffec9e5a12cf7fbd0cc9daee"}, - {file = "types_urllib3-1.26.25.4-py3-none-any.whl", hash = "sha256:ed6b9e8a8be488796f72306889a06a3fc3cb1aa99af02ab8afb50144d7317e49"}, + {file = "types-urllib3-1.26.25.13.tar.gz", hash = "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5"}, + {file = "types_urllib3-1.26.25.13-py3-none-any.whl", hash = "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"}, ] [[package]] From 8183fb80cea11fc3e402e6be61a6d89788573ced Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 16:54:59 +0000 Subject: [PATCH 240/448] Bump pook from 1.0.2 to 1.1.1 (#362) --- poetry.lock | 9 ++++----- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index e52a88b6..fa5fbf77 100644 --- a/poetry.lock +++ b/poetry.lock @@ -501,15 +501,14 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.0.2" +version = "1.1.1" description = "HTTP traffic mocking and expectations made easy" category = "dev" optional = false python-versions = "*" files = [ - {file = "pook-1.0.2-py2-none-any.whl", hash = "sha256:cd3cbfe280d544e672f41a5b9482883841ba247f865858b57fd59f729e37616a"}, - {file = "pook-1.0.2-py3-none-any.whl", hash = "sha256:2e16d231ec9fe071c14cad7fe41261f65b401f6cb30935a169cf6fc229bd0a1d"}, - {file = "pook-1.0.2.tar.gz", hash = "sha256:f28112db062d17db245b351c80f2bb5bf1e56ebfa93d3d75cc44f500c15c40eb"}, + {file = "pook-1.1.1-py3-none-any.whl", hash = "sha256:0bf4f8b53739e165722263c894a27140cf7f3ae6e7a378e4cbf48fdca4abe037"}, + {file = "pook-1.1.1.tar.gz", hash = "sha256:53da04930616d94eeede77a39d6b5f0fac1f7bbd160d8f54bc468cd798b93956"}, ] [package.dependencies] @@ -994,4 +993,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0ceda7003d52f8216a350254f9e703cfe760fb274687d64679a077f67d6e9021" +content-hash = "b14c33076a17bb1c784a476c91d1541082057e32ee7207234253834b6f7c6fff" diff --git a/pyproject.toml b/pyproject.toml index a8c8d35e..3d5f6744 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^1.0.0" sphinx-autodoc-typehints = "^1.19.2" types-certifi = "^2021.10.8" types-setuptools = "^67.4.0" -pook = "^1.0.2" +pook = "^1.1.1" orjson = "^3.8.7" [build-system] From 86e2e06a79b2f33579b4b24a991508815be3f4e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 17:06:23 +0000 Subject: [PATCH 241/448] Bump sphinx-autodoc-typehints from 1.19.5 to 1.23.0 (#427) --- poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index fa5fbf77..98749992 100644 --- a/poetry.lock +++ b/poetry.lock @@ -674,22 +674,22 @@ test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.19.5" +version = "1.23.0" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "sphinx_autodoc_typehints-1.19.5-py3-none-any.whl", hash = "sha256:ea55b3cc3f485e3a53668bcdd08de78121ab759f9724392fdb5bf3483d786328"}, - {file = "sphinx_autodoc_typehints-1.19.5.tar.gz", hash = "sha256:38a227378e2bc15c84e29af8cb1d7581182da1107111fd1c88b19b5eb7076205"}, + {file = "sphinx_autodoc_typehints-1.23.0-py3-none-any.whl", hash = "sha256:ac099057e66b09e51b698058ba7dd76e57e1fe696cd91b54e121d3dad188f91d"}, + {file = "sphinx_autodoc_typehints-1.23.0.tar.gz", hash = "sha256:5d44e2996633cdada499b6d27a496ddf9dbc95dd1f0f09f7b37940249e61f6e9"}, ] [package.dependencies] sphinx = ">=5.3" [package.extras] -docs = ["furo (>=2022.9.29)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] -testing = ["covdefaults (>=2.2)", "coverage (>=6.5)", "diff-cover (>=7.0.1)", "nptyping (>=2.3.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "sphobjinv (>=2.2.2)", "typing-extensions (>=4.4)"] +docs = ["furo (>=2022.12.7)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23.4)"] +testing = ["covdefaults (>=2.2.2)", "coverage (>=7.2.2)", "diff-cover (>=7.5)", "nptyping (>=2.5)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.5)"] type-comment = ["typed-ast (>=1.5.4)"] [[package]] @@ -993,4 +993,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "b14c33076a17bb1c784a476c91d1541082057e32ee7207234253834b6f7c6fff" +content-hash = "5e3c01ace8d7de788f8ccad60b3d3e2461b725d38eead4f67f37f6959c37881f" diff --git a/pyproject.toml b/pyproject.toml index 3d5f6744..695e4a35 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.19.2" +sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" types-setuptools = "^67.4.0" pook = "^1.1.1" From 9d32924e5b90418188a040a7b8a96b0f9f787e05 Mon Sep 17 00:00:00 2001 From: Gavin Golden Date: Thu, 18 May 2023 12:41:55 -0500 Subject: [PATCH 242/448] Support v3/snapshot (#444) --- README.md | 14 ++- docs/source/Models.rst | 30 ++++++ docs/source/Snapshot.rst | 24 ++++- examples/rest/universal-snapshot.py | 46 +++++++++ polygon/rest/models/snapshot.py | 142 ++++++++++++++++++++++++++++ polygon/rest/snapshot.py | 43 +++++++++ test_rest/mocks/v3/snapshot.json | 113 ++++++++++++++++++++++ test_rest/test_snapshots.py | 115 +++++++++++++++++++++- 8 files changed, 521 insertions(+), 6 deletions(-) create mode 100644 examples/rest/universal-snapshot.py create mode 100644 test_rest/mocks/v3/snapshot.json diff --git a/README.md b/README.md index 60e65f31..6a94717e 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,19 @@ Once installed run `poetry install` to install the required dependencies. This s #### Makefile -Our Makefile has the common operations needed when developing on this repo. Running tests and linting can both be run through our Makefile. Just run `make help` to see the list of available commands. +Our Makefile has the common operations needed when developing on this repo. Running tests and linting can both be +run through our Makefile. Just run `make help` to see the list of available commands. + +If you're using `pyenv` to manage active Python versions then you might need to launch a Poetry shell before running +Make commands in order to actually use your chosen Python version. This is because Poetry uses the system Python version +by default. + +```shell +poetry shell # start shell +poetry install # install deps + +make test # run your make commands +``` ## Release planning This client will attempt to follow the release cadence of our API. diff --git a/docs/source/Models.rst b/docs/source/Models.rst index 1b41c235..f0eed1c7 100644 --- a/docs/source/Models.rst +++ b/docs/source/Models.rst @@ -3,6 +3,36 @@ Models ============================================================== +============================================================== +Universal Snapshot +============================================================== +.. autoclass:: polygon.rest.models.UniversalSnapshot + +============================================================== +Universal Snapshot Session +============================================================== +.. autoclass:: polygon.rest.models.UniversalSnapshotSession + +============================================================== +Universal Snapshot Last Quote +============================================================== +.. autoclass:: polygon.rest.models.UniversalSnapshotLastQuote + +============================================================== +Universal Snapshot Last Trade +============================================================== +.. autoclass:: polygon.rest.models.UniversalSnapshotLastTrade + +============================================================== +Universal Snapshot Details +============================================================== +.. autoclass:: polygon.rest.models.UniversalSnapshotDetails + +============================================================== +Universal Snapshot Underlying Asset +============================================================== +.. autoclass:: polygon.rest.models.UniversalSnapshotUnderlyingAsset + ============================================================== Agg ============================================================== diff --git a/docs/source/Snapshot.rst b/docs/source/Snapshot.rst index 0214cc9d..7744ba1c 100644 --- a/docs/source/Snapshot.rst +++ b/docs/source/Snapshot.rst @@ -4,13 +4,24 @@ Snapshot ================================= ================================= -Get all snapshots +Get snapshots for all asset types ================================= - `Stocks snapshot all tickers`_ +- `Options snapshot all tickers`_ - `Forex snapshot all tickers`_ - `Crypto snapshot all tickers`_ +.. automethod:: polygon.RESTClient.list_universal_snapshots + +================================= +Get all snapshots +================================= + +- `Stocks snapshot all tickers (deprecated)`_ +- `Forex snapshot all tickers (deprecated)`_ +- `Crypto snapshot all tickers (deprecated)`_ + .. automethod:: polygon.RESTClient.get_snapshot_all ================================= @@ -49,9 +60,14 @@ Get crypto L2 book snapshot .. automethod:: polygon.RESTClient.get_snapshot_crypto_book -.. _Stocks snapshot all tickers: https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks_tickers -.. _Forex snapshot all tickers: https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex_tickers -.. _Crypto snapshot all tickers: https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers +.. _Stocks snapshot all tickers: https://polygon.io/docs/stocks/get_v3_snapshot +.. _Options snapshot all tickers: https://polygon.io/docs/options/get_v3_snapshot +.. _Forex snapshot all tickers: https://polygon.io/docs/forex/get_v3_snapshot +.. _Crypto snapshot all tickers:: https://polygon.io/docs/crypto/get_v3_snapshot +.. _Stocks snapshot all tickers (deprecated): https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks_tickers +.. _Options snapshot all tickers (deprecated): https://polygon.io/docs/options/get_v2_snapshot_locale_us_markets_stocks_tickers +.. _Forex snapshot all tickers (deprecated): https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex_tickers +.. _Crypto snapshot all tickers (deprecated):: https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto_tickers .. _Stocks snapshot gainers/losers: https://polygon.io/docs/stocks/get_v2_snapshot_locale_us_markets_stocks__direction .. _Forex snapshot gainers/losers: https://polygon.io/docs/forex/get_v2_snapshot_locale_global_markets_forex__direction .. _Crypto snapshot gainers/losers: https://polygon.io/docs/crypto/get_v2_snapshot_locale_global_markets_crypto__direction diff --git a/examples/rest/universal-snapshot.py b/examples/rest/universal-snapshot.py new file mode 100644 index 00000000..8f4d9be6 --- /dev/null +++ b/examples/rest/universal-snapshot.py @@ -0,0 +1,46 @@ +from typing import cast, Iterator, Union + +from urllib3 import HTTPResponse + +from polygon import RESTClient +from polygon.rest.models import UniversalSnapshot, SnapshotMarketType + +# docs +# https://polygon.io/docs/stocks/get_v3_snapshot +# https://polygon-api-client.readthedocs.io/en/latest/Snapshot.html + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + + +def print_snapshots(iterator: Union[Iterator[UniversalSnapshot], HTTPResponse]): + snapshots = [s for s in iterator] + + print(f"count: {len(snapshots)}") + + for item in snapshots: + print(item) + + +# it = client.list_universal_snapshots() # all tickers for all assets types in lexicographical order + +it = client.list_universal_snapshots( + ticker_any_of=[ + "AAPL", + "O:AAPL230519C00055000", + "DOES_NOT_EXIST", + "X:1INCHUSD", + "C:AEDAUD", + ] +) +print_snapshots(it) + +it = client.list_universal_snapshots( + market_type=SnapshotMarketType.STOCKS, ticker_gt="A", ticker_lt="AAPL" +) +print_snapshots(it) + +it = client.list_universal_snapshots( + market_type=SnapshotMarketType.STOCKS, ticker_gte="AAPL", ticker_lte="ABB" +) +print_snapshots(it) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index f1905f22..ac901ed2 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -277,3 +277,145 @@ def from_dict(d): spread=d.get("spread", None), updated=d.get("updated", None), ) + + +@modelclass +class UniversalSnapshotSession: + """Contains data about the most recent trading session for an asset.""" + + price: Optional[float] = None + change: Optional[float] = None + change_percent: Optional[float] = None + early_trading_change: Optional[float] = None + early_trading_change_percent: Optional[float] = None + late_trading_change: Optional[float] = None + late_trading_change_percent: Optional[float] = None + open: Optional[float] = None + close: Optional[float] = None + high: Optional[float] = None + low: Optional[float] = None + previous_close: Optional[float] = None + volume: Optional[float] = None + + @staticmethod + def from_dict(d): + return UniversalSnapshotSession(**d) + + +@modelclass +class UniversalSnapshotLastQuote: + """Contains the most recent quote for an asset.""" + + ask: Optional[float] = None + ask_size: Optional[float] = None + bid: Optional[float] = None + bid_size: Optional[float] = None + midpoint: Optional[float] = None + exchange: Optional[int] = None + timeframe: Optional[str] = None + last_updated: Optional[int] = None + + @staticmethod + def from_dict(d): + return UniversalSnapshotLastQuote(**d) + + +@modelclass +class UniversalSnapshotLastTrade: + """Contains the most recent trade for an asset.""" + + id: Optional[int] = None + price: Optional[float] = None + size: Optional[int] = None + exchange: Optional[int] = None + conditions: Optional[List[int]] = None + timeframe: Optional[str] = None + last_updated: Optional[int] = None + participant_timestamp: Optional[int] = None + sip_timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return UniversalSnapshotLastTrade(**d) + + +@modelclass +class UniversalSnapshotUnderlyingAsset: + """Contains data for the underlying stock in an options contract.""" + + ticker: Optional[str] = None + price: Optional[float] = None + value: Optional[float] = None + change_to_break_even: Optional[float] = None + timeframe: Optional[str] = None + last_updated: Optional[int] = None + + @staticmethod + def from_dict(d): + return UniversalSnapshotUnderlyingAsset(**d) + + +@modelclass +class UniversalSnapshotDetails: + """Contains details for an options contract.""" + + contract_type: Optional[str] = None + exercise_style: Optional[str] = None + expiration_date: Optional[str] = None + shares_per_contract: Optional[float] = None + strike_price: Optional[float] = None + + @staticmethod + def from_dict(d): + return UniversalSnapshotDetails(**d) + + +@modelclass +class UniversalSnapshot: + """Contains snapshot data for an asset.""" + + ticker: Optional[str] = None + type: Optional[str] = None + session: Optional[UniversalSnapshotSession] = None + last_quote: Optional[UniversalSnapshotLastQuote] = None + last_trade: Optional[UniversalSnapshotLastTrade] = None + greeks: Optional[Greeks] = None + underlying_asset: Optional[UniversalSnapshotUnderlyingAsset] = None + details: Optional[UniversalSnapshotDetails] = None + break_even_price: Optional[float] = None + implied_volatility: Optional[float] = None + open_interest: Optional[float] = None + market_status: Optional[str] = None + name: Optional[str] = None + error: Optional[str] = None + message: Optional[str] = None + + @staticmethod + def from_dict(d): + return UniversalSnapshot( + ticker=d.get("ticker", None), + type=d.get("type", None), + session=None + if "session" not in d + else UniversalSnapshotSession.from_dict(d["session"]), + last_quote=None + if "last_quote" not in d + else UniversalSnapshotLastQuote.from_dict(d["last_quote"]), + last_trade=None + if "last_trade" not in d + else UniversalSnapshotLastTrade.from_dict(d["last_trade"]), + greeks=None if "greeks" not in d else Greeks.from_dict(d["greeks"]), + underlying_asset=None + if "underlying_asset" not in d + else UniversalSnapshotUnderlyingAsset.from_dict(d["underlying_asset"]), + details=None + if "details" not in d + else UniversalSnapshotDetails.from_dict(d["details"]), + break_even_price=d.get("break_even_price", None), + implied_volatility=d.get("implied_volatility", None), + open_interest=d.get("open_interest", None), + market_status=d.get("market_status", None), + name=d.get("name", None), + error=d.get("error", None), + message=d.get("message", None), + ) diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 696f7379..0fb19fd0 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -6,6 +6,7 @@ OptionContractSnapshot, SnapshotMarketType, SnapshotTickerFullBook, + UniversalSnapshot, IndicesSnapshot, ) from urllib3 import HTTPResponse @@ -21,6 +22,48 @@ def get_locale(market_type: Union[SnapshotMarketType, str]): class SnapshotClient(BaseClient): + def list_universal_snapshots( + self, + market_type: Optional[Union[str, SnapshotMarketType]] = None, + ticker_any_of: Optional[List[str]] = None, + ticker_lt: Optional[str] = None, + ticker_lte: Optional[str] = None, + ticker_gt: Optional[str] = None, + ticker_gte: Optional[str] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[Iterator[UniversalSnapshot], HTTPResponse]: + """ + Get snapshots for assets of all types + - https://polygon.io/docs/stocks/get_v3_snapshot + - https://polygon.io/docs/options/get_v3_snapshot + - https://polygon.io/docs/indices/get_v3_snapshot + - https://polygon.io/docs/forex/get_v3_snapshot + - https://polygon.io/docs/crypto/get_v3_snapshot + + :param market_type: the type of the asset + :param ticker_any_of: Comma-separated list of tickers, up to a maximum of 250. If no tickers are passed then all + results will be returned in a paginated manner. Warning: The maximum number of characters allowed in a URL + are subject to your technology stack. + :param ticker_lt search for tickers less than + :param ticker_lte search for tickers less than or equal to + :param ticker_gt search for tickers greater than + :param ticker_gte search for tickers greater than or equal to + :param raw: returns the raw HTTP response if true, else the response is deserialized into a structured object + :param options: request options + :return: list of Snapshots + """ + url = f"/v3/snapshot" + return self._paginate( + path=url, + params=self._get_params(self.list_universal_snapshots, locals()), + result_key="results", + deserializer=UniversalSnapshot.from_dict, + raw=raw, + options=options, + ) + def get_snapshot_all( self, market_type: Union[str, SnapshotMarketType], diff --git a/test_rest/mocks/v3/snapshot.json b/test_rest/mocks/v3/snapshot.json new file mode 100644 index 00000000..c9ccb730 --- /dev/null +++ b/test_rest/mocks/v3/snapshot.json @@ -0,0 +1,113 @@ +{ + "request_id": "abc123", + "results": [ + { + "break_even_price": 171.075, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-10-14", + "shares_per_contract": 100, + "strike_price": 5, + "underlying_ticker": "NCLH" + }, + "greeks": { + "delta": 0.5520187372272933, + "gamma": 0.00706756515659829, + "theta": -0.018532772783847958, + "vega": 0.7274811132998142 + }, + "implied_volatility": 0.3048997097864957, + "last_quote": { + "ask": 21.25, + "ask_size": 110, + "bid": 20.9, + "bid_size": 172, + "last_updated": 1636573458756383500, + "midpoint": 21.075, + "timeframe": "REAL-TIME" + }, + "last_trade": { + "conditions": [ + 209 + ], + "exchange": 316, + "price": 0.05, + "sip_timestamp": 1675280958783136800, + "size": 2, + "timeframe": "REAL-TIME" + }, + "market_status": "closed", + "name": "NCLH $5 Call", + "open_interest": 8921, + "session": { + "change": -0.05, + "change_percent": -1.07, + "close": 6.65, + "early_trading_change": -0.01, + "early_trading_change_percent": -0.03, + "high": 7.01, + "late_trading_change": -0.4, + "late_trading_change_percent": -0.02, + "low": 5.42, + "open": 6.7, + "previous_close": 6.71, + "volume": 67 + }, + "ticker": "O:NCLH221014C00005000", + "type": "options", + "underlying_asset": { + "change_to_break_even": 23.123999999999995, + "last_updated": 1636573459862384600, + "price": 147.951, + "ticker": "AAPL", + "timeframe": "REAL-TIME" + } + }, + { + "last_quote": { + "ask": 21.25, + "ask_size": 110, + "bid": 20.9, + "bid_size": 172, + "last_updated": 1636573458756383500, + "timeframe": "REAL-TIME" + }, + "last_trade": { + "conditions": [ + 209 + ], + "exchange": 316, + "id": "4064", + "last_updated": 1675280958783136800, + "price": 0.05, + "size": 2, + "timeframe": "REAL-TIME" + }, + "market_status": "closed", + "name": "Apple Inc.", + "session": { + "change": -1.05, + "change_percent": -4.67, + "close": 21.4, + "early_trading_change": -0.39, + "early_trading_change_percent": -0.07, + "high": 22.49, + "late_trading_change": 1.2, + "late_trading_change_percent": 3.92, + "low": 21.35, + "open": 22.49, + "previous_close": 22.45, + "volume": 37 + }, + "ticker": "AAPL", + "type": "stocks" + }, + { + "error": "NOT_FOUND", + "message": "Ticker not found.", + "ticker": "TSLAAPL" + } + ], + "status": "OK" +} \ No newline at end of file diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index 4ae72f8a..24f46654 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -1,3 +1,4 @@ +from base import BaseTest from polygon.rest.models import ( TickerSnapshot, OptionContractSnapshot, @@ -13,13 +14,125 @@ Greeks, OptionDetails, DayOptionContractSnapshot, + UniversalSnapshot, + UniversalSnapshotDetails, + UniversalSnapshotLastQuote, + UniversalSnapshotLastTrade, + UniversalSnapshotUnderlyingAsset, + UniversalSnapshotSession, IndicesSnapshot, IndicesSession, ) -from base import BaseTest class SnapshotsTest(BaseTest): + def test_list_universal_snapshots(self): + expected = [ + UniversalSnapshot( + ticker="O:NCLH221014C00005000", + implied_volatility=0.3048997097864957, + type="options", + market_status="closed", + name="NCLH $5 Call", + open_interest=8921, + break_even_price=171.075, + details=UniversalSnapshotDetails( + contract_type="call", + exercise_style="american", + expiration_date="2022-10-14", + shares_per_contract=100, + strike_price=5, + underlying_ticker="NCLH", + ), + greeks=Greeks( + delta=0.5520187372272933, + gamma=0.00706756515659829, + theta=-0.018532772783847958, + vega=0.7274811132998142, + ), + last_quote=UniversalSnapshotLastQuote( + ask=21.25, + ask_size=110, + bid=20.9, + bid_size=172, + last_updated=1636573458756383500, + midpoint=21.075, + timeframe="REAL-TIME", + ), + last_trade=UniversalSnapshotLastTrade( + conditions=[209], + exchange=316, + price=0.05, + sip_timestamp=1675280958783136800, + size=2, + timeframe="REAL-TIME", + ), + session=UniversalSnapshotSession( + change=-0.05, + change_percent=-1.07, + close=6.65, + early_trading_change=-0.01, + early_trading_change_percent=-0.03, + high=7.01, + late_trading_change=-0.4, + late_trading_change_percent=-0.02, + low=5.42, + open=6.7, + previous_close=6.71, + volume=67, + ), + underlying_asset=UniversalSnapshotUnderlyingAsset( + change_to_break_even=23.123999999999995, + last_updated=1636573459862384600, + price=147.951, + ticker="AAPL", + timeframe="REAL-TIME", + ), + ), + UniversalSnapshot( + last_quote=UniversalSnapshotLastQuote( + ask=21.25, + ask_size=110, + bid=20.9, + bid_size=172, + last_updated=1636573458756383500, + timeframe="REAL-TIME", + ), + last_trade=UniversalSnapshotLastTrade( + conditions=[209], + exchange=316, + id="4064", + last_updated=1675280958783136800, + price=0.05, + size=2, + timeframe="REAL-TIME", + ), + market_status="closed", + name="Apple Inc.", + session=UniversalSnapshotSession( + change=-1.05, + change_percent=-4.67, + close=21.4, + early_trading_change=-0.39, + early_trading_change_percent=-0.07, + high=22.49, + late_trading_change=1.2, + late_trading_change_percent=3.92, + low=21.35, + open=22.49, + previous_close=22.45, + volume=37, + ), + ticker="AAPL", + type="stocks", + ), + UniversalSnapshot( + error="NOT_FOUND", message="Ticker not found.", ticker="TSLAAPL" + ), + ] + snapshots = [s for s in self.c.list_universal_snapshots()] + self.assertEqual(snapshots, expected) + def test_get_snapshot_all(self): snapshots = self.c.get_snapshot_all("stocks") expected = [ From b510b682d69b9ce14bc71f101d1dd0811317f0be Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Sat, 20 May 2023 12:38:19 -0700 Subject: [PATCH 243/448] Update snapshot min to support n and t (#447) * Update snapshot min to support n and t --- polygon/rest/models/snapshot.py | 4 ++++ .../v2/snapshot/locale/us/markets/stocks/gainers.json | 8 ++++++-- .../snapshot/locale/us/markets/stocks/tickers/AAPL.json | 4 +++- .../snapshot/locale/us/markets/stocks/tickers/index.json | 4 +++- test_rest/test_snapshots.py | 4 ++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index ac901ed2..f655dcf3 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -16,6 +16,8 @@ class MinuteSnapshot: volume: Optional[float] = None vwap: Optional[float] = None otc: Optional[bool] = None + timestamp: Optional[int] = None + transactions: Optional[int] = None @staticmethod def from_dict(d): @@ -28,6 +30,8 @@ def from_dict(d): d.get("v", None), d.get("vw", None), d.get("otc", None), + d.get("t", None), + d.get("n", None), ) diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers.json index a4778bdc..c41d2b54 100644 --- a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers.json +++ b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/gainers.json @@ -35,7 +35,9 @@ "l": 6.42, "o": 6.49, "v": 2671, - "vw": 6.4604 + "vw": 6.4604, + "t": 1684428600000, + "n": 5 }, "prevDay": { "c": 0.29, @@ -81,7 +83,9 @@ "l": 4.2107, "o": 4.2107, "v": 1012, - "vw": 4.2107 + "vw": 4.2107, + "t": 1684428600000, + "n": 5 }, "prevDay": { "c": 0.1953, diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json index 396fdd7e..08a7cefb 100644 --- a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json +++ b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json @@ -32,7 +32,9 @@ "l": 160.3, "o": 160.71, "v": 197226, - "vw": 160.5259 + "vw": 160.5259, + "t": 1684428600000, + "n": 5 }, "prevDay": { "c": 163.64, diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json index 5aabb0ae..2bb197f3 100644 --- a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json +++ b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json @@ -36,7 +36,9 @@ "l": 20.506, "o": 20.506, "v": 5000, - "vw": 20.5105 + "vw": 20.5105, + "t": 1684428600000, + "n": 5 }, "prevDay": { "c": 20.63, diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index 24f46654..f0b0bf3f 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -186,6 +186,8 @@ def test_get_snapshot_all(self): close=20.506, volume=5000, vwap=20.5105, + timestamp=1684428600000, + transactions=5, ), prev_day=Agg( open=20.79, @@ -257,6 +259,8 @@ def test_get_snapshot_ticker(self): close=160.3, volume=197226, vwap=160.5259, + timestamp=1684428600000, + transactions=5, ), prev_day=Agg( open=159.25, From ebc903a0c13601095298036bbb480deb04a9ed8a Mon Sep 17 00:00:00 2001 From: Ricky Barillas <8647805+jbonzo@users.noreply.github.com> Date: Wed, 24 May 2023 10:19:51 -0400 Subject: [PATCH 244/448] Update CODEOWNERS (#446) * Update CODEOWNERS * Update CODEOWNERS --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f9c5fda7..02c7785c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @jbonzo @mmoghaddam385 +* @jbonzo @mmoghaddam385 @justinpolygon From fb8042f15256c3749f2707b3c385585ae86ceb4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 14:25:23 +0000 Subject: [PATCH 245/448] Bump orjson from 3.8.7 to 3.8.13 (#453) --- poetry.lock | 94 ++++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 49 insertions(+), 47 deletions(-) diff --git a/poetry.lock b/poetry.lock index 98749992..2a295025 100644 --- a/poetry.lock +++ b/poetry.lock @@ -392,56 +392,58 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.8.7" +version = "3.8.13" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "orjson-3.8.7-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:f98c82850b7b4b7e27785ca43706fa86c893cdb88d54576bbb9b0d9c1070e421"}, - {file = "orjson-3.8.7-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:1dee503c6c1a0659c5b46f5f39d9ca9d3657b11ca8bb4af8506086df416887d9"}, - {file = "orjson-3.8.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4fa83831f42ce5c938f8cefc2e175fa1df6f661fdeaba3badf26d2b8cfcf73"}, - {file = "orjson-3.8.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e432c6c9c8b97ad825276d5795286f7cc9689f377a97e3b7ecf14918413303f"}, - {file = "orjson-3.8.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee519964a5a0efb9633f38b1129fd242807c5c57162844efeeaab1c8de080051"}, - {file = "orjson-3.8.7-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:109b539ce5bf60a121454d008fa67c3b67e5a3249e47d277012645922cf74bd0"}, - {file = "orjson-3.8.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ad4d441fbde4133af6fee37f67dbf23181b9c537ecc317346ec8c3b4c8ec7705"}, - {file = "orjson-3.8.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:89dc786419e1ce2588345f58dd6a434e6728bce66b94989644234bcdbe39b603"}, - {file = "orjson-3.8.7-cp310-none-win_amd64.whl", hash = "sha256:697abde7350fb8076d44bcb6b4ab3ce415ae2b5a9bb91efc460e5ab0d96bb5d3"}, - {file = "orjson-3.8.7-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:1c19f47b35b9966a3abadf341b18ee4a860431bf2b00fd8d58906d51cf78aa70"}, - {file = "orjson-3.8.7-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:3ffaabb380cd0ee187b4fc362516df6bf739808130b1339445c7d8878fca36e7"}, - {file = "orjson-3.8.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d88837002c5a8af970745b8e0ca1b0fdb06aafbe7f1279e110d338ea19f3d23"}, - {file = "orjson-3.8.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff60187d1b7e0bfab376b6002b08c560b7de06c87cf3a8ac639ecf58f84c5f3b"}, - {file = "orjson-3.8.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0110970aed35dec293f30ed1e09f8604afd5d15c5ef83de7f6c427619b3ba47b"}, - {file = "orjson-3.8.7-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:51b275475d4e36118b65ad56f9764056a09d985c5d72e64579bf8816f1356a5e"}, - {file = "orjson-3.8.7-cp311-none-win_amd64.whl", hash = "sha256:63144d27735f3b60f079f247ac9a289d80dfe49a7f03880dfa0c0ba64d6491d5"}, - {file = "orjson-3.8.7-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a16273d77db746bb1789a2bbfded81148a60743fd6f9d5185e02d92e3732fa18"}, - {file = "orjson-3.8.7-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:5bb32259ea22cc9dd47a6fdc4b8f9f1e2f798fcf56c7c1122a7df0f4c5d33bf3"}, - {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad02e9102d4ba67db30a136e631e32aeebd1dce26c9f5942a457b02df131c5d0"}, - {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dbcfcec2b7ac52deb7be3685b551addc28ee8fa454ef41f8b714df6ba0e32a27"}, - {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a0e5504a5fc86083cc210c6946e8d61e13fe9f1d7a7bf81b42f7050a49d4fb"}, - {file = "orjson-3.8.7-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:7bd4fd37adb03b1f2a1012d43c9f95973a02164e131dfe3ff804d7e180af5653"}, - {file = "orjson-3.8.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:188ed9f9a781333ad802af54c55d5a48991e292239aef41bd663b6e314377eb8"}, - {file = "orjson-3.8.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cc52f58c688cb10afd810280e450f56fbcb27f52c053463e625c8335c95db0dc"}, - {file = "orjson-3.8.7-cp37-none-win_amd64.whl", hash = "sha256:403c8c84ac8a02c40613b0493b74d5256379e65196d39399edbf2ed3169cbeb5"}, - {file = "orjson-3.8.7-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:7d6ac5f8a2a17095cd927c4d52abbb38af45918e0d3abd60fb50cfd49d71ae24"}, - {file = "orjson-3.8.7-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0295a7bfd713fa89231fd0822c995c31fc2343c59a1d13aa1b8b6651335654f5"}, - {file = "orjson-3.8.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feb32aaaa34cf2f891eb793ad320d4bb6731328496ae59b6c9eb1b620c42b529"}, - {file = "orjson-3.8.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7a3ab1a473894e609b6f1d763838c6689ba2b97620c256a32c4d9f10595ac179"}, - {file = "orjson-3.8.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e8c430d82b532c5ab95634e034bbf6ca7432ffe175a3e63eadd493e00b3a555"}, - {file = "orjson-3.8.7-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:366cc75f7e09106f9dac95a675aef413367b284f25507d21e55bd7f45f445e80"}, - {file = "orjson-3.8.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:84d154d07e8b17d97e990d5d710b719a031738eb1687d8a05b9089f0564ff3e0"}, - {file = "orjson-3.8.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06180014afcfdc167ca984b312218aa62ce20093965c437c5f9166764cb65ef7"}, - {file = "orjson-3.8.7-cp38-none-win_amd64.whl", hash = "sha256:41244431ba13f2e6ef22b52c5cf0202d17954489f4a3c0505bd28d0e805c3546"}, - {file = "orjson-3.8.7-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:b20f29fa8371b8023f1791df035a2c3ccbd98baa429ac3114fc104768f7db6f8"}, - {file = "orjson-3.8.7-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:226bfc1da2f21ee74918cee2873ea9a0fec1a8830e533cb287d192d593e99d02"}, - {file = "orjson-3.8.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e75c11023ac29e29fd3e75038d0e8dd93f9ea24d7b9a5e871967a8921a88df24"}, - {file = "orjson-3.8.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:78604d3acfd7cd502f6381eea0c42281fe2b74755b334074ab3ebc0224100be1"}, - {file = "orjson-3.8.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7129a6847f0494aa1427167486ef6aea2e835ba05f6c627df522692ee228f65"}, - {file = "orjson-3.8.7-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1a1a8f4980059f48483782c608145b0f74538c266e01c183d9bcd9f8b71dbada"}, - {file = "orjson-3.8.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d60304172a33705ce4bd25a6261ab84bed2dab0b3d3b79672ea16c7648af4832"}, - {file = "orjson-3.8.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4f733062d84389c32c0492e5a4929056fac217034a94523debe0430bcc602cda"}, - {file = "orjson-3.8.7-cp39-none-win_amd64.whl", hash = "sha256:010e2970ec9e826c332819e0da4b14b29b19641da0f1a6af4cec91629ef9b988"}, - {file = "orjson-3.8.7.tar.gz", hash = "sha256:8460c8810652dba59c38c80d27c325b5092d189308d8d4f3e688dbd8d4f3b2dc"}, + {file = "orjson-3.8.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bf934a036dafe63c3b1d630efaf996b85554e7ab03754019a18cc0fe2bdcc3a9"}, + {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1316c60c0f55440e765b0211e94d171ab2c11d00fe8dcf0ac70c9bd1d9818e6b"}, + {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b98fbca0ea0f5e56b3c1d050b78460ca9708419780ec218cef1eca424db2ee5"}, + {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c97be6a6ff4d546579f08f1d67aad92715313a06b214e3f2df9bb9f1b45765c2"}, + {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e62f14f3eabccdd2108e3d5884fb66197255accc42b9ffa7f04d9dbf7336b479"}, + {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d2e9a8ea45db847864868f7a566bece7d425c06627e5dbdd5fc8399a9c3330b"}, + {file = "orjson-3.8.13-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:637d55ba6b48b698973d7e647b9de6bb2b424c445f51c86df4e976e672300b21"}, + {file = "orjson-3.8.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b323bb4af76c16636ac1fec403331208f978ae8a2c6bcab904ee1683c05ad7a"}, + {file = "orjson-3.8.13-cp310-none-win_amd64.whl", hash = "sha256:246e22d167ede9ebf09685587187bde9e2440a515bd5eab2e97f029b9de57677"}, + {file = "orjson-3.8.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:156bd6325a4f4a0c88556b7d774e3e18713c8134b6f807571a3eec14dfcafff6"}, + {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d2ce41c5992dbe9962ef75db1e70ed33636959f2f4b929f9d8cbb2e30472a08"}, + {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50cfa3449157c4a4ad017a041dbb5fe37091800220fd5e651c0e5fff63bdac61"}, + {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59d81f5b9e280ac3ced615e726bfba722785cc5f7fc3aa1e0ea304c5a4114e94"}, + {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d79e5de4a1de246517b4c92dcf6a7ef1fb12e3ce4bbfc6c0f99d1d905405fd"}, + {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97d8444cf48f8fe2718fd3b99484906c29a909dc3a8177e8751170a9a28bcf33"}, + {file = "orjson-3.8.13-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f084ce58b3fd496429deb3435aa7295ab57e349a33cdb99b3cb5f0a66a610a84"}, + {file = "orjson-3.8.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ce737ddf9d5f960996b63c12dbcc82ae2315c45f19165b2fe14a5b33ab8705bb"}, + {file = "orjson-3.8.13-cp311-none-win_amd64.whl", hash = "sha256:305ffd227857cede7318c056020d1a3f3295e8adf8e7f2cbd78c26c530a0f234"}, + {file = "orjson-3.8.13-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0055168bc38c9caf7211e66e7c06d7f127d2c1dd1cd1d806c58f3a81d6074a6c"}, + {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc42b2006abaa4fb72c9193931a9236dd85ce0483cc74079c315ce8529568ca1"}, + {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6dcccda35f11f12ebb36db0ebdca9854327530e1fffe02331cde78177851ae7f"}, + {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1234110f782af5e81893b5419b9374ca2559dbd976cbd515e6c3afc292cdfb6a"}, + {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d30b8b9fe1ff56fb6ff64d2c2e227d49819b58ae8dac51089f393e31b39a4080"}, + {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24f923cf8d7e2e9a975f4507f93e93c262f26b4a1a4f72e4d6e75eda45de8f40"}, + {file = "orjson-3.8.13-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17788155c50f47d9fd037e12ac82a57381c157ea4de50e8946df8519da0f7f02"}, + {file = "orjson-3.8.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05bfef2719d68b44ab38061f9cd2b3a58d9994f7230734ba6d3c16db97c5e94a"}, + {file = "orjson-3.8.13-cp37-none-win_amd64.whl", hash = "sha256:6fe2981bd0f6959d821253604e9ba2c5ffa03c6202d11f0e3c190e5712b6835b"}, + {file = "orjson-3.8.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2e362090bdd4261608eceefd8ed127cd2bfc48643601f9c0cf5d162ca6a7c4cd"}, + {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a3bc7e12f69f7bcefe522c4e4dac33a9b3b450aae0b3170ab61fbce0a6e1b37"}, + {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e56ca7bd82b25f40955184df21c977369debe51c4b83fc3113b6427726312f3"}, + {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e792d286ad175d36f6b77b7ba77f1654a13f705a7ccfef7819e9b6d49277120d"}, + {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf79f51a7ca59ac322a1e65430142ab1cb9c9a845e893e0e3958deaefe1c9873"}, + {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41585f90cfe24d0ae7d5bc96968617b8bcebb618e19db5b0bbadce6bc82f3455"}, + {file = "orjson-3.8.13-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9b5b005841394e563f1ca3314a6884101a1b1f1dd30c569b4a0335e1ebf49fbf"}, + {file = "orjson-3.8.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8075487b7b2e7cc2c44d8ee7950845b6854cd08a04df80b36055cc0236c28edd"}, + {file = "orjson-3.8.13-cp38-none-win_amd64.whl", hash = "sha256:0ca2aced3fa6ce6d440a2a2e55bb7618fd24fce146068523472f349598e992ee"}, + {file = "orjson-3.8.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f8aa77df01c60b7d8b0ff5501d6b8583a4acb06c4373c59bf769025ff8b8b4cb"}, + {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea6899624661d2258a71bde33266c3c08c8d9596865acf0ac19a9552c08fa1a6"}, + {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11a457fafdd207f361986750a5229fc36911fc9fdfc274d078fdf1654845ef45"}, + {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:386e60a09585b2b5db84879ebad6d49427ae5a9677f86a90bff9cbbec42b03be"}, + {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b05ef096362c8a96fdcd85392c68156c9b680271aea350b490c2d0f3ef1b6b6a"}, + {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5492a1d9eea5a1cb33ae6d225091c69dc79f16d952885625c00070388489d412"}, + {file = "orjson-3.8.13-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:47cb98386a7ff79d0ace6a7c9d5c49ca2b4ea42e4339c565f5efe7757790dd04"}, + {file = "orjson-3.8.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a4a182e7a58114a81d52d67bdc034eb83571690158c4b8d3f1bf5c5f772f77b1"}, + {file = "orjson-3.8.13-cp39-none-win_amd64.whl", hash = "sha256:b2325d8471867c99c432c96861d72d8b7336293860ebb17c9d70e1d377cc2b32"}, + {file = "orjson-3.8.13.tar.gz", hash = "sha256:14e54713703d5436a7be54ff50d780b6b09358f1a0be6107a3ea4f3537a4f6d8"}, ] [[package]] @@ -993,4 +995,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "5e3c01ace8d7de788f8ccad60b3d3e2461b725d38eead4f67f37f6959c37881f" +content-hash = "1b0ebea74636240c4cf7e35ed2aefcc66f2d1c6dc6971b3f7195b39bd9de4787" diff --git a/pyproject.toml b/pyproject.toml index 695e4a35..8f792587 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" types-setuptools = "^67.4.0" pook = "^1.1.1" -orjson = "^3.8.7" +orjson = "^3.8.13" [build-system] requires = ["poetry-core>=1.0.0"] From 4dfbefc29d5660be9146132aedced28a5db7d2e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 14:30:05 +0000 Subject: [PATCH 246/448] Bump types-setuptools from 67.4.0.3 to 67.8.0.0 (#449) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2a295025..002ef7a8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -834,14 +834,14 @@ files = [ [[package]] name = "types-setuptools" -version = "67.4.0.3" +version = "67.8.0.0" description = "Typing stubs for setuptools" category = "dev" optional = false python-versions = "*" files = [ - {file = "types-setuptools-67.4.0.3.tar.gz", hash = "sha256:19e958dfdbf1c5a628e54c2a7ee84935051afb7278d0c1cdb08ac194757ee3b1"}, - {file = "types_setuptools-67.4.0.3-py3-none-any.whl", hash = "sha256:3c83c3a6363dd3ddcdd054796705605f0fa8b8e5a39390e07a05e5f7af054978"}, + {file = "types-setuptools-67.8.0.0.tar.gz", hash = "sha256:95c9ed61871d6c0e258433373a4e1753c0a7c3627a46f4d4058c7b5a08ab844f"}, + {file = "types_setuptools-67.8.0.0-py3-none-any.whl", hash = "sha256:6df73340d96b238a4188b7b7668814b37e8018168aef1eef94a3b1872e3f60ff"}, ] [[package]] @@ -995,4 +995,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "1b0ebea74636240c4cf7e35ed2aefcc66f2d1c6dc6971b3f7195b39bd9de4787" +content-hash = "33c166c06b9b5c9f8e50a3e4d7dc77df94cfa040e576fd63963253f30d29d3f3" diff --git a/pyproject.toml b/pyproject.toml index 8f792587..53ef5203 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" -types-setuptools = "^67.4.0" +types-setuptools = "^67.8.0" pook = "^1.1.1" orjson = "^3.8.13" From 04ea8a1a1ccd8fb78bc084592e8250efb9652a24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 14:35:14 +0000 Subject: [PATCH 247/448] Bump websockets from 10.4 to 11.0.3 (#450) --- poetry.lock | 143 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 73 insertions(+), 72 deletions(-) diff --git a/poetry.lock b/poetry.lock index 002ef7a8..b44ffed4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -887,81 +887,82 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "websockets" -version = "10.4" +version = "11.0.3" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, - {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, - {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, - {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, - {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, - {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, - {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, - {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, - {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, - {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, - {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, - {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, - {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, - {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, - {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, - {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, - {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, - {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, - {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, - {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, - {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, - {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, - {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, - {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, + {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, + {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, + {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, + {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, + {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, + {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, + {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, + {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, + {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, + {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, + {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, + {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, + {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, ] [[package]] @@ -995,4 +996,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "33c166c06b9b5c9f8e50a3e4d7dc77df94cfa040e576fd63963253f30d29d3f3" +content-hash = "7da2a0365a10cd1aaace473dfada9fd38b26d4eafd41bea66a0ccf2891e10ff2" diff --git a/pyproject.toml b/pyproject.toml index 53ef5203..47c67558 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ packages = [ [tool.poetry.dependencies] python = "^3.8" urllib3 = "^1.26.9" -websockets = "^10.3" +websockets = ">=10.3,<12.0" certifi = "^2022.5.18" [tool.poetry.dev-dependencies] From e9754bfb783ca762dd35aa6400d771adeef217dd Mon Sep 17 00:00:00 2001 From: Anthony Johnson <114414459+antdjohns@users.noreply.github.com> Date: Mon, 12 Jun 2023 13:13:27 -0700 Subject: [PATCH 248/448] Add WS support for launchpad (#456) * Add WS support for launchpad * update timestamp type * add launchpad example * lint --- README.md | 19 ++++++++++++++++++- examples/websocket/launchpad-ws.py | 21 +++++++++++++++++++++ polygon/websocket/models/__init__.py | 2 ++ polygon/websocket/models/common.py | 6 ++++++ polygon/websocket/models/models.py | 18 ++++++++++++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 examples/websocket/launchpad-ws.py diff --git a/README.md b/README.md index 6a94717e..d98f9f31 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ ws.run(handle_msg=handle_msg) ``` Check out more detailed examples [here](https://github.com/polygon-io/client-python/tree/master/examples/websocket). -## Launchpad +## Launchpad REST API Client Users of the Launchpad product will need to pass in certain headers in order to make API requests using the RequestOptionBuilder. Example can be found [here](./examples/launchpad). @@ -114,6 +114,23 @@ res = c.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04", options=options) Checkout Launchpad readme for more details on RequestOptionBuilder [here](./examples/launchpad) +## Launchpad WebSocket Client + +```python +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage +from polygon.websocket.models.common import Feed, Market +from typing import List + +ws = WebSocketClient(api_key="API_KEY",feed=Feed.Launchpad,market=Market.Stocks, subscriptions=["AM.AAPL"]) + +def handle_msg(msg: List[WebSocketMessage]): + for m in msg: + print(m) + +ws.run(handle_msg=handle_msg) +``` + ## Contributing If you found a bug or have an idea for a new feature, please first discuss it with us by diff --git a/examples/websocket/launchpad-ws.py b/examples/websocket/launchpad-ws.py new file mode 100644 index 00000000..cfc08621 --- /dev/null +++ b/examples/websocket/launchpad-ws.py @@ -0,0 +1,21 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, Feed, Market +from typing import List + +client = WebSocketClient( + api_key="", feed=Feed.Launchpad, market=Market.Stocks +) + +client.subscribe("AM.*") # all aggregates +# client.subscribe("LV.*") # all aggregates +# client.subscribe("AM.O:A230616C00070000") # all aggregates +# client.subscribe("LV.O:A230616C00070000") # all aggregates + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + +# print messages +client.run(handle_msg) diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py index bbc65cbb..3d08c337 100644 --- a/polygon/websocket/models/__init__.py +++ b/polygon/websocket/models/__init__.py @@ -28,6 +28,8 @@ def parse_single(data: Dict[str, Any]): return Level2Book.from_dict(data) elif event_type == EventType.Value.value: return IndexValue.from_dict(data) + elif event_type == EventType.LaunchpadValue.value: + return LaunchpadValue.from_dict(data) return None diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index 5353c367..79ebe2a2 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -8,6 +8,7 @@ class Feed(Enum): PolyFeed = "polyfeed.polygon.io" PolyFeedPlus = "polyfeedplus.polygon.io" StarterFeed = "starterfeed.polygon.io" + Launchpad = "launchpad.polygon.io" class Market(Enum): @@ -32,3 +33,8 @@ class EventType(Enum): LimitUpLimitDown = "LULD" CryptoL2 = "XL2" Value = "V" + """Launchpad* EventTypes are only available to Launchpad users. These values are the same across all asset classes ( + stocks, options, forex, crypto). + """ + LaunchpadValue = "LV" + LaunchpadAggMin = "AM" diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index dc37189e..1227131d 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -325,6 +325,23 @@ def from_dict(d): ) +@modelclass +class LaunchpadValue: + event_type: Optional[Union[str, EventType]] = None + value: Optional[float] = None + symbol: Optional[str] = None + timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return LaunchpadValue( + event_type=d.get("ev", None), + value=d.get("val", None), + symbol=d.get("sym", None), + timestamp=d.get("t", None), + ) + + WebSocketMessage = NewType( "WebSocketMessage", List[ @@ -340,6 +357,7 @@ def from_dict(d): LimitUpLimitDown, Level2Book, IndexValue, + LaunchpadValue, ] ], ) From ddd5cfb13ab0d573ae3247dd77c67a1ec869ae85 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 14 Jun 2023 07:26:52 -0700 Subject: [PATCH 249/448] Updated Examples and Docs to Support Agg Pagination (#460) * Updated Examples and Docs to Support Agg Pagination * turn trace off --- docs/source/Aggs.rst | 11 +++++++++++ examples/rest/crypto-aggregates_bars.py | 9 ++++++--- examples/rest/forex-aggregates_bars.py | 9 ++++++--- examples/rest/indices-aggregates_bars.py | 11 +++++++---- examples/rest/options-aggregates_bars.py | 9 ++++++--- examples/rest/stocks-aggregates_bars.py | 13 ++++++++----- examples/rest/stocks-aggregates_bars_extra.py | 9 ++++++--- examples/rest/stocks-aggregates_bars_highcharts.py | 6 ++++-- 8 files changed, 54 insertions(+), 23 deletions(-) diff --git a/docs/source/Aggs.rst b/docs/source/Aggs.rst index 8493cdcb..921166e9 100644 --- a/docs/source/Aggs.rst +++ b/docs/source/Aggs.rst @@ -3,6 +3,17 @@ Aggs ========== +=========== +List aggs +=========== + +- `Stocks aggs`_ +- `Options aggs`_ +- `Forex aggs`_ +- `Crypto aggs`_ + +.. automethod:: polygon.RESTClient.list_aggs + =========== Get aggs =========== diff --git a/examples/rest/crypto-aggregates_bars.py b/examples/rest/crypto-aggregates_bars.py index b75ea762..a3831aeb 100644 --- a/examples/rest/crypto-aggregates_bars.py +++ b/examples/rest/crypto-aggregates_bars.py @@ -2,7 +2,7 @@ # docs # https://polygon.io/docs/crypto/get_v2_aggs_ticker__cryptoticker__range__multiplier___timespan___from___to -# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.list_aggs # API key injected below for easy use. If not provided, the script will attempt # to use the environment variable "POLYGON_API_KEY". @@ -16,12 +16,15 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -aggs = client.get_aggs( +aggs = [] +for a in client.list_aggs( "X:BTCUSD", 1, "day", "2023-01-30", "2023-02-03", -) + limit=50000, +): + aggs.append(a) print(aggs) diff --git a/examples/rest/forex-aggregates_bars.py b/examples/rest/forex-aggregates_bars.py index 56f50aa6..b7ab233d 100644 --- a/examples/rest/forex-aggregates_bars.py +++ b/examples/rest/forex-aggregates_bars.py @@ -2,7 +2,7 @@ # docs # https://polygon.io/docs/forex/get_v2_aggs_ticker__forexticker__range__multiplier___timespan___from___to -# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.list_aggs # API key injected below for easy use. If not provided, the script will attempt # to use the environment variable "POLYGON_API_KEY". @@ -16,12 +16,15 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -aggs = client.get_aggs( +aggs = [] +for a in client.list_aggs( "C:EURUSD", 1, "day", "2023-01-30", "2023-02-03", -) + limit=50000, +): + aggs.append(a) print(aggs) diff --git a/examples/rest/indices-aggregates_bars.py b/examples/rest/indices-aggregates_bars.py index b5305648..b2b561ad 100644 --- a/examples/rest/indices-aggregates_bars.py +++ b/examples/rest/indices-aggregates_bars.py @@ -2,7 +2,7 @@ # docs # https://polygon.io/docs/indices/get_v2_aggs_ticker__indicesticker__range__multiplier___timespan___from___to -# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.list_aggs # API key injected below for easy use. If not provided, the script will attempt # to use the environment variable "POLYGON_API_KEY". @@ -16,12 +16,15 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -aggs = client.get_aggs( +aggs = [] +for a in client.list_aggs( "I:SPX", 1, "day", "2023-03-10", - "2023-03-10", -) + "2023-05-12", + limit=50000, +): + aggs.append(a) print(aggs) diff --git a/examples/rest/options-aggregates_bars.py b/examples/rest/options-aggregates_bars.py index 943fae88..62e3297b 100644 --- a/examples/rest/options-aggregates_bars.py +++ b/examples/rest/options-aggregates_bars.py @@ -2,7 +2,7 @@ # docs # https://polygon.io/docs/options/get_v2_aggs_ticker__optionsticker__range__multiplier___timespan___from___to -# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.list_aggs # API key injected below for easy use. If not provided, the script will attempt # to use the environment variable "POLYGON_API_KEY". @@ -16,12 +16,15 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -aggs = client.get_aggs( +aggs = [] +for a in client.list_aggs( "O:SPY251219C00650000", 1, "day", "2023-01-30", "2023-02-03", -) + limit=50000, +): + aggs.append(a) print(aggs) diff --git a/examples/rest/stocks-aggregates_bars.py b/examples/rest/stocks-aggregates_bars.py index 9fb2625b..c553b00e 100644 --- a/examples/rest/stocks-aggregates_bars.py +++ b/examples/rest/stocks-aggregates_bars.py @@ -2,7 +2,7 @@ # docs # https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to -# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.list_aggs # API key injected below for easy use. If not provided, the script will attempt # to use the environment variable "POLYGON_API_KEY". @@ -16,12 +16,15 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -aggs = client.get_aggs( +aggs = [] +for a in client.list_aggs( "AAPL", 1, - "day", - "2023-01-30", + "minute", + "2022-01-01", "2023-02-03", -) + limit=50000, +): + aggs.append(a) print(aggs) diff --git a/examples/rest/stocks-aggregates_bars_extra.py b/examples/rest/stocks-aggregates_bars_extra.py index 5936fdb3..98515456 100644 --- a/examples/rest/stocks-aggregates_bars_extra.py +++ b/examples/rest/stocks-aggregates_bars_extra.py @@ -16,18 +16,21 @@ # docs # https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to -# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.get_aggs +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.list_aggs # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -aggs = client.get_aggs( +aggs = [] +for a in client.list_aggs( "AAPL", 1, "hour", "2023-01-30", "2023-02-03", -) + limit=50000, +): + aggs.append(a) print(aggs) diff --git a/examples/rest/stocks-aggregates_bars_highcharts.py b/examples/rest/stocks-aggregates_bars_highcharts.py index 08fccd4c..38b06120 100644 --- a/examples/rest/stocks-aggregates_bars_highcharts.py +++ b/examples/rest/stocks-aggregates_bars_highcharts.py @@ -70,14 +70,16 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used -aggs = client.get_aggs( +aggs = [] +for a in client.list_aggs( "AAPL", 1, "day", "2019-01-01", "2023-02-16", limit=50000, -) +): + aggs.append(a) # print(aggs) From 826cb5772c2c10deff9dadf2bff35966a5ba43b4 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:22:07 -0700 Subject: [PATCH 250/448] Update README.md (#461) Updated aggregates example to list_aggs for pagination. I don't want folks accidently using get_aggs. --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d98f9f31..ba8c754b 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,11 @@ Request data using client methods. ticker = "AAPL" # List Aggregates (Bars) -bars = client.get_aggs(ticker=ticker, multiplier=1, timespan="day", from_="2023-01-09", to="2023-01-10") -for bar in bars: - print(bar) +aggs = [] +for a in client.list_aggs(ticker=ticker, multiplier=1, timespan="minute", from_="2023-01-01", to="2023-06-13", limit=50000): + aggs.append(a) + +print(aggs) # Get Last Trade trade = client.get_last_trade(ticker=ticker) From 005b133ebc8fad6d377debdb9408580a97deefaf Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 27 Jun 2023 10:44:57 -0700 Subject: [PATCH 251/448] Update README.md (#465) Updated the install command to add the `-U` flag. This tells `pip` to install or update to the latest package if it's already installed. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ba8c754b..6fe69613 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,9 @@ Welcome to the official Python client library for the [Polygon](https://polygon. ## Install +Please use pip to install or update to the latest stable version. ``` -pip install polygon-api-client +pip install -U polygon-api-client ``` Requires Python >= 3.8. From 7cb2beee0bc2bc4558f2e22d6d1923b1858d5429 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 22 Jul 2023 22:51:07 -0700 Subject: [PATCH 252/448] Bump requests from 2.28.1 to 2.31.0 (#452) Bumps [requests](https://github.com/psf/requests) from 2.28.1 to 2.31.0. --- poetry.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index b44ffed4..329c20ee 100644 --- a/poetry.lock +++ b/poetry.lock @@ -594,21 +594,21 @@ files = [ [[package]] name = "requests" -version = "2.28.1" +version = "2.31.0" description = "Python HTTP for Humans." category = "dev" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] From 4ac7e5e5fad2fed592d184eb4b83e181ef95e887 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 22 Jul 2023 22:56:43 -0700 Subject: [PATCH 253/448] Bump certifi from 2022.12.7 to 2023.5.7 (#455) Bumps [certifi](https://github.com/certifi/python-certifi) from 2022.12.7 to 2023.5.7. --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 329c20ee..9bb16e9b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -83,14 +83,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, ] [[package]] @@ -996,4 +996,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "7da2a0365a10cd1aaace473dfada9fd38b26d4eafd41bea66a0ccf2891e10ff2" +content-hash = "6fc8062f0fe5eccff8499e9c0d2f473288ae057fada644ff39dcc657f9bb69fd" diff --git a/pyproject.toml b/pyproject.toml index 47c67558..cb85b572 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ packages = [ python = "^3.8" urllib3 = "^1.26.9" websockets = ">=10.3,<12.0" -certifi = "^2022.5.18" +certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] black = "^22.12.0" From a2ce16084ef62f50523f2334aecc11666744b7eb Mon Sep 17 00:00:00 2001 From: Aaron Itzkovitz <19159499+aitzkovitz@users.noreply.github.com> Date: Tue, 25 Jul 2023 18:21:40 -0400 Subject: [PATCH 254/448] =?UTF-8?q?add=20currency=20second=20agg=20feed=20?= =?UTF-8?q?topics=20to=20event=20type=20enums=20and=20message=20p=E2=80=A6?= =?UTF-8?q?=20(#471)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add currency second agg feed topics to event type enums and message parser * lint --- polygon/websocket/models/__init__.py | 7 ++++++- polygon/websocket/models/common.py | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py index 3d08c337..fb64b6dd 100644 --- a/polygon/websocket/models/__init__.py +++ b/polygon/websocket/models/__init__.py @@ -8,7 +8,12 @@ def parse_single(data: Dict[str, Any]): event_type = data["ev"] if event_type in [EventType.EquityAgg.value, EventType.EquityAggMin.value]: return EquityAgg.from_dict(data) - elif event_type in [EventType.CryptoAgg.value, EventType.ForexAgg.value]: + elif event_type in [ + EventType.CryptoAgg.value, + EventType.CryptoAggSec.value, + EventType.ForexAgg.value, + EventType.ForexAggSec.value, + ]: return CurrencyAgg.from_dict(data) elif event_type == EventType.EquityTrade.value: return EquityTrade.from_dict(data) diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index 79ebe2a2..95148f13 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -23,7 +23,9 @@ class EventType(Enum): EquityAgg = "A" EquityAggMin = "AM" CryptoAgg = "XA" + CryptoAggSec = "XAS" ForexAgg = "CA" + ForexAggSec = "CAS" EquityTrade = "T" CryptoTrade = "XT" EquityQuote = "Q" @@ -34,7 +36,7 @@ class EventType(Enum): CryptoL2 = "XL2" Value = "V" """Launchpad* EventTypes are only available to Launchpad users. These values are the same across all asset classes ( - stocks, options, forex, crypto). + stocks, options, forex, crypto). """ LaunchpadValue = "LV" LaunchpadAggMin = "AM" From c4b8730a66e53de38d4e420f75e3a0413f4dd994 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 02:14:26 -0700 Subject: [PATCH 255/448] Bump certifi from 2023.5.7 to 2023.7.22 (#482) Bumps [certifi](https://github.com/certifi/python-certifi) from 2023.5.7 to 2023.7.22. - [Commits](https://github.com/certifi/python-certifi/compare/2023.05.07...2023.07.22) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 59 ++++------------------------------------------------- 1 file changed, 4 insertions(+), 55 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9bb16e9b..a1c04900 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "alabaster" version = "0.7.12" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = "*" files = [ @@ -16,7 +15,6 @@ files = [ name = "attrs" version = "22.1.0" description = "Classes Without Boilerplate" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -34,7 +32,6 @@ tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy name = "Babel" version = "2.11.0" description = "Internationalization utilities" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -49,7 +46,6 @@ pytz = ">=2015.7" name = "black" version = "22.12.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -83,21 +79,19 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] [[package]] name = "charset-normalizer" version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" optional = false python-versions = ">=3.6.0" files = [ @@ -112,7 +106,6 @@ unicode-backport = ["unicodedata2"] name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -127,7 +120,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -139,7 +131,6 @@ files = [ name = "docutils" version = "0.17.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -151,7 +142,6 @@ files = [ name = "furl" version = "2.1.3" description = "URL manipulation made simple." -category = "dev" optional = false python-versions = "*" files = [ @@ -167,7 +157,6 @@ six = ">=1.8.0" name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -179,7 +168,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -191,7 +179,6 @@ files = [ name = "importlib-metadata" version = "5.1.0" description = "Read metadata from Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -211,7 +198,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "importlib-resources" version = "5.10.0" description = "Read resources from Python packages" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -230,7 +216,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "Jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -248,7 +233,6 @@ i18n = ["Babel (>=2.7)"] name = "jsonschema" version = "4.17.1" description = "An implementation of JSON Schema validation for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -270,7 +254,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "MarkupSafe" version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -320,7 +303,6 @@ files = [ name = "mypy" version = "1.0.1" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -367,7 +349,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "0.4.3" description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "dev" optional = false python-versions = "*" files = [ @@ -379,7 +360,6 @@ files = [ name = "orderedmultidict" version = "1.0.1" description = "Ordered Multivalue Dictionary" -category = "dev" optional = false python-versions = "*" files = [ @@ -394,7 +374,6 @@ six = ">=1.8.0" name = "orjson" version = "3.8.13" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -450,7 +429,6 @@ files = [ name = "packaging" version = "21.3" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -465,7 +443,6 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" name = "pathspec" version = "0.10.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -477,7 +454,6 @@ files = [ name = "pkgutil_resolve_name" version = "1.3.10" description = "Resolve a name to an object." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -489,7 +465,6 @@ files = [ name = "platformdirs" version = "2.5.4" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -505,7 +480,6 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock name = "pook" version = "1.1.1" description = "HTTP traffic mocking and expectations made easy" -category = "dev" optional = false python-versions = "*" files = [ @@ -522,7 +496,6 @@ xmltodict = ">=0.11.0" name = "Pygments" version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -537,7 +510,6 @@ plugins = ["importlib-metadata"] name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "dev" optional = false python-versions = ">=3.6.8" files = [ @@ -552,7 +524,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyrsistent" version = "0.19.2" description = "Persistent/Functional/Immutable data structures" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -584,7 +555,6 @@ files = [ name = "pytz" version = "2022.6" description = "World timezone definitions, modern and historical" -category = "dev" optional = false python-versions = "*" files = [ @@ -596,7 +566,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -618,7 +587,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -630,7 +598,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" files = [ @@ -642,7 +609,6 @@ files = [ name = "Sphinx" version = "5.3.0" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -678,7 +644,6 @@ test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] name = "sphinx-autodoc-typehints" version = "1.23.0" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -698,7 +663,6 @@ type-comment = ["typed-ast (>=1.5.4)"] name = "sphinx-rtd-theme" version = "1.1.1" description = "Read the Docs theme for Sphinx" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -717,7 +681,6 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.2" description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -733,7 +696,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -749,7 +711,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -765,7 +726,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -780,7 +740,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -796,7 +755,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -812,7 +770,6 @@ test = ["pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -824,7 +781,6 @@ files = [ name = "types-certifi" version = "2021.10.8.3" description = "Typing stubs for certifi" -category = "dev" optional = false python-versions = "*" files = [ @@ -836,7 +792,6 @@ files = [ name = "types-setuptools" version = "67.8.0.0" description = "Typing stubs for setuptools" -category = "dev" optional = false python-versions = "*" files = [ @@ -848,7 +803,6 @@ files = [ name = "types-urllib3" version = "1.26.25.13" description = "Typing stubs for urllib3" -category = "dev" optional = false python-versions = "*" files = [ @@ -860,7 +814,6 @@ files = [ name = "typing-extensions" version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -872,7 +825,6 @@ files = [ name = "urllib3" version = "1.26.13" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -889,7 +841,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "websockets" version = "11.0.3" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -969,7 +920,6 @@ files = [ name = "xmltodict" version = "0.13.0" description = "Makes working with XML feel like you are working with JSON" -category = "dev" optional = false python-versions = ">=3.4" files = [ @@ -981,7 +931,6 @@ files = [ name = "zipp" version = "3.11.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" optional = false python-versions = ">=3.7" files = [ From 94ea07d833c2507867c9674423b4be5b2aeeeae7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 02:20:24 -0700 Subject: [PATCH 256/448] Bump pygments from 2.13.0 to 2.15.0 (#473) Bumps [pygments](https://github.com/pygments/pygments) from 2.13.0 to 2.15.0. - [Release notes](https://github.com/pygments/pygments/releases) - [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES) - [Commits](https://github.com/pygments/pygments/compare/2.13.0...2.15.0) --- updated-dependencies: - dependency-name: pygments dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index a1c04900..f17ce86e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -493,14 +493,14 @@ jsonschema = ">=2.5.1" xmltodict = ">=0.11.0" [[package]] -name = "Pygments" -version = "2.13.0" +name = "pygments" +version = "2.15.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, + {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, + {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, ] [package.extras] From a7f001ca470b6c2ebc42d470ed6f6b04c2a8c59a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 02:25:30 -0700 Subject: [PATCH 257/448] Bump sphinx-rtd-theme from 1.1.1 to 1.2.2 (#458) Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 1.1.1 to 1.2.2. - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/1.1.1...1.2.2) --- updated-dependencies: - dependency-name: sphinx-rtd-theme dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 29 ++++++++++++++++++++++------- pyproject.toml | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index f17ce86e..b641b6ec 100644 --- a/poetry.lock +++ b/poetry.lock @@ -661,18 +661,19 @@ type-comment = ["typed-ast (>=1.5.4)"] [[package]] name = "sphinx-rtd-theme" -version = "1.1.1" +version = "1.2.2" description = "Read the Docs theme for Sphinx" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, - {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, + {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, + {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, ] [package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6,<6" +docutils = "<0.19" +sphinx = ">=1.6,<7" +sphinxcontrib-jquery = ">=4,<5" [package.extras] dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] @@ -722,6 +723,20 @@ files = [ lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +description = "Extension to include jQuery on newer Sphinx releases" +optional = false +python-versions = ">=2.7" +files = [ + {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, + {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, +] + +[package.dependencies] +Sphinx = ">=1.8" + [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" @@ -945,4 +960,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "6fc8062f0fe5eccff8499e9c0d2f473288ae057fada644ff39dcc657f9bb69fd" +content-hash = "911f57c5296307858387f6aad21806eea1dde8bc55b1a8b17256ae8574d64e4f" diff --git a/pyproject.toml b/pyproject.toml index cb85b572..fe4475e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ black = "^22.12.0" mypy = "^1.0" types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" -sphinx-rtd-theme = "^1.0.0" +sphinx-rtd-theme = "^1.2.2" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" From 9f9a3d26f5f0eaa9d68efbd3497817e7c34bac02 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 3 Aug 2023 08:34:57 -0700 Subject: [PATCH 258/448] Return empty array instead of raising NoResultsError for missing results (#483) * Return empty array instead of raising NoResultsError for missing results --- docs/source/Exceptions.rst | 7 ------- polygon/exceptions.py | 8 -------- polygon/rest/base.py | 10 ++++------ 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/docs/source/Exceptions.rst b/docs/source/Exceptions.rst index a57f633b..554bef82 100644 --- a/docs/source/Exceptions.rst +++ b/docs/source/Exceptions.rst @@ -17,10 +17,3 @@ BadResponse :members: :undoc-members: -============================================================== -NoResultsError -============================================================== -.. autoclass:: polygon.exceptions.NoResultsError - :members: - :undoc-members: - diff --git a/polygon/exceptions.py b/polygon/exceptions.py index 7246108c..b8960763 100644 --- a/polygon/exceptions.py +++ b/polygon/exceptions.py @@ -12,11 +12,3 @@ class BadResponse(Exception): """ pass - - -class NoResultsError(Exception): - """ - Missing results key - """ - - pass diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 1523114e..70ad34d7 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -10,7 +10,7 @@ from ..logging import get_logger import logging from urllib.parse import urlencode -from ..exceptions import AuthError, BadResponse, NoResultsError +from ..exceptions import AuthError, BadResponse logger = get_logger("RESTClient") version = "unknown" @@ -116,11 +116,7 @@ def _get( if result_key: if result_key not in obj: - raise NoResultsError( - f'Expected key "{result_key}" in response {obj}.' - + "Make sure you have sufficient permissions and your request parameters are valid." - + f"This is the url that returned no results: {resp.geturl()}" - ) + return [] obj = obj[result_key] if deserializer: @@ -198,6 +194,8 @@ def _paginate_iter( options=options, ) decoded = self._decode(resp) + if result_key not in decoded: + return [] for t in decoded[result_key]: yield deserializer(t) if "next_url" in decoded: From 31d47cbb21ad2e0523b68a4e6f364f1c10e1c916 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 09:23:24 -0700 Subject: [PATCH 259/448] Bump mypy from 1.0.1 to 1.4.1 (#479) Bumps [mypy](https://github.com/python/mypy) from 1.0.1 to 1.4.1. - [Commits](https://github.com/python/mypy/compare/v1.0.1...v1.4.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 70 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/poetry.lock b/poetry.lock index b641b6ec..ac6ba756 100644 --- a/poetry.lock +++ b/poetry.lock @@ -301,43 +301,43 @@ files = [ [[package]] name = "mypy" -version = "1.0.1" +version = "1.4.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.7" files = [ - {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, - {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, - {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, - {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, - {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, - {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, - {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, - {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, - {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, - {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, - {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, - {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, - {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, - {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, - {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, - {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, - {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, - {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, - {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, - {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, - {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, - {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, - {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, + {file = "mypy-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8"}, + {file = "mypy-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878"}, + {file = "mypy-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd"}, + {file = "mypy-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc"}, + {file = "mypy-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1"}, + {file = "mypy-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462"}, + {file = "mypy-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258"}, + {file = "mypy-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2"}, + {file = "mypy-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7"}, + {file = "mypy-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01"}, + {file = "mypy-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b"}, + {file = "mypy-1.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b"}, + {file = "mypy-1.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7"}, + {file = "mypy-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9"}, + {file = "mypy-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042"}, + {file = "mypy-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3"}, + {file = "mypy-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6"}, + {file = "mypy-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f"}, + {file = "mypy-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc"}, + {file = "mypy-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828"}, + {file = "mypy-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3"}, + {file = "mypy-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816"}, + {file = "mypy-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c"}, + {file = "mypy-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f"}, + {file = "mypy-1.4.1-py3-none-any.whl", hash = "sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4"}, + {file = "mypy-1.4.1.tar.gz", hash = "sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b"}, ] [package.dependencies] -mypy-extensions = ">=0.4.3" +mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=3.10" +typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] @@ -347,13 +347,13 @@ reports = ["lxml"] [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [[package]] @@ -960,4 +960,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "911f57c5296307858387f6aad21806eea1dde8bc55b1a8b17256ae8574d64e4f" +content-hash = "481291935b92a0a22eb94d9c2cf8eb7e244099949c26a855c5316b1ace7fdb11" diff --git a/pyproject.toml b/pyproject.toml index fe4475e8..555b6bbb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] black = "^22.12.0" -mypy = "^1.0" +mypy = "^1.4" types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" sphinx-rtd-theme = "^1.2.2" From b68db9c9de76f1e51a56ccd458f71ad78d60029a Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 3 Aug 2023 10:36:39 -0700 Subject: [PATCH 260/448] Update README.md with additional filter parameters section (#484) --- README.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6fe69613..afbabe07 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,35 @@ quotes = client.list_quotes(ticker=ticker, timestamp="2022-01-04") for quote in quotes: print(quote) ``` -Note: For parameter argument examples check out our docs. All required arguments are annotated with red asterisks " * " and argument examples are set. -Check out an example for Aggregates(client.get_aggs) [here](https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to) + +### Additional Filter Parameters + +Many of the APIs in this client library support the use of additional filter parameters to refine your queries. Please refer to the specific API documentation for details on which filter parameters are supported for each endpoint. These filters can be applied using the following operators: + +- `.gt`: greater than +- `.gte`: greater than or equal to +- `.lt`: less than +- `.lte`: less than or equal to + +Here's a sample code snippet that demonstrates how to use these filter parameters when requesting an Options Chain using the `list_snapshot_options_chain` method. In this example, the filter parameters ensure that the returned options chain data will only include options with an expiration date that is greater than or equal to "2024-03-16" and a strike price that falls between 29 and 30 (inclusive). + +```python +options_chain = [] +for o in client.list_snapshot_options_chain( + "HCP", + params={ + "expiration_date.gte": "2024-03-16", + "strike_price.gte": 29, + "strike_price.lte": 30, + }, +): + options_chain.append(o) + +print(options_chain) +print(len(options_chain)) +``` + +Also, please refer to the API documentation to get a full understanding of how the API works and the supported arguments. All required arguments are annotated with red asterisks " * " and argument examples are set. ## WebSocket Client From faf55de6d3364c69c8b92ef5887f5e323bc614cf Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:49:52 -0700 Subject: [PATCH 261/448] Fix parameter naming and add missing parameters in list_universal_snapshots (#485) * Fix parameter naming and add missing parameters in list_universal_snapshots --- examples/rest/universal-snapshot.py | 13 +++++++------ polygon/rest/snapshot.py | 12 ++++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/examples/rest/universal-snapshot.py b/examples/rest/universal-snapshot.py index 8f4d9be6..1ab5e804 100644 --- a/examples/rest/universal-snapshot.py +++ b/examples/rest/universal-snapshot.py @@ -1,7 +1,5 @@ from typing import cast, Iterator, Union - from urllib3 import HTTPResponse - from polygon import RESTClient from polygon.rest.models import UniversalSnapshot, SnapshotMarketType @@ -35,12 +33,15 @@ def print_snapshots(iterator: Union[Iterator[UniversalSnapshot], HTTPResponse]): ) print_snapshots(it) -it = client.list_universal_snapshots( - market_type=SnapshotMarketType.STOCKS, ticker_gt="A", ticker_lt="AAPL" -) +it = client.list_universal_snapshots(type="stocks", ticker_gt="A", ticker_lt="AAPL") +print_snapshots(it) + +it = client.list_universal_snapshots(type="stocks", ticker_gte="AAPL", ticker_lte="ABB") print_snapshots(it) it = client.list_universal_snapshots( - market_type=SnapshotMarketType.STOCKS, ticker_gte="AAPL", ticker_lte="ABB" + type="options", + ticker_gte="O:AAPL230804C00050000", + ticker_lte="O:AAPL230804C00070000", ) print_snapshots(it) diff --git a/polygon/rest/snapshot.py b/polygon/rest/snapshot.py index 0fb19fd0..3d6a6ce7 100644 --- a/polygon/rest/snapshot.py +++ b/polygon/rest/snapshot.py @@ -8,6 +8,8 @@ SnapshotTickerFullBook, UniversalSnapshot, IndicesSnapshot, + Sort, + Order, ) from urllib3 import HTTPResponse @@ -24,8 +26,11 @@ def get_locale(market_type: Union[SnapshotMarketType, str]): class SnapshotClient(BaseClient): def list_universal_snapshots( self, - market_type: Optional[Union[str, SnapshotMarketType]] = None, + type: Optional[Union[str, SnapshotMarketType]] = None, ticker_any_of: Optional[List[str]] = None, + order: Optional[Union[str, Order]] = None, + limit: Optional[int] = 10, + sort: Optional[Union[str, Sort]] = None, ticker_lt: Optional[str] = None, ticker_lte: Optional[str] = None, ticker_gt: Optional[str] = None, @@ -42,8 +47,11 @@ def list_universal_snapshots( - https://polygon.io/docs/forex/get_v3_snapshot - https://polygon.io/docs/crypto/get_v3_snapshot - :param market_type: the type of the asset + :param type: the type of the asset :param ticker_any_of: Comma-separated list of tickers, up to a maximum of 250. If no tickers are passed then all + :param order: The order to sort the results on. Default is asc (ascending). + :param limit: Limit the size of the response per-page, default is 10 and max is 250. + :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. results will be returned in a paginated manner. Warning: The maximum number of characters allowed in a URL are subject to your technology stack. :param ticker_lt search for tickers less than From 15aa8bce8b863fe63a9d37f12dc810ee83942a01 Mon Sep 17 00:00:00 2001 From: Sam Hewitt Date: Thu, 3 Aug 2023 18:22:16 -0400 Subject: [PATCH 262/448] fix: ticker events returns composite_figi (#423) fixes https://github.com/polygon-io/client-python/issues/422 --- polygon/rest/models/tickers.py | 2 +- .../vX/reference/tickers/META/events&types=ticker_change.json | 4 ++-- test_rest/test_tickers.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 5fdd2add..1c2ea947 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -213,7 +213,7 @@ def from_dict(d): @modelclass class TickerChangeResults: name: str - figi: str + composite_figi: str cik: str events: Optional[List[TickerChangeEvent]] = None diff --git a/test_rest/mocks/vX/reference/tickers/META/events&types=ticker_change.json b/test_rest/mocks/vX/reference/tickers/META/events&types=ticker_change.json index 2aea67cf..19e4cec0 100644 --- a/test_rest/mocks/vX/reference/tickers/META/events&types=ticker_change.json +++ b/test_rest/mocks/vX/reference/tickers/META/events&types=ticker_change.json @@ -1,7 +1,7 @@ { "results": { "name": "Meta Platforms, Inc. Class A Common Stock", - "figi": "BBG000MM2P62", + "composite_figi": "BBG000MM2P62", "cik": "0001326801", "events": [ { @@ -22,4 +22,4 @@ }, "status": "OK", "request_id": "8c911ff1-5ca8-41e8-9bbf-e625141caacc" -} \ No newline at end of file +} diff --git a/test_rest/test_tickers.py b/test_rest/test_tickers.py index bac9eaa8..338386aa 100644 --- a/test_rest/test_tickers.py +++ b/test_rest/test_tickers.py @@ -242,7 +242,7 @@ def test_get_ticker_events_ticker_change(self): events = self.c.get_ticker_events(ticker="META", types="ticker_change") expected = TickerChangeResults( name="Meta Platforms, Inc. Class A Common Stock", - figi="BBG000MM2P62", + composite_figi="BBG000MM2P62", cik="0001326801", events=[ { From 1e3820d11cc7938a474edc7ce14c27f997873e05 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 3 Aug 2023 16:01:23 -0700 Subject: [PATCH 263/448] Fix linting for upgrade to poetry black 23.7.0 (#486) --- examples/rest/crypto-exchanges.py | 2 -- examples/rest/crypto-market_holidays.py | 2 -- examples/rest/crypto-snapshots_all_tickers.py | 4 ---- examples/rest/crypto-snapshots_gainers_losers.py | 6 ------ examples/rest/financials.py | 2 +- examples/rest/forex-exchanges.py | 2 -- examples/rest/forex-market_holidays.py | 2 -- examples/rest/forex-snapshots_all_tickers.py | 4 ---- examples/rest/forex-snapshots_gainers_losers.py | 6 ------ examples/rest/indices-market_holidays.py | 2 -- examples/rest/options-exchanges.py | 2 -- examples/rest/options-market_holidays.py | 2 -- examples/rest/options-ticker_news.py | 2 -- examples/rest/stocks-aggregates_bars_extra.py | 3 --- examples/rest/stocks-aggregates_bars_highcharts.py | 3 --- examples/rest/stocks-exchanges.py | 2 -- examples/rest/stocks-market_holidays.py | 2 -- examples/rest/stocks-snapshots_all.py | 4 ---- examples/rest/stocks-snapshots_gainers_losers.py | 6 ------ examples/rest/stocks-ticker_news.py | 2 -- examples/rest/stocks-trades_extra.py | 3 --- examples/websocket/stocks-ws_extra.py | 4 ---- polygon/modelclass.py | 4 ++-- polygon/rest/reference.py | 1 - test_rest/models/test_requests.py | 1 - 25 files changed, 3 insertions(+), 70 deletions(-) diff --git a/examples/rest/crypto-exchanges.py b/examples/rest/crypto-exchanges.py index c5c2cf79..cf0a46d0 100644 --- a/examples/rest/crypto-exchanges.py +++ b/examples/rest/crypto-exchanges.py @@ -15,10 +15,8 @@ # loop over exchanges for exchange in exchanges: - # verify this is an exchange if isinstance(exchange, Exchange): - # print exchange info print( "{:<15}{} ({})".format( diff --git a/examples/rest/crypto-market_holidays.py b/examples/rest/crypto-market_holidays.py index 13113917..6d1df168 100644 --- a/examples/rest/crypto-market_holidays.py +++ b/examples/rest/crypto-market_holidays.py @@ -15,8 +15,6 @@ # print date, name, and exchange for holiday in holidays: - # verify this is an exchange if isinstance(holiday, MarketHoliday): - print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/crypto-snapshots_all_tickers.py b/examples/rest/crypto-snapshots_all_tickers.py index 91441aae..9bb06621 100644 --- a/examples/rest/crypto-snapshots_all_tickers.py +++ b/examples/rest/crypto-snapshots_all_tickers.py @@ -18,18 +18,14 @@ # crunch some numbers for item in snapshot: - # verify this is an TickerSnapshot if isinstance(item, TickerSnapshot): - # verify this is an Agg if isinstance(item.prev_day, Agg): - # verify this is a float if isinstance(item.prev_day.open, float) and isinstance( item.prev_day.close, float ): - percent_change = ( (item.prev_day.close - item.prev_day.open) / item.prev_day.open diff --git a/examples/rest/crypto-snapshots_gainers_losers.py b/examples/rest/crypto-snapshots_gainers_losers.py index 61a51fa1..34db190b 100644 --- a/examples/rest/crypto-snapshots_gainers_losers.py +++ b/examples/rest/crypto-snapshots_gainers_losers.py @@ -16,13 +16,10 @@ # print ticker with % change for gainer in gainers: - # verify this is a TickerSnapshot if isinstance(gainer, TickerSnapshot): - # verify this is a float if isinstance(gainer.todays_change_percent, float): - print("{:<15}{:.2f} %".format(gainer.ticker, gainer.todays_change_percent)) print() @@ -33,11 +30,8 @@ # print ticker with % change for loser in losers: - # verify this is a TickerSnapshot if isinstance(loser, TickerSnapshot): - # verify this is a float if isinstance(loser.todays_change_percent, float): - print("{:<15}{:.2f} %".format(loser.ticker, loser.todays_change_percent)) diff --git a/examples/rest/financials.py b/examples/rest/financials.py index ecf67e56..f9e6dad5 100644 --- a/examples/rest/financials.py +++ b/examples/rest/financials.py @@ -5,7 +5,7 @@ financials = client.get_ticker_details("NFLX") print(financials) -for (i, n) in enumerate(client.list_ticker_news("INTC", limit=5)): +for i, n in enumerate(client.list_ticker_news("INTC", limit=5)): print(i, n) if i == 5: break diff --git a/examples/rest/forex-exchanges.py b/examples/rest/forex-exchanges.py index a573a19b..e85b3425 100644 --- a/examples/rest/forex-exchanges.py +++ b/examples/rest/forex-exchanges.py @@ -15,10 +15,8 @@ # loop over exchanges for exchange in exchanges: - # verify this is an exchange if isinstance(exchange, Exchange): - # print exchange info print( "{:<15}{} ({})".format( diff --git a/examples/rest/forex-market_holidays.py b/examples/rest/forex-market_holidays.py index 85489844..70c03f44 100644 --- a/examples/rest/forex-market_holidays.py +++ b/examples/rest/forex-market_holidays.py @@ -15,8 +15,6 @@ # print date, name, and exchange for holiday in holidays: - # verify this is an exchange if isinstance(holiday, MarketHoliday): - print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/forex-snapshots_all_tickers.py b/examples/rest/forex-snapshots_all_tickers.py index 0650bbc6..8e0ec6bd 100644 --- a/examples/rest/forex-snapshots_all_tickers.py +++ b/examples/rest/forex-snapshots_all_tickers.py @@ -18,18 +18,14 @@ # crunch some numbers for item in snapshot: - # verify this is an TickerSnapshot if isinstance(item, TickerSnapshot): - # verify this is an Agg if isinstance(item.prev_day, Agg): - # verify this is a float if isinstance(item.prev_day.open, float) and isinstance( item.prev_day.close, float ): - percent_change = ( (item.prev_day.close - item.prev_day.open) / item.prev_day.open diff --git a/examples/rest/forex-snapshots_gainers_losers.py b/examples/rest/forex-snapshots_gainers_losers.py index 16a59149..dd064e63 100644 --- a/examples/rest/forex-snapshots_gainers_losers.py +++ b/examples/rest/forex-snapshots_gainers_losers.py @@ -16,13 +16,10 @@ # print ticker with % change for gainer in gainers: - # verify this is a TickerSnapshot if isinstance(gainer, TickerSnapshot): - # verify this is a float if isinstance(gainer.todays_change_percent, float): - print("{:<15}{:.2f} %".format(gainer.ticker, gainer.todays_change_percent)) print() @@ -33,11 +30,8 @@ # print ticker with % change for loser in losers: - # verify this is a TickerSnapshot if isinstance(loser, TickerSnapshot): - # verify this is a float if isinstance(loser.todays_change_percent, float): - print("{:<15}{:.2f} %".format(loser.ticker, loser.todays_change_percent)) diff --git a/examples/rest/indices-market_holidays.py b/examples/rest/indices-market_holidays.py index c1e94932..0bf112d4 100644 --- a/examples/rest/indices-market_holidays.py +++ b/examples/rest/indices-market_holidays.py @@ -15,8 +15,6 @@ # print date, name, and exchange for holiday in holidays: - # verify this is an exchange if isinstance(holiday, MarketHoliday): - print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/options-exchanges.py b/examples/rest/options-exchanges.py index a1affada..881eed3a 100644 --- a/examples/rest/options-exchanges.py +++ b/examples/rest/options-exchanges.py @@ -15,10 +15,8 @@ # loop over exchanges for exchange in exchanges: - # verify this is an exchange if isinstance(exchange, Exchange): - # print exchange info print( "{:<15}{} ({})".format( diff --git a/examples/rest/options-market_holidays.py b/examples/rest/options-market_holidays.py index d54b8758..d6b03ab2 100644 --- a/examples/rest/options-market_holidays.py +++ b/examples/rest/options-market_holidays.py @@ -15,8 +15,6 @@ # print date, name, and exchange for holiday in holidays: - # verify this is an exchange if isinstance(holiday, MarketHoliday): - print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/options-ticker_news.py b/examples/rest/options-ticker_news.py index 099ee264..be9497d7 100644 --- a/examples/rest/options-ticker_news.py +++ b/examples/rest/options-ticker_news.py @@ -16,10 +16,8 @@ # print date + title for index, item in enumerate(news): - # verify this is an agg if isinstance(item, TickerNews): - print("{:<25}{:<15}".format(item.published_utc, item.title)) if index == 20: diff --git a/examples/rest/stocks-aggregates_bars_extra.py b/examples/rest/stocks-aggregates_bars_extra.py index 98515456..4fd76c37 100644 --- a/examples/rest/stocks-aggregates_bars_extra.py +++ b/examples/rest/stocks-aggregates_bars_extra.py @@ -56,13 +56,10 @@ # writing data for agg in aggs: - # verify this is an agg if isinstance(agg, Agg): - # verify this is an int if isinstance(agg.timestamp, int): - writer.writerow( { "timestamp": datetime.datetime.fromtimestamp(agg.timestamp / 1000), diff --git a/examples/rest/stocks-aggregates_bars_highcharts.py b/examples/rest/stocks-aggregates_bars_highcharts.py index 38b06120..b2529972 100644 --- a/examples/rest/stocks-aggregates_bars_highcharts.py +++ b/examples/rest/stocks-aggregates_bars_highcharts.py @@ -87,13 +87,10 @@ # writing data for agg in aggs: - # verify this is an agg if isinstance(agg, Agg): - # verify this is an int if isinstance(agg.timestamp, int): - new_record = { "date": agg.timestamp, "open": agg.open, diff --git a/examples/rest/stocks-exchanges.py b/examples/rest/stocks-exchanges.py index b65938e2..20c9477a 100644 --- a/examples/rest/stocks-exchanges.py +++ b/examples/rest/stocks-exchanges.py @@ -15,10 +15,8 @@ # loop over exchanges for exchange in exchanges: - # verify this is an exchange if isinstance(exchange, Exchange): - # print exchange info print( "{:<15}{} ({})".format( diff --git a/examples/rest/stocks-market_holidays.py b/examples/rest/stocks-market_holidays.py index bd39bd67..054bfa87 100644 --- a/examples/rest/stocks-market_holidays.py +++ b/examples/rest/stocks-market_holidays.py @@ -15,8 +15,6 @@ # print date, name, and exchange for holiday in holidays: - # verify this is an exchange if isinstance(holiday, MarketHoliday): - print("{:<15}{:<15} ({})".format(holiday.date, holiday.name, holiday.exchange)) diff --git a/examples/rest/stocks-snapshots_all.py b/examples/rest/stocks-snapshots_all.py index 4f6e0157..d1682983 100644 --- a/examples/rest/stocks-snapshots_all.py +++ b/examples/rest/stocks-snapshots_all.py @@ -22,18 +22,14 @@ # crunch some numbers for item in snapshot: - # verify this is an TickerSnapshot if isinstance(item, TickerSnapshot): - # verify this is an Agg if isinstance(item.prev_day, Agg): - # verify this is a float if isinstance(item.prev_day.open, float) and isinstance( item.prev_day.close, float ): - percent_change = ( (item.prev_day.close - item.prev_day.open) / item.prev_day.open diff --git a/examples/rest/stocks-snapshots_gainers_losers.py b/examples/rest/stocks-snapshots_gainers_losers.py index b0194bfa..d0a0e365 100644 --- a/examples/rest/stocks-snapshots_gainers_losers.py +++ b/examples/rest/stocks-snapshots_gainers_losers.py @@ -16,13 +16,10 @@ # print ticker with % change for gainer in gainers: - # verify this is a TickerSnapshot if isinstance(gainer, TickerSnapshot): - # verify this is a float if isinstance(gainer.todays_change_percent, float): - print("{:<15}{:.2f} %".format(gainer.ticker, gainer.todays_change_percent)) print() @@ -33,11 +30,8 @@ # print ticker with % change for loser in losers: - # verify this is a TickerSnapshot if isinstance(loser, TickerSnapshot): - # verify this is a float if isinstance(loser.todays_change_percent, float): - print("{:<15}{:.2f} %".format(loser.ticker, loser.todays_change_percent)) diff --git a/examples/rest/stocks-ticker_news.py b/examples/rest/stocks-ticker_news.py index 41e08653..fa834891 100644 --- a/examples/rest/stocks-ticker_news.py +++ b/examples/rest/stocks-ticker_news.py @@ -18,10 +18,8 @@ # print date + title for index, item in enumerate(news): - # verify this is an agg if isinstance(item, TickerNews): - print("{:<25}{:<15}".format(item.published_utc, item.title)) if index == 20: diff --git a/examples/rest/stocks-trades_extra.py b/examples/rest/stocks-trades_extra.py index 61bc6b7d..1fcf566d 100644 --- a/examples/rest/stocks-trades_extra.py +++ b/examples/rest/stocks-trades_extra.py @@ -16,13 +16,10 @@ # loop through and count price * volume for t in client.list_trades("DIS", "2023-02-07", limit=50000): - # verify this is an Trade if isinstance(t, Trade): - # verify these are float if isinstance(t.price, float) and isinstance(t.size, int): - money += t.price * t.size # format the number so it's human readable diff --git a/examples/websocket/stocks-ws_extra.py b/examples/websocket/stocks-ws_extra.py index 0fdd6bd8..015659a4 100644 --- a/examples/websocket/stocks-ws_extra.py +++ b/examples/websocket/stocks-ws_extra.py @@ -34,10 +34,8 @@ def handle_msg(msgs: List[WebSocketMessage]): # print(m) if type(m) == EquityTrade: - # verify this is a string if isinstance(m.symbol, str): - if m.symbol in string_map: string_map[m.symbol] += 1 else: @@ -45,14 +43,12 @@ def handle_msg(msgs: List[WebSocketMessage]): # verify these are float if isinstance(m.price, float) and isinstance(m.size, int): - global cash_traded cash_traded += m.price * m.size # print(cash_traded) def top_function(): - # start timer start_time = time.time() diff --git a/polygon/modelclass.py b/polygon/modelclass.py index 179e2689..d16718c6 100644 --- a/polygon/modelclass.py +++ b/polygon/modelclass.py @@ -11,10 +11,10 @@ def modelclass(cls): ] def init(self, *args, **kwargs): - for (i, a) in enumerate(args): + for i, a in enumerate(args): if i < len(attributes): self.__dict__[attributes[i]] = a - for (k, v) in kwargs.items(): + for k, v in kwargs.items(): if k in attributes: self.__dict__[k] = v diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 0a0b63c3..38d15752 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -158,7 +158,6 @@ def get_ticker_events( raw: bool = False, options: Optional[RequestOptionBuilder] = None, ) -> Union[TickerChangeResults, HTTPResponse]: - """ Get event history of ticker given particular point in time. :param ticker: The ticker symbol of the asset. diff --git a/test_rest/models/test_requests.py b/test_rest/models/test_requests.py index e7233933..48b25a9a 100644 --- a/test_rest/models/test_requests.py +++ b/test_rest/models/test_requests.py @@ -51,7 +51,6 @@ def test_request_options_builder(self): self.assertDictEqual(all_options, options.headers) def test_header_update(self): - options = RequestOptionBuilder( edge_id="test", edge_ip_address="test", edge_user="test" ) From ac003efd20c8d932a044a611ef3e1cd398942e78 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Aug 2023 16:06:54 -0700 Subject: [PATCH 264/448] Bump black from 22.12.0 to 23.7.0 (#470) Bumps [black](https://github.com/psf/black) from 22.12.0 to 23.7.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/22.12.0...23.7.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 70 +++++++++++++++++++++++--------------------------- pyproject.toml | 2 +- 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/poetry.lock b/poetry.lock index ac6ba756..f43fd9a0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,31 +44,42 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "22.12.0" +version = "23.7.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" -files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, +python-versions = ">=3.8" +files = [ + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" +packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] @@ -427,18 +438,15 @@ files = [ [[package]] name = "packaging" -version = "21.3" +version = "23.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" - [[package]] name = "pathspec" version = "0.10.2" @@ -506,20 +514,6 @@ files = [ [package.extras] plugins = ["importlib-metadata"] -[[package]] -name = "pyparsing" -version = "3.0.9" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = false -python-versions = ">=3.6.8" -files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, -] - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - [[package]] name = "pyrsistent" version = "0.19.2" @@ -960,4 +954,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "481291935b92a0a22eb94d9c2cf8eb7e244099949c26a855c5316b1ace7fdb11" +content-hash = "c0cfa5efdb0a2632adea39d048d9fab7692c104185c0d8b3e78d0c9d0c7a79de" diff --git a/pyproject.toml b/pyproject.toml index 555b6bbb..094d6f27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<12.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] -black = "^22.12.0" +black = "^23.7.0" mypy = "^1.4" types-urllib3 = "^1.26.25" Sphinx = "^5.3.0" From 73b21f882822c37dfebd36cd82320cdaf8dbfb09 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 3 Aug 2023 16:11:44 -0700 Subject: [PATCH 265/448] Update ws spec for launchpad (#464) --- .polygon/websocket.json | 1040 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 992 insertions(+), 48 deletions(-) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 970ecc82..95fbefa8 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -47,6 +47,18 @@ "paths": [ "/stocks/LULD" ] + }, + { + "paths": [ + "/launchpad/stocks/AM" + ], + "launchpad": "exclusive" + }, + { + "paths": [ + "/launchpad/stocks/LV" + ], + "launchpad": "exclusive" } ] }, @@ -71,6 +83,18 @@ "paths": [ "/options/Q" ] + }, + { + "paths": [ + "/launchpad/options/AM" + ], + "launchpad": "exclusive" + }, + { + "paths": [ + "/launchpad/options/LV" + ], + "launchpad": "exclusive" } ] }, @@ -85,6 +109,18 @@ "paths": [ "/forex/C" ] + }, + { + "paths": [ + "/launchpad/forex/AM" + ], + "launchpad": "exclusive" + }, + { + "paths": [ + "/launchpad/forex/LV" + ], + "launchpad": "exclusive" } ] }, @@ -109,6 +145,18 @@ "paths": [ "/crypto/XL2" ] + }, + { + "paths": [ + "/launchpad/crypto/AM" + ], + "launchpad": "exclusive" + }, + { + "paths": [ + "/launchpad/crypto/LV" + ], + "launchpad": "exclusive" } ] }, @@ -867,6 +915,208 @@ ] } }, + "/launchpad/stocks/AM": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time minute aggregates for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a minute aggregate event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The volume-weighted average value for the aggregate window." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + "example": { + "ev": "AM", + "sym": "GTE", + "v": 4110, + "av": 9470157, + "op": 0.4372, + "vw": 0.4488, + "o": 0.4488, + "c": 0.4486, + "h": 0.4489, + "l": 0.4486, + "a": 0.4352, + "z": 685, + "s": 1610144640000, + "e": 1610144700000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/launchpad/stocks/LV": { + "get": { + "summary": "Value", + "description": "Real-time value for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "LV" + ], + "description": "The event type." + }, + "val": { + "description": "The current value of the security." + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "LV", + "val": 3988.5, + "sym": "AAPL", + "t": 1678220098130 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "value", + "description": "Value data" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/options/T": { "get": { "summary": "Trades", @@ -1358,68 +1608,270 @@ ] } }, - "/forex/C": { + "/launchpad/options/AM": { "get": { - "summary": "Quotes", - "description": "Stream real-time forex quotes for a given forex pair.\n", + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time minute aggregates for a given option contract.\n", "parameters": [ { "name": "ticker", "in": "query", - "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "description": "Specify an option contract. You're only allowed to subscribe to 1,000 option contracts per connection.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", "required": true, "schema": { "type": "string", - "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" }, - "example": "*" + "example": "O:SPY241220P00720000" } ], "responses": { "200": { - "description": "The WebSocket message for a forex quote event.", + "description": "The WebSocket message for a minute aggregate event.", "content": { "application/json": { "schema": { - "allOf": [ - { - "type": "object", - "properties": { - "ev": { - "type": "string", - "description": "The event type." - }, - "p": { - "type": "string", - "description": "The current pair." - }, - "x": { - "type": "integer", - "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." - }, - "a": { - "type": "number", - "format": "double", - "description": "The ask price." - }, - "b": { - "type": "number", - "format": "double", - "description": "The bid price." - }, - "t": { - "type": "integer", - "description": "The Timestamp in Unix MS." - } - } + "type": "object", + "properties": { + "ev": { + "description": "The event type." }, - { - "properties": { - "ev": { - "enum": [ - "C" - ], - "description": "The event type." + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The volume-weighted average value for the aggregate window." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + "example": { + "ev": "AM", + "sym": "O:ONEM220121C00025000", + "v": 2, + "av": 8, + "op": 2.2, + "vw": 2.05, + "o": 2.05, + "c": 2.05, + "h": 2.05, + "l": 2.05, + "a": 2.1312, + "z": 1, + "s": 1632419640000, + "e": 1632419700000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/launchpad/options/LV": { + "get": { + "summary": "Value", + "description": "Real-time value for a given options ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an option contract. You're only allowed to subscribe to 1,000 option contracts per connection.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "O:SPY241220P00720000" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "LV" + ], + "description": "The event type." + }, + "val": { + "description": "The current value of the security." + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "LV", + "val": 7.2, + "sym": "O:TSLA210903C00700000", + "t": 1401715883806000000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "value", + "description": "Value data" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/forex/C": { + "get": { + "summary": "Quotes", + "description": "Stream real-time forex quotes for a given forex pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a forex quote event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "type": "string", + "description": "The event type." + }, + "p": { + "type": "string", + "description": "The current pair." + }, + "x": { + "type": "integer", + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs." + }, + "a": { + "type": "number", + "format": "double", + "description": "The ask price." + }, + "b": { + "type": "number", + "format": "double", + "description": "The bid price." + }, + "t": { + "type": "integer", + "description": "The Timestamp in Unix MS." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "C" + ], + "description": "The event type." } } } @@ -1538,14 +1990,216 @@ } }, "x-polygon-entitlement-data-type": { - "name": "aggregates", - "description": "Aggregate data" + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/launchpad/forex/AM": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time per-minute forex aggregates for a given forex pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a minute aggregate event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The volume-weighted average value for the aggregate window." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + "example": { + "ev": "AM", + "sym": "C:USD-EUR", + "v": 4110, + "av": 9470157, + "op": 0.9272, + "vw": 0.9288, + "o": 0.9288, + "c": 0.9286, + "h": 0.9289, + "l": 0.9206, + "a": 0.9352, + "z": 685, + "s": 1610144640000, + "e": 1610144700000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/launchpad/forex/LV": { + "get": { + "summary": "Value", + "description": "Real-time value for a given forex ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "LV" + ], + "description": "The event type." + }, + "val": { + "description": "The current value of the security." + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "LV", + "val": 1.0631, + "sym": "C:EURUSD", + "t": 1678220098130 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "value", + "description": "Value data" }, "x-polygon-entitlement-market-type": { "name": "fx", "description": "Forex data" }, "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, { "name": "realtime", "description": "Real Time Data" @@ -1992,6 +2646,208 @@ ] } }, + "/launchpad/crypto/AM": { + "get": { + "summary": "Aggregates (Per Minute)", + "description": "Stream real-time per-minute crypto aggregates for a given crypto pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a minute aggregate event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The volume-weighted average value for the aggregate window." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + "example": { + "ev": "AM", + "sym": "X:BTC-USD", + "v": 951.6112, + "av": 738.6112, + "op": 26503.8, + "vw": 26503.8, + "o": 27503.8, + "c": 27203.8, + "h": 27893.8, + "l": 26503.8, + "a": 26503.8, + "z": 10, + "s": 1610463240000, + "e": 1610463300000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, + "/launchpad/crypto/LV": { + "get": { + "summary": "Value", + "description": "Real-time value for a given crypto ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "LV" + ], + "description": "The event type." + }, + "val": { + "description": "The current value of the security." + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "LV", + "val": 33021.9, + "sym": "X:BTC-USD", + "t": 1610462007425 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "value", + "description": "Value data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/indices/AM": { "get": { "summary": "Aggregates (Per Minute)", @@ -2163,7 +3019,7 @@ }, "x-polygon-entitlement-data-type": { "name": "value", - "description": "Index value data" + "description": "Value data" }, "x-polygon-entitlement-market-type": { "name": "indices", @@ -3677,6 +4533,94 @@ "description": "The Timestamp in Unix MS." } } + }, + "LaunchpadWebsocketMinuteAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The ticker symbol for the given stock." + }, + "v": { + "type": "integer", + "description": "The tick volume." + }, + "av": { + "type": "integer", + "description": "Today's accumulated volume." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening price." + }, + "vw": { + "type": "number", + "format": "float", + "description": "The volume-weighted average value for the aggregate window." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for the symbol in the given time period." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for the symbol in the given time period." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest price for the symbol in the given time period." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest price for the symbol in the given time period." + }, + "a": { + "type": "number", + "format": "float", + "description": "Today's volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + } + } + }, + "LaunchpadWebsocketValueEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "LV" + ], + "description": "The event type." + }, + "val": { + "description": "The current value of the security." + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } } }, "parameters": { From 1f9dac6b90f7fafeeeaa9ad5969d31d11b2274b8 Mon Sep 17 00:00:00 2001 From: Sam Hewitt Date: Fri, 4 Aug 2023 01:04:56 -0400 Subject: [PATCH 266/448] feat: add type annotations to modelclass (#425) fixes: https://github.com/polygon-io/client-python/issues/424 --- polygon/modelclass.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/polygon/modelclass.py b/polygon/modelclass.py index d16718c6..5499d15c 100644 --- a/polygon/modelclass.py +++ b/polygon/modelclass.py @@ -1,8 +1,12 @@ import inspect +import typing from dataclasses import dataclass -def modelclass(cls): +_T = typing.TypeVar("_T") + + +def modelclass(cls: typing.Type[_T]) -> typing.Type[_T]: cls = dataclass(cls) attributes = [ a @@ -18,6 +22,6 @@ def init(self, *args, **kwargs): if k in attributes: self.__dict__[k] = v - cls.__init__ = init + cls.__init__ = init # type: ignore[assignment] return cls From df9547b02c74e2643a9801ce74ac02310dea029e Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Fri, 4 Aug 2023 09:01:12 -0700 Subject: [PATCH 267/448] Update urllib3 release channel (#487) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 094d6f27..499edd57 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ packages = [ [tool.poetry.dependencies] python = "^3.8" -urllib3 = "^1.26.9" +urllib3 = "^1.26.9,<2.0" websockets = ">=10.3,<12.0" certifi = ">=2022.5.18,<2024.0.0" From 8197af234a4105e17d1aff001655467acf1dcf39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 09:52:52 -0700 Subject: [PATCH 268/448] Bump types-urllib3 from 1.26.25.13 to 1.26.25.14 (#493) Bumps [types-urllib3](https://github.com/python/typeshed) from 1.26.25.13 to 1.26.25.14. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-urllib3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index f43fd9a0..517d69a3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -810,13 +810,13 @@ files = [ [[package]] name = "types-urllib3" -version = "1.26.25.13" +version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" files = [ - {file = "types-urllib3-1.26.25.13.tar.gz", hash = "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5"}, - {file = "types_urllib3-1.26.25.13-py3-none-any.whl", hash = "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"}, + {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, + {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, ] [[package]] @@ -954,4 +954,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "c0cfa5efdb0a2632adea39d048d9fab7692c104185c0d8b3e78d0c9d0c7a79de" +content-hash = "13cb3a20078c28b1561e09785b29278cc7b2a8d882492966af37692fb5588c3f" From 62ff18621c8567ec4fc81bd6cd0fb4f3147dc794 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 10:00:20 -0700 Subject: [PATCH 269/448] Bump types-setuptools from 67.8.0.0 to 68.0.0.3 (#490) Bumps [types-setuptools](https://github.com/python/typeshed) from 67.8.0.0 to 68.0.0.3. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 517d69a3..cf249c34 100644 --- a/poetry.lock +++ b/poetry.lock @@ -799,13 +799,13 @@ files = [ [[package]] name = "types-setuptools" -version = "67.8.0.0" +version = "68.0.0.3" description = "Typing stubs for setuptools" optional = false python-versions = "*" files = [ - {file = "types-setuptools-67.8.0.0.tar.gz", hash = "sha256:95c9ed61871d6c0e258433373a4e1753c0a7c3627a46f4d4058c7b5a08ab844f"}, - {file = "types_setuptools-67.8.0.0-py3-none-any.whl", hash = "sha256:6df73340d96b238a4188b7b7668814b37e8018168aef1eef94a3b1872e3f60ff"}, + {file = "types-setuptools-68.0.0.3.tar.gz", hash = "sha256:d57ae6076100b5704b3cc869fdefc671e1baf4c2cd6643f84265dfc0b955bf05"}, + {file = "types_setuptools-68.0.0.3-py3-none-any.whl", hash = "sha256:fec09e5c18264c5c09351c00be01a34456fb7a88e457abe97401325f84ad9d36"}, ] [[package]] @@ -954,4 +954,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "13cb3a20078c28b1561e09785b29278cc7b2a8d882492966af37692fb5588c3f" +content-hash = "e75b060b1e4ab4bc42506bba0caa5a911af05886dc6c3aa41075fd342961fa0a" diff --git a/pyproject.toml b/pyproject.toml index 499edd57..d82fa90a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.2.2" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" -types-setuptools = "^67.8.0" +types-setuptools = "^68.0.0" pook = "^1.1.1" orjson = "^3.8.13" From 7f53c1a07485bf95a3a2de3ce01bdf83f3c96384 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 10:09:44 -0700 Subject: [PATCH 270/448] Bump sphinx from 5.3.0 to 6.2.1 (#491) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 6.2.1. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.3.0...v6.2.1) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 28 ++++++++++++++-------------- pyproject.toml | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/poetry.lock b/poetry.lock index cf249c34..9ac191f2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -140,13 +140,13 @@ files = [ [[package]] name = "docutils" -version = "0.17.1" +version = "0.18.1" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, + {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, + {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, ] [[package]] @@ -600,27 +600,27 @@ files = [ ] [[package]] -name = "Sphinx" -version = "5.3.0" +name = "sphinx" +version = "6.2.1" description = "Python documentation generator" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, + {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, + {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" +docutils = ">=0.18.1,<0.20" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" +Pygments = ">=2.13" +requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -631,8 +631,8 @@ sphinxcontrib-serializinghtml = ">=1.1.5" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" @@ -954,4 +954,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e75b060b1e4ab4bc42506bba0caa5a911af05886dc6c3aa41075fd342961fa0a" +content-hash = "ebe82130dd8a2b9a4e7e3602600e92e224b7fd3fad5178e34fe3357ba2f8199d" diff --git a/pyproject.toml b/pyproject.toml index d82fa90a..f9904df1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = ">=2022.5.18,<2024.0.0" black = "^23.7.0" mypy = "^1.4" types-urllib3 = "^1.26.25" -Sphinx = "^5.3.0" +Sphinx = "^6.2.1" sphinx-rtd-theme = "^1.2.2" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.23.0" From 797289b93d47629eedc8de8f608a366a01d2e363 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 10:15:03 -0700 Subject: [PATCH 271/448] Bump orjson from 3.8.13 to 3.9.3 (#492) Bumps [orjson](https://github.com/ijl/orjson) from 3.8.13 to 3.9.3. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.8.13...3.9.3) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 106 +++++++++++++++++++++++++++---------------------- pyproject.toml | 2 +- 2 files changed, 59 insertions(+), 49 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9ac191f2..3212a7a3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -383,57 +383,67 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.8.13" +version = "3.9.3" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.7" files = [ - {file = "orjson-3.8.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bf934a036dafe63c3b1d630efaf996b85554e7ab03754019a18cc0fe2bdcc3a9"}, - {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1316c60c0f55440e765b0211e94d171ab2c11d00fe8dcf0ac70c9bd1d9818e6b"}, - {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b98fbca0ea0f5e56b3c1d050b78460ca9708419780ec218cef1eca424db2ee5"}, - {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c97be6a6ff4d546579f08f1d67aad92715313a06b214e3f2df9bb9f1b45765c2"}, - {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e62f14f3eabccdd2108e3d5884fb66197255accc42b9ffa7f04d9dbf7336b479"}, - {file = "orjson-3.8.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d2e9a8ea45db847864868f7a566bece7d425c06627e5dbdd5fc8399a9c3330b"}, - {file = "orjson-3.8.13-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:637d55ba6b48b698973d7e647b9de6bb2b424c445f51c86df4e976e672300b21"}, - {file = "orjson-3.8.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b323bb4af76c16636ac1fec403331208f978ae8a2c6bcab904ee1683c05ad7a"}, - {file = "orjson-3.8.13-cp310-none-win_amd64.whl", hash = "sha256:246e22d167ede9ebf09685587187bde9e2440a515bd5eab2e97f029b9de57677"}, - {file = "orjson-3.8.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:156bd6325a4f4a0c88556b7d774e3e18713c8134b6f807571a3eec14dfcafff6"}, - {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d2ce41c5992dbe9962ef75db1e70ed33636959f2f4b929f9d8cbb2e30472a08"}, - {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50cfa3449157c4a4ad017a041dbb5fe37091800220fd5e651c0e5fff63bdac61"}, - {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59d81f5b9e280ac3ced615e726bfba722785cc5f7fc3aa1e0ea304c5a4114e94"}, - {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d79e5de4a1de246517b4c92dcf6a7ef1fb12e3ce4bbfc6c0f99d1d905405fd"}, - {file = "orjson-3.8.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97d8444cf48f8fe2718fd3b99484906c29a909dc3a8177e8751170a9a28bcf33"}, - {file = "orjson-3.8.13-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f084ce58b3fd496429deb3435aa7295ab57e349a33cdb99b3cb5f0a66a610a84"}, - {file = "orjson-3.8.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ce737ddf9d5f960996b63c12dbcc82ae2315c45f19165b2fe14a5b33ab8705bb"}, - {file = "orjson-3.8.13-cp311-none-win_amd64.whl", hash = "sha256:305ffd227857cede7318c056020d1a3f3295e8adf8e7f2cbd78c26c530a0f234"}, - {file = "orjson-3.8.13-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0055168bc38c9caf7211e66e7c06d7f127d2c1dd1cd1d806c58f3a81d6074a6c"}, - {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc42b2006abaa4fb72c9193931a9236dd85ce0483cc74079c315ce8529568ca1"}, - {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6dcccda35f11f12ebb36db0ebdca9854327530e1fffe02331cde78177851ae7f"}, - {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1234110f782af5e81893b5419b9374ca2559dbd976cbd515e6c3afc292cdfb6a"}, - {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d30b8b9fe1ff56fb6ff64d2c2e227d49819b58ae8dac51089f393e31b39a4080"}, - {file = "orjson-3.8.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24f923cf8d7e2e9a975f4507f93e93c262f26b4a1a4f72e4d6e75eda45de8f40"}, - {file = "orjson-3.8.13-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17788155c50f47d9fd037e12ac82a57381c157ea4de50e8946df8519da0f7f02"}, - {file = "orjson-3.8.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05bfef2719d68b44ab38061f9cd2b3a58d9994f7230734ba6d3c16db97c5e94a"}, - {file = "orjson-3.8.13-cp37-none-win_amd64.whl", hash = "sha256:6fe2981bd0f6959d821253604e9ba2c5ffa03c6202d11f0e3c190e5712b6835b"}, - {file = "orjson-3.8.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2e362090bdd4261608eceefd8ed127cd2bfc48643601f9c0cf5d162ca6a7c4cd"}, - {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a3bc7e12f69f7bcefe522c4e4dac33a9b3b450aae0b3170ab61fbce0a6e1b37"}, - {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e56ca7bd82b25f40955184df21c977369debe51c4b83fc3113b6427726312f3"}, - {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e792d286ad175d36f6b77b7ba77f1654a13f705a7ccfef7819e9b6d49277120d"}, - {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf79f51a7ca59ac322a1e65430142ab1cb9c9a845e893e0e3958deaefe1c9873"}, - {file = "orjson-3.8.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41585f90cfe24d0ae7d5bc96968617b8bcebb618e19db5b0bbadce6bc82f3455"}, - {file = "orjson-3.8.13-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9b5b005841394e563f1ca3314a6884101a1b1f1dd30c569b4a0335e1ebf49fbf"}, - {file = "orjson-3.8.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8075487b7b2e7cc2c44d8ee7950845b6854cd08a04df80b36055cc0236c28edd"}, - {file = "orjson-3.8.13-cp38-none-win_amd64.whl", hash = "sha256:0ca2aced3fa6ce6d440a2a2e55bb7618fd24fce146068523472f349598e992ee"}, - {file = "orjson-3.8.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f8aa77df01c60b7d8b0ff5501d6b8583a4acb06c4373c59bf769025ff8b8b4cb"}, - {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea6899624661d2258a71bde33266c3c08c8d9596865acf0ac19a9552c08fa1a6"}, - {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11a457fafdd207f361986750a5229fc36911fc9fdfc274d078fdf1654845ef45"}, - {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:386e60a09585b2b5db84879ebad6d49427ae5a9677f86a90bff9cbbec42b03be"}, - {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b05ef096362c8a96fdcd85392c68156c9b680271aea350b490c2d0f3ef1b6b6a"}, - {file = "orjson-3.8.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5492a1d9eea5a1cb33ae6d225091c69dc79f16d952885625c00070388489d412"}, - {file = "orjson-3.8.13-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:47cb98386a7ff79d0ace6a7c9d5c49ca2b4ea42e4339c565f5efe7757790dd04"}, - {file = "orjson-3.8.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a4a182e7a58114a81d52d67bdc034eb83571690158c4b8d3f1bf5c5f772f77b1"}, - {file = "orjson-3.8.13-cp39-none-win_amd64.whl", hash = "sha256:b2325d8471867c99c432c96861d72d8b7336293860ebb17c9d70e1d377cc2b32"}, - {file = "orjson-3.8.13.tar.gz", hash = "sha256:14e54713703d5436a7be54ff50d780b6b09358f1a0be6107a3ea4f3537a4f6d8"}, + {file = "orjson-3.9.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:082714b5554fcced092c45272f22a93400389733083c43f5043c4316e86f57a2"}, + {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97ddec69ca4fa1b66d512cf4f4a3fe6a57c4bf21209295ab2f4ada415996e08a"}, + {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab7501722ec2172b1c6ea333bc47bba3bbb9b5fc0e3e891191e8447f43d3187d"}, + {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ae680163ab09f04683d35fbd63eee858019f0066640f7cbad4dba3e7422a4bc"}, + {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e5abca1e0a9d110bab7346fab0acd3b7848d2ee13318bc24a31bbfbdad974b8"}, + {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c55f42a8b07cdb7d514cfaeb56f6e9029eef1cbc8e670ac31fc377c46b993cd1"}, + {file = "orjson-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:303f1324f5ea516f8e874ea0f8d15c581caabdca59fc990705fc76f3bd9f3bdf"}, + {file = "orjson-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c444e3931ea4fe7dec26d195486a681fedc0233230c9b84848f8e60affd4a4"}, + {file = "orjson-3.9.3-cp310-none-win32.whl", hash = "sha256:63333de96d83091023c9c99cc579973a2977b15feb5cdc8d9660104c886e9ab8"}, + {file = "orjson-3.9.3-cp310-none-win_amd64.whl", hash = "sha256:7bce6ff507a83c6a4b6b00726f3a7d7aed0b1f0884aac0440e95b55cac0b113e"}, + {file = "orjson-3.9.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ec4421f377cce51decd6ea3869a8b41e9f05c50bf6acef8284f8906e642992c4"}, + {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b3177bd67756e53bdbd72c79fae3507796a67b67c32a16f4b55cad48ef25c13"}, + {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b21908252c8a13b8f48d4cccdb7fabb592824cf39c9fa4e9076015dd65eabeba"}, + {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7b795c6ac344b0c49776b7e135a9bed0cd15b1ade2a4c7b3a19e3913247702e"}, + {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac43842f5ba26e6f21b4e63312bd1137111a9b9821d7f7dfe189a4015c6c6bc"}, + {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8def4f6560c7b6dbc4b356dfd8e6624a018d920ce5a2864291a2bf1052cd6b68"}, + {file = "orjson-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bbc0dafd1de42c8dbfd6e5d1fe4deab15d2de474e11475921286bebefd109ec8"}, + {file = "orjson-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:85b1870d5420292419b34002659082d77f31b13d4d8cbd67bed9d717c775a0fb"}, + {file = "orjson-3.9.3-cp311-none-win32.whl", hash = "sha256:d6ece3f48f14a06c325181f2b9bd9a9827aac2ecdcad11eb12f561fb697eaaaa"}, + {file = "orjson-3.9.3-cp311-none-win_amd64.whl", hash = "sha256:448feda092c681c0a5b8eec62dd4f625ad5d316dafd56c81fb3f05b5221827ff"}, + {file = "orjson-3.9.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:413d7cf731f1222373360128a3d5232d52630a7355f446bf2659fc3445ec0b76"}, + {file = "orjson-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009a0f79804c604998b068f5f942e40546913ed45ee2f0a3d0e75695bf7543fa"}, + {file = "orjson-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ce062844255cce4d6a8a150e8e78b9fcd6c5a3f1ff3f8792922de25827c25b9c"}, + {file = "orjson-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:776659e18debe5de73c30b0957cd6454fcc61d87377fcb276441fca1b9f1305d"}, + {file = "orjson-3.9.3-cp312-none-win_amd64.whl", hash = "sha256:47b237da3818c8e546df4d2162f0a5cfd50b7b58528907919a27244141e0e48e"}, + {file = "orjson-3.9.3-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f954115d8496d4ab5975438e3ce07780c1644ea0a66c78a943ef79f33769b61a"}, + {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05c57100517b6dbfe34181ed2248bebfab03bd2a7aafb6fbf849c6fd3bb2fbda"}, + {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa6017140fe487ab8fae605a2890c94c6fbe7a8e763ff33bbdb00e27ce078cfd"}, + {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fe77af2ff33c370fb06c9fdf004a66d85ea19c77f0273bbf70c70f98f832725"}, + {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2fa8c385b27bab886caa098fa3ae114d56571ae6e7a5610cb624d7b0a66faed"}, + {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8323739e7905ae4ec4dbdebb31067d28be981f30c11b6ae88ddec2671c0b3194"}, + {file = "orjson-3.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ad43fd5b1ededb54fe01e67468710fcfec8a5830e4ce131f85e741ea151a18e9"}, + {file = "orjson-3.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:42cb645780f732c829bc351346a54157d57f2bc409e671ee36b9fc1037bb77fe"}, + {file = "orjson-3.9.3-cp37-none-win32.whl", hash = "sha256:b84542669d1b0175dc2870025b73cbd4f4a3beb17796de6ec82683663e0400f3"}, + {file = "orjson-3.9.3-cp37-none-win_amd64.whl", hash = "sha256:1440a404ce84f43e2f8e97d8b5fe6f271458e0ffd37290dc3a9f6aa067c69930"}, + {file = "orjson-3.9.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1da8edaefb75f25b449ed4e22d00b9b49211b97dcefd44b742bdd8721d572788"}, + {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47210746acda49febe3bb07253eb5d63d7c7511beec5fa702aad3ce64e15664f"}, + {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:893c62afd5b26f04e2814dffa4d9d4060583ac43dc3e79ed3eadf62a5ac37b2c"}, + {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32aef33ae33901c327fd5679f91fa37199834d122dffd234416a6fe4193d1982"}, + {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd2761384ddb9de63b20795845d5cedadf052255a34c3ff1750cfc77b29d9926"}, + {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e2502b4af2055050dcc74718f2647b65102087c6f5b3f939e2e1a3e3099602"}, + {file = "orjson-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fa7c7a39eeb8dd171f59d96fd4610f908ac14b2f2eb268f4498e5f310bda8da7"}, + {file = "orjson-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc3fe0c0ae7acf00d827efe2506131f1b19af3c87e3d76b0e081748984e51c26"}, + {file = "orjson-3.9.3-cp38-none-win32.whl", hash = "sha256:5b1ff8e920518753b310034e5796f0116f7732b0b27531012d46f0b54f3c8c85"}, + {file = "orjson-3.9.3-cp38-none-win_amd64.whl", hash = "sha256:9f2b1007174c93dd838f52e623c972df33057e3cb7ad9341b7d9bbd66b8d8fb4"}, + {file = "orjson-3.9.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cddc5b8bd7b0d1dfd36637eedbd83726b8b8a5969d3ecee70a9b54a94b8a0258"}, + {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c3bbf4b6f94fad2fd73c81293da8b343fbd07ce48d7836c07d0d54b58c8e93"}, + {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a5cc22ef6973992db18952f8b978781e19a0c62c098f475db936284df9311df7"}, + {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcea93630986209c690f27f32398956b04ccbba8f1fa7c3d1bb88a01d9ab87a"}, + {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:526cb34e63faaad908c34597294507b7a4b999a436b4f206bc4e60ff4e911c20"}, + {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5ac6e30ee10af57f52e72f9c8b9bc4846a9343449d10ca2ae9760615da3042"}, + {file = "orjson-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6c37ab097c062bdf535105c7156839c4e370065c476bb2393149ad31a2cdf6e"}, + {file = "orjson-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:27d69628f449c52a7a34836b15ec948804254f7954457f88de53f2f4de99512f"}, + {file = "orjson-3.9.3-cp39-none-win32.whl", hash = "sha256:5297463d8831c2327ed22bf92eb6d50347071ff1c73fb4702d50b8bc514aeac9"}, + {file = "orjson-3.9.3-cp39-none-win_amd64.whl", hash = "sha256:69a33486b5b6e5a99939fdb13c1c0d8bcc7c89fe6083e7b9ce3c70931ca9fb71"}, + {file = "orjson-3.9.3.tar.gz", hash = "sha256:d3da4faf6398154c1e75d32778035fa7dc284814809f76e8f8d50c4f54859399"}, ] [[package]] @@ -954,4 +964,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "ebe82130dd8a2b9a4e7e3602600e92e224b7fd3fad5178e34fe3357ba2f8199d" +content-hash = "f34a3d2cc590321bf27eaa380d1bc4373795ebf26f788e01ce534069b9641169" diff --git a/pyproject.toml b/pyproject.toml index f9904df1..a060e4a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" types-setuptools = "^68.0.0" pook = "^1.1.1" -orjson = "^3.8.13" +orjson = "^3.9.3" [build-system] requires = ["poetry-core>=1.0.0"] From 7fabf81784ea9da9dbf15c07e74a05f52f28ad48 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:34:25 -0700 Subject: [PATCH 272/448] Add currency to dividends (#495) --- polygon/rest/models/dividends.py | 1 + 1 file changed, 1 insertion(+) diff --git a/polygon/rest/models/dividends.py b/polygon/rest/models/dividends.py index 1abe5dc5..ef9adff0 100644 --- a/polygon/rest/models/dividends.py +++ b/polygon/rest/models/dividends.py @@ -6,6 +6,7 @@ class Dividend: "Dividend contains data for a historical cash dividend, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount." cash_amount: Optional[float] = None + currency: Optional[str] = None declaration_date: Optional[str] = None dividend_type: Optional[str] = None ex_dividend_date: Optional[str] = None From 55a9d076275e8ed3cdd36d0bc6e06c10f6085193 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 10:00:39 -0700 Subject: [PATCH 273/448] Bump orjson from 3.9.3 to 3.9.4 (#497) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.3 to 3.9.4. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.3...3.9.4) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 116 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3212a7a3..1b17b9d9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -383,67 +383,67 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.3" +version = "3.9.4" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.7" files = [ - {file = "orjson-3.9.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:082714b5554fcced092c45272f22a93400389733083c43f5043c4316e86f57a2"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97ddec69ca4fa1b66d512cf4f4a3fe6a57c4bf21209295ab2f4ada415996e08a"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab7501722ec2172b1c6ea333bc47bba3bbb9b5fc0e3e891191e8447f43d3187d"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ae680163ab09f04683d35fbd63eee858019f0066640f7cbad4dba3e7422a4bc"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e5abca1e0a9d110bab7346fab0acd3b7848d2ee13318bc24a31bbfbdad974b8"}, - {file = "orjson-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c55f42a8b07cdb7d514cfaeb56f6e9029eef1cbc8e670ac31fc377c46b993cd1"}, - {file = "orjson-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:303f1324f5ea516f8e874ea0f8d15c581caabdca59fc990705fc76f3bd9f3bdf"}, - {file = "orjson-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c444e3931ea4fe7dec26d195486a681fedc0233230c9b84848f8e60affd4a4"}, - {file = "orjson-3.9.3-cp310-none-win32.whl", hash = "sha256:63333de96d83091023c9c99cc579973a2977b15feb5cdc8d9660104c886e9ab8"}, - {file = "orjson-3.9.3-cp310-none-win_amd64.whl", hash = "sha256:7bce6ff507a83c6a4b6b00726f3a7d7aed0b1f0884aac0440e95b55cac0b113e"}, - {file = "orjson-3.9.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ec4421f377cce51decd6ea3869a8b41e9f05c50bf6acef8284f8906e642992c4"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b3177bd67756e53bdbd72c79fae3507796a67b67c32a16f4b55cad48ef25c13"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b21908252c8a13b8f48d4cccdb7fabb592824cf39c9fa4e9076015dd65eabeba"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7b795c6ac344b0c49776b7e135a9bed0cd15b1ade2a4c7b3a19e3913247702e"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac43842f5ba26e6f21b4e63312bd1137111a9b9821d7f7dfe189a4015c6c6bc"}, - {file = "orjson-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8def4f6560c7b6dbc4b356dfd8e6624a018d920ce5a2864291a2bf1052cd6b68"}, - {file = "orjson-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bbc0dafd1de42c8dbfd6e5d1fe4deab15d2de474e11475921286bebefd109ec8"}, - {file = "orjson-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:85b1870d5420292419b34002659082d77f31b13d4d8cbd67bed9d717c775a0fb"}, - {file = "orjson-3.9.3-cp311-none-win32.whl", hash = "sha256:d6ece3f48f14a06c325181f2b9bd9a9827aac2ecdcad11eb12f561fb697eaaaa"}, - {file = "orjson-3.9.3-cp311-none-win_amd64.whl", hash = "sha256:448feda092c681c0a5b8eec62dd4f625ad5d316dafd56c81fb3f05b5221827ff"}, - {file = "orjson-3.9.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:413d7cf731f1222373360128a3d5232d52630a7355f446bf2659fc3445ec0b76"}, - {file = "orjson-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009a0f79804c604998b068f5f942e40546913ed45ee2f0a3d0e75695bf7543fa"}, - {file = "orjson-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ce062844255cce4d6a8a150e8e78b9fcd6c5a3f1ff3f8792922de25827c25b9c"}, - {file = "orjson-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:776659e18debe5de73c30b0957cd6454fcc61d87377fcb276441fca1b9f1305d"}, - {file = "orjson-3.9.3-cp312-none-win_amd64.whl", hash = "sha256:47b237da3818c8e546df4d2162f0a5cfd50b7b58528907919a27244141e0e48e"}, - {file = "orjson-3.9.3-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f954115d8496d4ab5975438e3ce07780c1644ea0a66c78a943ef79f33769b61a"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05c57100517b6dbfe34181ed2248bebfab03bd2a7aafb6fbf849c6fd3bb2fbda"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa6017140fe487ab8fae605a2890c94c6fbe7a8e763ff33bbdb00e27ce078cfd"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fe77af2ff33c370fb06c9fdf004a66d85ea19c77f0273bbf70c70f98f832725"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2fa8c385b27bab886caa098fa3ae114d56571ae6e7a5610cb624d7b0a66faed"}, - {file = "orjson-3.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8323739e7905ae4ec4dbdebb31067d28be981f30c11b6ae88ddec2671c0b3194"}, - {file = "orjson-3.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ad43fd5b1ededb54fe01e67468710fcfec8a5830e4ce131f85e741ea151a18e9"}, - {file = "orjson-3.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:42cb645780f732c829bc351346a54157d57f2bc409e671ee36b9fc1037bb77fe"}, - {file = "orjson-3.9.3-cp37-none-win32.whl", hash = "sha256:b84542669d1b0175dc2870025b73cbd4f4a3beb17796de6ec82683663e0400f3"}, - {file = "orjson-3.9.3-cp37-none-win_amd64.whl", hash = "sha256:1440a404ce84f43e2f8e97d8b5fe6f271458e0ffd37290dc3a9f6aa067c69930"}, - {file = "orjson-3.9.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1da8edaefb75f25b449ed4e22d00b9b49211b97dcefd44b742bdd8721d572788"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47210746acda49febe3bb07253eb5d63d7c7511beec5fa702aad3ce64e15664f"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:893c62afd5b26f04e2814dffa4d9d4060583ac43dc3e79ed3eadf62a5ac37b2c"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32aef33ae33901c327fd5679f91fa37199834d122dffd234416a6fe4193d1982"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd2761384ddb9de63b20795845d5cedadf052255a34c3ff1750cfc77b29d9926"}, - {file = "orjson-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19e2502b4af2055050dcc74718f2647b65102087c6f5b3f939e2e1a3e3099602"}, - {file = "orjson-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fa7c7a39eeb8dd171f59d96fd4610f908ac14b2f2eb268f4498e5f310bda8da7"}, - {file = "orjson-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc3fe0c0ae7acf00d827efe2506131f1b19af3c87e3d76b0e081748984e51c26"}, - {file = "orjson-3.9.3-cp38-none-win32.whl", hash = "sha256:5b1ff8e920518753b310034e5796f0116f7732b0b27531012d46f0b54f3c8c85"}, - {file = "orjson-3.9.3-cp38-none-win_amd64.whl", hash = "sha256:9f2b1007174c93dd838f52e623c972df33057e3cb7ad9341b7d9bbd66b8d8fb4"}, - {file = "orjson-3.9.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cddc5b8bd7b0d1dfd36637eedbd83726b8b8a5969d3ecee70a9b54a94b8a0258"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c3bbf4b6f94fad2fd73c81293da8b343fbd07ce48d7836c07d0d54b58c8e93"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a5cc22ef6973992db18952f8b978781e19a0c62c098f475db936284df9311df7"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcea93630986209c690f27f32398956b04ccbba8f1fa7c3d1bb88a01d9ab87a"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:526cb34e63faaad908c34597294507b7a4b999a436b4f206bc4e60ff4e911c20"}, - {file = "orjson-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5ac6e30ee10af57f52e72f9c8b9bc4846a9343449d10ca2ae9760615da3042"}, - {file = "orjson-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6c37ab097c062bdf535105c7156839c4e370065c476bb2393149ad31a2cdf6e"}, - {file = "orjson-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:27d69628f449c52a7a34836b15ec948804254f7954457f88de53f2f4de99512f"}, - {file = "orjson-3.9.3-cp39-none-win32.whl", hash = "sha256:5297463d8831c2327ed22bf92eb6d50347071ff1c73fb4702d50b8bc514aeac9"}, - {file = "orjson-3.9.3-cp39-none-win_amd64.whl", hash = "sha256:69a33486b5b6e5a99939fdb13c1c0d8bcc7c89fe6083e7b9ce3c70931ca9fb71"}, - {file = "orjson-3.9.3.tar.gz", hash = "sha256:d3da4faf6398154c1e75d32778035fa7dc284814809f76e8f8d50c4f54859399"}, + {file = "orjson-3.9.4-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2e83ec1ee66d83b558a6d273d8a01b86563daa60bea9bc040e2c1cb8008de61f"}, + {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32a9e0f140c7d0d52f79553cabd1a471f6a4f187c59742239939f1139258a053"}, + {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb429c56ea645e084e34976c2ea0efca7661ee961f61e51405f28bc5a9d1fb24"}, + {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fb7963c17ab347428412a0689f5c89ea480f5d5f7ba3e46c6c2f14f3159ee4"}, + {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:224ad19dcdc21bb220d893807f2563e219319a8891ead3c54243b51a4882d767"}, + {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4974cc2ebb53196081fef96743c02c8b073242b20a40b65d2aa2365ba8c949df"}, + {file = "orjson-3.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b39747f8e57728b9d8c26bd1d28e9a31c028717617a5938a179244b9436c0b31"}, + {file = "orjson-3.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0a31c2cab0ba86998205c2eba550c178a8b4ee7905cadeb402eed45392edb178"}, + {file = "orjson-3.9.4-cp310-none-win32.whl", hash = "sha256:04cd7f4a4f4cd2fe43d104eb70e7435c6fcbdde7aa0cde4230e444fbc66924d3"}, + {file = "orjson-3.9.4-cp310-none-win_amd64.whl", hash = "sha256:4fdb59cfa00e10c82e09d1c32a9ce08a38bd29496ba20a73cd7f498e3a0a5024"}, + {file = "orjson-3.9.4-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:daeed2502ddf1f2b29ec8da2fe2ea82807a5c4acf869608ce6c476db8171d070"}, + {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73d9507a547202f0dd0672e529ce3ca45582d152369c684a9ce75677ce5ae089"}, + {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144a3b8c7cbdd301e1b8cd7dd33e3cbfe7b011df2bebd45b84bacc8cb490302d"}, + {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef7119ebc9b76d5e37c330596616c697d1957779c916aec30cefd28df808f796"}, + {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75f0fc7a64a95027c6f0c70f17969299bdf2b6a85e342b29fc23be2788bad6f"}, + {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e4b20164809b21966b63e063f894927bc85391e60d0a96fa0bb552090f1319c"}, + {file = "orjson-3.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e7c3b7e29572ef2d845a59853475f40fdabec53b8b7d6effda4bb26119c07f5"}, + {file = "orjson-3.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d73c0fd54a52a1a1abfad69d4f1dfb7048cd0b3ef1828ddb4920ef2d3739d8fb"}, + {file = "orjson-3.9.4-cp311-none-win32.whl", hash = "sha256:e12492ce65cb10f385e70a88badc6046bc720fa7d468db27b7429d85d41beaeb"}, + {file = "orjson-3.9.4-cp311-none-win_amd64.whl", hash = "sha256:3b9f8bf43a5367d5522f80e7d533c98d880868cd0b640b9088c9237306eca6e8"}, + {file = "orjson-3.9.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0b400cf89c15958cd829c8a4ade8f5dd73588e63d2fb71a00483e7a74e9f92da"}, + {file = "orjson-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d3b6f2706cb324661899901e6b1fcaee4f5aac7d7588306df3f43e68173840"}, + {file = "orjson-3.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3932b06abf49135c93816c74139c7937fa54079fce3f44db2d598859894c344a"}, + {file = "orjson-3.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:562cf24f9f11df8099e0e78859ba6729e7caa25c2f3947cb228d9152946c854b"}, + {file = "orjson-3.9.4-cp312-none-win_amd64.whl", hash = "sha256:a533e664a0e3904307d662c5d45775544dc2b38df6e39e213ff6a86ceaa3d53c"}, + {file = "orjson-3.9.4-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:149d1b7630771222f73ecb024ab5dd8e7f41502402b02015494d429bacc4d5c1"}, + {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:004f0d307473af210717260dab2ddceab26750ef5d2c6b1f7454c33f7bb69f0c"}, + {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba21fe581a83555024f3cfc9182a2390a61bc50430364855022c518b8ba285a4"}, + {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1fb36efdf2a35286fb87cfaa195fc34621389da1c7b28a8eb51a4d212d60e56d"}, + {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:644728d803200d7774164d252a247e2fcb0d19e4ef7a4a19a1a139ae472c551b"}, + {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bae10f4e7a9145b120e37b6456f1d3853a953e5131fe4740a764e46420289f5"}, + {file = "orjson-3.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c416c50f63bfcf453b6e28d1df956938486191fd1a15aeb95107e810e6e219c8"}, + {file = "orjson-3.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:220ca4125416636a3d6b53a77d50434987a83da243f9080ee4cce7ac6a34bb4a"}, + {file = "orjson-3.9.4-cp37-none-win32.whl", hash = "sha256:bcda6179eb863c295eb5ea832676d33ef12c04d227b4c98267876c8322e5a96e"}, + {file = "orjson-3.9.4-cp37-none-win_amd64.whl", hash = "sha256:3d947366127abef192419257eb7db7fcee0841ced2b49ccceba43b65e9ce5e3f"}, + {file = "orjson-3.9.4-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a7d029fc34a516f7eae29b778b30371fcb621134b2acfe4c51c785102aefc6cf"}, + {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c65df12f92e771361dca45765fcac3d97491799ee8ab3c6c5ecf0155a397a313"}, + {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b749d06a3d84ac27311cb85fb5e8f965efd1c5f27556ad8fcfd1853c323b4d54"}, + {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:161cc72dd3ff569fd67da4af3a23c0c837029085300f0cebc287586ae3b559e0"}, + {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edcbccfe852d1d3d56cc8bfc5fa3688c866619328a73cb2394e79b29b4ab24d2"}, + {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0725260a12d7102b6e66f9925a027f55567255d8455f8288b02d5eedc8925c3e"}, + {file = "orjson-3.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53b417cc9465dbb42ec9cd7be744a921a0ce583556315d172a246d6e71aa043b"}, + {file = "orjson-3.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ab3720fba68cc1c0bad00803d2c5e2c70177da5af12c45e18cc4d14426d56d8"}, + {file = "orjson-3.9.4-cp38-none-win32.whl", hash = "sha256:94d15ee45c2aaed334688e511aa73b4681f7c08a0810884c6b3ae5824dea1222"}, + {file = "orjson-3.9.4-cp38-none-win_amd64.whl", hash = "sha256:336ec8471102851f0699198031924617b7a77baadea889df3ffda6000bd59f4c"}, + {file = "orjson-3.9.4-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2f57ccb50e9e123709e9f2d7b1a9e09e694e49d1fa5c5585e34b8e3f01929dc3"}, + {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e876ef36801b3d4d3a4b0613b6144b0b47f13f3043fd1fcdfafd783c174b538"}, + {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f009c1a02773bdecdd1157036918fef1da47f7193d4ad599c9edb1e1960a0491"}, + {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0a4cf31bfa94cd235aa50030bef3df529e4eb2893ea6a7771c0fb087e4e53b2"}, + {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c32dea3b27a97ac88783c1eb61ccb531865bf478a37df3707cbc96ca8f34a04"}, + {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:264637cad35a1755ab90a8ea290076d444deda20753e55a0eb75496a4645f7bc"}, + {file = "orjson-3.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a4f12e9ec62679c3f2717d9ec41b497a2c2af0b1361229db0dc86ef078a4c034"}, + {file = "orjson-3.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c4fcd1ac0b7850f85398fd9fdbc7150ac4e82d2ae6754cc6acaf49ca7c30d79a"}, + {file = "orjson-3.9.4-cp39-none-win32.whl", hash = "sha256:b5b5038187b74e2d33e5caee8a7e83ddeb6a21da86837fa2aac95c69aeb366e6"}, + {file = "orjson-3.9.4-cp39-none-win_amd64.whl", hash = "sha256:915da36bc93ef0c659fa50fe7939d4f208804ad252fc4fc8d55adbbb82293c48"}, + {file = "orjson-3.9.4.tar.gz", hash = "sha256:a4c9254d21fc44526a3850355b89afd0d00ed73bdf902a5ab416df14a61eac6b"}, ] [[package]] @@ -964,4 +964,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "f34a3d2cc590321bf27eaa380d1bc4373795ebf26f788e01ce534069b9641169" +content-hash = "6efb0d94b802d70f3347dd3b1fa9b57dccc524db3ecfde2ffdbb9fbf39b6bb1c" diff --git a/pyproject.toml b/pyproject.toml index a060e4a2..b96ad4e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" types-setuptools = "^68.0.0" pook = "^1.1.1" -orjson = "^3.9.3" +orjson = "^3.9.4" [build-system] requires = ["poetry-core>=1.0.0"] From e77c22b1479979841e47eda52fd3a01f06f7200c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 10:07:44 -0700 Subject: [PATCH 274/448] Bump mypy from 1.4.1 to 1.5.0 (#498) Bumps [mypy](https://github.com/python/mypy) from 1.4.1 to 1.5.0. - [Commits](https://github.com/python/mypy/compare/v1.4.1...v1.5.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 55 +++++++++++++++++++++++--------------------------- pyproject.toml | 2 +- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1b17b9d9..1daa272e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,37 +312,33 @@ files = [ [[package]] name = "mypy" -version = "1.4.1" +version = "1.5.0" description = "Optional static typing for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mypy-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8"}, - {file = "mypy-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878"}, - {file = "mypy-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd"}, - {file = "mypy-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc"}, - {file = "mypy-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1"}, - {file = "mypy-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462"}, - {file = "mypy-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258"}, - {file = "mypy-1.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2"}, - {file = "mypy-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7"}, - {file = "mypy-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01"}, - {file = "mypy-1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b"}, - {file = "mypy-1.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b"}, - {file = "mypy-1.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7"}, - {file = "mypy-1.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9"}, - {file = "mypy-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042"}, - {file = "mypy-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3"}, - {file = "mypy-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6"}, - {file = "mypy-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f"}, - {file = "mypy-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc"}, - {file = "mypy-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828"}, - {file = "mypy-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3"}, - {file = "mypy-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816"}, - {file = "mypy-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c"}, - {file = "mypy-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f"}, - {file = "mypy-1.4.1-py3-none-any.whl", hash = "sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4"}, - {file = "mypy-1.4.1.tar.gz", hash = "sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b"}, + {file = "mypy-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad3109bec37cc33654de8db30fe8ff3a1bb57ea65144167d68185e6dced9868d"}, + {file = "mypy-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b4ea3a0241cb005b0ccdbd318fb99619b21ae51bcf1660b95fc22e0e7d3ba4a1"}, + {file = "mypy-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fe816e26e676c1311b9e04fd576543b873576d39439f7c24c8e5c7728391ecf"}, + {file = "mypy-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42170e68adb1603ccdc55a30068f72bcfcde2ce650188e4c1b2a93018b826735"}, + {file = "mypy-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d145b81a8214687cfc1f85c03663a5bbe736777410e5580e54d526e7e904f564"}, + {file = "mypy-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c36011320e452eb30bec38b9fd3ba20569dc9545d7d4540d967f3ea1fab9c374"}, + {file = "mypy-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3940cf5845b2512b3ab95463198b0cdf87975dfd17fdcc6ce9709a9abe09e69"}, + {file = "mypy-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9166186c498170e1ff478a7f540846b2169243feb95bc228d39a67a1a450cdc6"}, + {file = "mypy-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:725b57a19b7408ef66a0fd9db59b5d3e528922250fb56e50bded27fea9ff28f0"}, + {file = "mypy-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:eec5c927aa4b3e8b4781840f1550079969926d0a22ce38075f6cfcf4b13e3eb4"}, + {file = "mypy-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79c520aa24f21852206b5ff2cf746dc13020113aa73fa55af504635a96e62718"}, + {file = "mypy-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:769ddb6bfe55c2bd9c7d6d7020885a5ea14289619db7ee650e06b1ef0852c6f4"}, + {file = "mypy-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf18f8db7e5f060d61c91e334d3b96d6bb624ddc9ee8a1cde407b737acbca2c"}, + {file = "mypy-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a2500ad063413bc873ae102cf655bf49889e0763b260a3a7cf544a0cbbf7e70a"}, + {file = "mypy-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:84cf9f7d8a8a22bb6a36444480f4cbf089c917a4179fbf7eea003ea931944a7f"}, + {file = "mypy-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a551ed0fc02455fe2c1fb0145160df8336b90ab80224739627b15ebe2b45e9dc"}, + {file = "mypy-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:372fd97293ed0076d52695849f59acbbb8461c4ab447858cdaeaf734a396d823"}, + {file = "mypy-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8a7444d6fcac7e2585b10abb91ad900a576da7af8f5cffffbff6065d9115813"}, + {file = "mypy-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35b13335c6c46a386577a51f3d38b2b5d14aa619e9633bb756bd77205e4bd09f"}, + {file = "mypy-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:2c9d570f53908cbea326ad8f96028a673b814d9dca7515bf71d95fa662c3eb6f"}, + {file = "mypy-1.5.0-py3-none-any.whl", hash = "sha256:69b32d0dedd211b80f1b7435644e1ef83033a2af2ac65adcdc87c38db68a86be"}, + {file = "mypy-1.5.0.tar.gz", hash = "sha256:f3460f34b3839b9bc84ee3ed65076eb827cd99ed13ed08d723f9083cada4a212"}, ] [package.dependencies] @@ -353,7 +349,6 @@ typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] -python2 = ["typed-ast (>=1.4.0,<2)"] reports = ["lxml"] [[package]] @@ -964,4 +959,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "6efb0d94b802d70f3347dd3b1fa9b57dccc524db3ecfde2ffdbb9fbf39b6bb1c" +content-hash = "b4db72e842162debd0980a191e62d6fa7c880eccf462367923cd036b267f87e1" diff --git a/pyproject.toml b/pyproject.toml index b96ad4e1..3391c905 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] black = "^23.7.0" -mypy = "^1.4" +mypy = "^1.5" types-urllib3 = "^1.26.25" Sphinx = "^6.2.1" sphinx-rtd-theme = "^1.2.2" From 195963965fbe539d0b06047e9d973ac6d711ce1d Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Sun, 20 Aug 2023 11:46:53 -0700 Subject: [PATCH 275/448] Handle JSON decoding errors in _get and _paginate_iter (#500) --- polygon/rest/base.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 70ad34d7..a166e5f2 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -112,7 +112,11 @@ def _get( if raw: return resp - obj = self._decode(resp) + try: + obj = self._decode(resp) + except ValueError as e: + print(f"Error decoding json response: {e}") + return [] if result_key: if result_key not in obj: @@ -193,7 +197,13 @@ def _paginate_iter( raw=True, options=options, ) - decoded = self._decode(resp) + + try: + decoded = self._decode(resp) + except ValueError as e: + print(f"Error decoding json response: {e}") + return [] + if result_key not in decoded: return [] for t in decoded[result_key]: From 1dba0195d84aae306c0fdf64bc0fc7a2a039101d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:42:15 -0700 Subject: [PATCH 276/448] Bump types-setuptools from 68.0.0.3 to 68.1.0.0 (#501) Bumps [types-setuptools](https://github.com/python/typeshed) from 68.0.0.3 to 68.1.0.0. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1daa272e..a59b45f7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "68.0.0.3" +version = "68.1.0.0" description = "Typing stubs for setuptools" optional = false python-versions = "*" files = [ - {file = "types-setuptools-68.0.0.3.tar.gz", hash = "sha256:d57ae6076100b5704b3cc869fdefc671e1baf4c2cd6643f84265dfc0b955bf05"}, - {file = "types_setuptools-68.0.0.3-py3-none-any.whl", hash = "sha256:fec09e5c18264c5c09351c00be01a34456fb7a88e457abe97401325f84ad9d36"}, + {file = "types-setuptools-68.1.0.0.tar.gz", hash = "sha256:2bc9b0c0818f77bdcec619970e452b320a423bb3ac074f5f8bc9300ac281c4ae"}, + {file = "types_setuptools-68.1.0.0-py3-none-any.whl", hash = "sha256:0c1618fb14850cb482adbec602bbb519c43f24942d66d66196bc7528320f33b1"}, ] [[package]] @@ -959,4 +959,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "b4db72e842162debd0980a191e62d6fa7c880eccf462367923cd036b267f87e1" +content-hash = "96016bea1dd3ffef9172b9774a7aa83b22fa09dbe8e0f85267237774d1570572" diff --git a/pyproject.toml b/pyproject.toml index 3391c905..a22c55e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.2.2" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" -types-setuptools = "^68.0.0" +types-setuptools = "^68.1.0" pook = "^1.1.1" orjson = "^3.9.4" From acec1e0ac6a3d3631081aa3f524deeda13847883 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:50:39 -0700 Subject: [PATCH 277/448] Bump mypy from 1.5.0 to 1.5.1 (#502) Bumps [mypy](https://github.com/python/mypy) from 1.5.0 to 1.5.1. - [Commits](https://github.com/python/mypy/compare/v1.5.0...v1.5.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 51 ++++++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/poetry.lock b/poetry.lock index a59b45f7..c5e46e94 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,33 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.5.0" +version = "1.5.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad3109bec37cc33654de8db30fe8ff3a1bb57ea65144167d68185e6dced9868d"}, - {file = "mypy-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b4ea3a0241cb005b0ccdbd318fb99619b21ae51bcf1660b95fc22e0e7d3ba4a1"}, - {file = "mypy-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fe816e26e676c1311b9e04fd576543b873576d39439f7c24c8e5c7728391ecf"}, - {file = "mypy-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42170e68adb1603ccdc55a30068f72bcfcde2ce650188e4c1b2a93018b826735"}, - {file = "mypy-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d145b81a8214687cfc1f85c03663a5bbe736777410e5580e54d526e7e904f564"}, - {file = "mypy-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c36011320e452eb30bec38b9fd3ba20569dc9545d7d4540d967f3ea1fab9c374"}, - {file = "mypy-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f3940cf5845b2512b3ab95463198b0cdf87975dfd17fdcc6ce9709a9abe09e69"}, - {file = "mypy-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9166186c498170e1ff478a7f540846b2169243feb95bc228d39a67a1a450cdc6"}, - {file = "mypy-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:725b57a19b7408ef66a0fd9db59b5d3e528922250fb56e50bded27fea9ff28f0"}, - {file = "mypy-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:eec5c927aa4b3e8b4781840f1550079969926d0a22ce38075f6cfcf4b13e3eb4"}, - {file = "mypy-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79c520aa24f21852206b5ff2cf746dc13020113aa73fa55af504635a96e62718"}, - {file = "mypy-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:769ddb6bfe55c2bd9c7d6d7020885a5ea14289619db7ee650e06b1ef0852c6f4"}, - {file = "mypy-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbf18f8db7e5f060d61c91e334d3b96d6bb624ddc9ee8a1cde407b737acbca2c"}, - {file = "mypy-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a2500ad063413bc873ae102cf655bf49889e0763b260a3a7cf544a0cbbf7e70a"}, - {file = "mypy-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:84cf9f7d8a8a22bb6a36444480f4cbf089c917a4179fbf7eea003ea931944a7f"}, - {file = "mypy-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a551ed0fc02455fe2c1fb0145160df8336b90ab80224739627b15ebe2b45e9dc"}, - {file = "mypy-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:372fd97293ed0076d52695849f59acbbb8461c4ab447858cdaeaf734a396d823"}, - {file = "mypy-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8a7444d6fcac7e2585b10abb91ad900a576da7af8f5cffffbff6065d9115813"}, - {file = "mypy-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:35b13335c6c46a386577a51f3d38b2b5d14aa619e9633bb756bd77205e4bd09f"}, - {file = "mypy-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:2c9d570f53908cbea326ad8f96028a673b814d9dca7515bf71d95fa662c3eb6f"}, - {file = "mypy-1.5.0-py3-none-any.whl", hash = "sha256:69b32d0dedd211b80f1b7435644e1ef83033a2af2ac65adcdc87c38db68a86be"}, - {file = "mypy-1.5.0.tar.gz", hash = "sha256:f3460f34b3839b9bc84ee3ed65076eb827cd99ed13ed08d723f9083cada4a212"}, + {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, + {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, + {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, + {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, + {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, + {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, + {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, + {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, + {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, + {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, + {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, + {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, + {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, + {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, + {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, + {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, + {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, + {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, + {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, ] [package.dependencies] From 04148dd69a45df909d90a7897209951faba3e592 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 12:28:24 -0700 Subject: [PATCH 278/448] Bump orjson from 3.9.4 to 3.9.5 (#503) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.4 to 3.9.5. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.4...3.9.5) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 120 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 63 insertions(+), 59 deletions(-) diff --git a/poetry.lock b/poetry.lock index c5e46e94..c84fa4a4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -383,67 +383,71 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.4" +version = "3.9.5" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.7" files = [ - {file = "orjson-3.9.4-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2e83ec1ee66d83b558a6d273d8a01b86563daa60bea9bc040e2c1cb8008de61f"}, - {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32a9e0f140c7d0d52f79553cabd1a471f6a4f187c59742239939f1139258a053"}, - {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb429c56ea645e084e34976c2ea0efca7661ee961f61e51405f28bc5a9d1fb24"}, - {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fb7963c17ab347428412a0689f5c89ea480f5d5f7ba3e46c6c2f14f3159ee4"}, - {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:224ad19dcdc21bb220d893807f2563e219319a8891ead3c54243b51a4882d767"}, - {file = "orjson-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4974cc2ebb53196081fef96743c02c8b073242b20a40b65d2aa2365ba8c949df"}, - {file = "orjson-3.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b39747f8e57728b9d8c26bd1d28e9a31c028717617a5938a179244b9436c0b31"}, - {file = "orjson-3.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0a31c2cab0ba86998205c2eba550c178a8b4ee7905cadeb402eed45392edb178"}, - {file = "orjson-3.9.4-cp310-none-win32.whl", hash = "sha256:04cd7f4a4f4cd2fe43d104eb70e7435c6fcbdde7aa0cde4230e444fbc66924d3"}, - {file = "orjson-3.9.4-cp310-none-win_amd64.whl", hash = "sha256:4fdb59cfa00e10c82e09d1c32a9ce08a38bd29496ba20a73cd7f498e3a0a5024"}, - {file = "orjson-3.9.4-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:daeed2502ddf1f2b29ec8da2fe2ea82807a5c4acf869608ce6c476db8171d070"}, - {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73d9507a547202f0dd0672e529ce3ca45582d152369c684a9ce75677ce5ae089"}, - {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144a3b8c7cbdd301e1b8cd7dd33e3cbfe7b011df2bebd45b84bacc8cb490302d"}, - {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef7119ebc9b76d5e37c330596616c697d1957779c916aec30cefd28df808f796"}, - {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b75f0fc7a64a95027c6f0c70f17969299bdf2b6a85e342b29fc23be2788bad6f"}, - {file = "orjson-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e4b20164809b21966b63e063f894927bc85391e60d0a96fa0bb552090f1319c"}, - {file = "orjson-3.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e7c3b7e29572ef2d845a59853475f40fdabec53b8b7d6effda4bb26119c07f5"}, - {file = "orjson-3.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d73c0fd54a52a1a1abfad69d4f1dfb7048cd0b3ef1828ddb4920ef2d3739d8fb"}, - {file = "orjson-3.9.4-cp311-none-win32.whl", hash = "sha256:e12492ce65cb10f385e70a88badc6046bc720fa7d468db27b7429d85d41beaeb"}, - {file = "orjson-3.9.4-cp311-none-win_amd64.whl", hash = "sha256:3b9f8bf43a5367d5522f80e7d533c98d880868cd0b640b9088c9237306eca6e8"}, - {file = "orjson-3.9.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0b400cf89c15958cd829c8a4ade8f5dd73588e63d2fb71a00483e7a74e9f92da"}, - {file = "orjson-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d3b6f2706cb324661899901e6b1fcaee4f5aac7d7588306df3f43e68173840"}, - {file = "orjson-3.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3932b06abf49135c93816c74139c7937fa54079fce3f44db2d598859894c344a"}, - {file = "orjson-3.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:562cf24f9f11df8099e0e78859ba6729e7caa25c2f3947cb228d9152946c854b"}, - {file = "orjson-3.9.4-cp312-none-win_amd64.whl", hash = "sha256:a533e664a0e3904307d662c5d45775544dc2b38df6e39e213ff6a86ceaa3d53c"}, - {file = "orjson-3.9.4-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:149d1b7630771222f73ecb024ab5dd8e7f41502402b02015494d429bacc4d5c1"}, - {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:004f0d307473af210717260dab2ddceab26750ef5d2c6b1f7454c33f7bb69f0c"}, - {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba21fe581a83555024f3cfc9182a2390a61bc50430364855022c518b8ba285a4"}, - {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1fb36efdf2a35286fb87cfaa195fc34621389da1c7b28a8eb51a4d212d60e56d"}, - {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:644728d803200d7774164d252a247e2fcb0d19e4ef7a4a19a1a139ae472c551b"}, - {file = "orjson-3.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bae10f4e7a9145b120e37b6456f1d3853a953e5131fe4740a764e46420289f5"}, - {file = "orjson-3.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c416c50f63bfcf453b6e28d1df956938486191fd1a15aeb95107e810e6e219c8"}, - {file = "orjson-3.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:220ca4125416636a3d6b53a77d50434987a83da243f9080ee4cce7ac6a34bb4a"}, - {file = "orjson-3.9.4-cp37-none-win32.whl", hash = "sha256:bcda6179eb863c295eb5ea832676d33ef12c04d227b4c98267876c8322e5a96e"}, - {file = "orjson-3.9.4-cp37-none-win_amd64.whl", hash = "sha256:3d947366127abef192419257eb7db7fcee0841ced2b49ccceba43b65e9ce5e3f"}, - {file = "orjson-3.9.4-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a7d029fc34a516f7eae29b778b30371fcb621134b2acfe4c51c785102aefc6cf"}, - {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c65df12f92e771361dca45765fcac3d97491799ee8ab3c6c5ecf0155a397a313"}, - {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b749d06a3d84ac27311cb85fb5e8f965efd1c5f27556ad8fcfd1853c323b4d54"}, - {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:161cc72dd3ff569fd67da4af3a23c0c837029085300f0cebc287586ae3b559e0"}, - {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:edcbccfe852d1d3d56cc8bfc5fa3688c866619328a73cb2394e79b29b4ab24d2"}, - {file = "orjson-3.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0725260a12d7102b6e66f9925a027f55567255d8455f8288b02d5eedc8925c3e"}, - {file = "orjson-3.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:53b417cc9465dbb42ec9cd7be744a921a0ce583556315d172a246d6e71aa043b"}, - {file = "orjson-3.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ab3720fba68cc1c0bad00803d2c5e2c70177da5af12c45e18cc4d14426d56d8"}, - {file = "orjson-3.9.4-cp38-none-win32.whl", hash = "sha256:94d15ee45c2aaed334688e511aa73b4681f7c08a0810884c6b3ae5824dea1222"}, - {file = "orjson-3.9.4-cp38-none-win_amd64.whl", hash = "sha256:336ec8471102851f0699198031924617b7a77baadea889df3ffda6000bd59f4c"}, - {file = "orjson-3.9.4-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2f57ccb50e9e123709e9f2d7b1a9e09e694e49d1fa5c5585e34b8e3f01929dc3"}, - {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e876ef36801b3d4d3a4b0613b6144b0b47f13f3043fd1fcdfafd783c174b538"}, - {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f009c1a02773bdecdd1157036918fef1da47f7193d4ad599c9edb1e1960a0491"}, - {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f0a4cf31bfa94cd235aa50030bef3df529e4eb2893ea6a7771c0fb087e4e53b2"}, - {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c32dea3b27a97ac88783c1eb61ccb531865bf478a37df3707cbc96ca8f34a04"}, - {file = "orjson-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:264637cad35a1755ab90a8ea290076d444deda20753e55a0eb75496a4645f7bc"}, - {file = "orjson-3.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a4f12e9ec62679c3f2717d9ec41b497a2c2af0b1361229db0dc86ef078a4c034"}, - {file = "orjson-3.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c4fcd1ac0b7850f85398fd9fdbc7150ac4e82d2ae6754cc6acaf49ca7c30d79a"}, - {file = "orjson-3.9.4-cp39-none-win32.whl", hash = "sha256:b5b5038187b74e2d33e5caee8a7e83ddeb6a21da86837fa2aac95c69aeb366e6"}, - {file = "orjson-3.9.4-cp39-none-win_amd64.whl", hash = "sha256:915da36bc93ef0c659fa50fe7939d4f208804ad252fc4fc8d55adbbb82293c48"}, - {file = "orjson-3.9.4.tar.gz", hash = "sha256:a4c9254d21fc44526a3850355b89afd0d00ed73bdf902a5ab416df14a61eac6b"}, + {file = "orjson-3.9.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ad6845912a71adcc65df7c8a7f2155eba2096cf03ad2c061c93857de70d699ad"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e298e0aacfcc14ef4476c3f409e85475031de24e5b23605a465e9bf4b2156273"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:83c9939073281ef7dd7c5ca7f54cceccb840b440cec4b8a326bda507ff88a0a6"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e174cc579904a48ee1ea3acb7045e8a6c5d52c17688dfcb00e0e842ec378cabf"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d51702f42c785b115401e1d64a27a2ea767ae7cf1fb8edaa09c7cf1571c660"}, + {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f13d61c0c7414ddee1ef4d0f303e2222f8cced5a2e26d9774751aecd72324c9e"}, + {file = "orjson-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d748cc48caf5a91c883d306ab648df1b29e16b488c9316852844dd0fd000d1c2"}, + {file = "orjson-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bd19bc08fa023e4c2cbf8294ad3f2b8922f4de9ba088dbc71e6b268fdf54591c"}, + {file = "orjson-3.9.5-cp310-none-win32.whl", hash = "sha256:5793a21a21bf34e1767e3d61a778a25feea8476dcc0bdf0ae1bc506dc34561ea"}, + {file = "orjson-3.9.5-cp310-none-win_amd64.whl", hash = "sha256:2bcec0b1024d0031ab3eab7a8cb260c8a4e4a5e35993878a2da639d69cdf6a65"}, + {file = "orjson-3.9.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8547b95ca0e2abd17e1471973e6d676f1d8acedd5f8fb4f739e0612651602d66"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87ce174d6a38d12b3327f76145acbd26f7bc808b2b458f61e94d83cd0ebb4d76"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a960bb1bc9a964d16fcc2d4af5a04ce5e4dfddca84e3060c35720d0a062064fe"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a7aa5573a949760d6161d826d34dc36db6011926f836851fe9ccb55b5a7d8e8"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b2852afca17d7eea85f8e200d324e38c851c96598ac7b227e4f6c4e59fbd3df"}, + {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa185959c082475288da90f996a82e05e0c437216b96f2a8111caeb1d54ef926"}, + {file = "orjson-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:89c9332695b838438ea4b9a482bce8ffbfddde4df92750522d928fb00b7b8dce"}, + {file = "orjson-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2493f1351a8f0611bc26e2d3d407efb873032b4f6b8926fed8cfed39210ca4ba"}, + {file = "orjson-3.9.5-cp311-none-win32.whl", hash = "sha256:ffc544e0e24e9ae69301b9a79df87a971fa5d1c20a6b18dca885699709d01be0"}, + {file = "orjson-3.9.5-cp311-none-win_amd64.whl", hash = "sha256:89670fe2732e3c0c54406f77cad1765c4c582f67b915c74fda742286809a0cdc"}, + {file = "orjson-3.9.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:15df211469625fa27eced4aa08dc03e35f99c57d45a33855cc35f218ea4071b8"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9f17c59fe6c02bc5f89ad29edb0253d3059fe8ba64806d789af89a45c35269a"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca6b96659c7690773d8cebb6115c631f4a259a611788463e9c41e74fa53bf33f"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a26fafe966e9195b149950334bdbe9026eca17fe8ffe2d8fa87fdc30ca925d30"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9006b1eb645ecf460da067e2dd17768ccbb8f39b01815a571bfcfab7e8da5e52"}, + {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebfdbf695734b1785e792a1315e41835ddf2a3e907ca0e1c87a53f23006ce01d"}, + {file = "orjson-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4a3943234342ab37d9ed78fb0a8f81cd4b9532f67bf2ac0d3aa45fa3f0a339f3"}, + {file = "orjson-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e6762755470b5c82f07b96b934af32e4d77395a11768b964aaa5eb092817bc31"}, + {file = "orjson-3.9.5-cp312-none-win_amd64.whl", hash = "sha256:c74df28749c076fd6e2157190df23d43d42b2c83e09d79b51694ee7315374ad5"}, + {file = "orjson-3.9.5-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:88e18a74d916b74f00d0978d84e365c6bf0e7ab846792efa15756b5fb2f7d49d"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28514b5b6dfaf69097be70d0cf4f1407ec29d0f93e0b4131bf9cc8fd3f3e374"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25b81aca8c7be61e2566246b6a0ca49f8aece70dd3f38c7f5c837f398c4cb142"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:385c1c713b1e47fd92e96cf55fd88650ac6dfa0b997e8aa7ecffd8b5865078b1"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9850c03a8e42fba1a508466e6a0f99472fd2b4a5f30235ea49b2a1b32c04c11"}, + {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4449f84bbb13bcef493d8aa669feadfced0f7c5eea2d0d88b5cc21f812183af8"}, + {file = "orjson-3.9.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:86127bf194f3b873135e44ce5dc9212cb152b7e06798d5667a898a00f0519be4"}, + {file = "orjson-3.9.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0abcd039f05ae9ab5b0ff11624d0b9e54376253b7d3217a358d09c3edf1d36f7"}, + {file = "orjson-3.9.5-cp37-none-win32.whl", hash = "sha256:10cc8ad5ff7188efcb4bec196009d61ce525a4e09488e6d5db41218c7fe4f001"}, + {file = "orjson-3.9.5-cp37-none-win_amd64.whl", hash = "sha256:ff27e98532cb87379d1a585837d59b187907228268e7b0a87abe122b2be6968e"}, + {file = "orjson-3.9.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5bfa79916ef5fef75ad1f377e54a167f0de334c1fa4ebb8d0224075f3ec3d8c0"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87dfa6ac0dae764371ab19b35eaaa46dfcb6ef2545dfca03064f21f5d08239f"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50ced24a7b23058b469ecdb96e36607fc611cbaee38b58e62a55c80d1b3ad4e1"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1b74ea2a3064e1375da87788897935832e806cc784de3e789fd3c4ab8eb3fa5"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7cb961efe013606913d05609f014ad43edfaced82a576e8b520a5574ce3b2b9"}, + {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1225d2d5ee76a786bda02f8c5e15017462f8432bb960de13d7c2619dba6f0275"}, + {file = "orjson-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f39f4b99199df05c7ecdd006086259ed25886cdbd7b14c8cdb10c7675cfcca7d"}, + {file = "orjson-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a461dc9fb60cac44f2d3218c36a0c1c01132314839a0e229d7fb1bba69b810d8"}, + {file = "orjson-3.9.5-cp38-none-win32.whl", hash = "sha256:dedf1a6173748202df223aea29de814b5836732a176b33501375c66f6ab7d822"}, + {file = "orjson-3.9.5-cp38-none-win_amd64.whl", hash = "sha256:fa504082f53efcbacb9087cc8676c163237beb6e999d43e72acb4bb6f0db11e6"}, + {file = "orjson-3.9.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6900f0248edc1bec2a2a3095a78a7e3ef4e63f60f8ddc583687eed162eedfd69"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17404333c40047888ac40bd8c4d49752a787e0a946e728a4e5723f111b6e55a5"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0eefb7cfdd9c2bc65f19f974a5d1dfecbac711dae91ed635820c6b12da7a3c11"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68c78b2a3718892dc018adbc62e8bab6ef3c0d811816d21e6973dee0ca30c152"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:591ad7d9e4a9f9b104486ad5d88658c79ba29b66c5557ef9edf8ca877a3f8d11"}, + {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cc2cbf302fbb2d0b2c3c142a663d028873232a434d89ce1b2604ebe5cc93ce8"}, + {file = "orjson-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b26b5aa5e9ee1bad2795b925b3adb1b1b34122cb977f30d89e0a1b3f24d18450"}, + {file = "orjson-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef84724f7d29dcfe3aafb1fc5fc7788dca63e8ae626bb9298022866146091a3e"}, + {file = "orjson-3.9.5-cp39-none-win32.whl", hash = "sha256:664cff27f85939059472afd39acff152fbac9a091b7137092cb651cf5f7747b5"}, + {file = "orjson-3.9.5-cp39-none-win_amd64.whl", hash = "sha256:91dda66755795ac6100e303e206b636568d42ac83c156547634256a2e68de694"}, + {file = "orjson-3.9.5.tar.gz", hash = "sha256:6daf5ee0b3cf530b9978cdbf71024f1c16ed4a67d05f6ec435c6e7fe7a52724c"}, ] [[package]] @@ -964,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "96016bea1dd3ffef9172b9774a7aa83b22fa09dbe8e0f85267237774d1570572" +content-hash = "8c3498eba07ef60c306f8d29f4e5cf63aa642b92e8864adc40c8c3b712c74f68" diff --git a/pyproject.toml b/pyproject.toml index a22c55e7..468987f9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" types-setuptools = "^68.1.0" pook = "^1.1.1" -orjson = "^3.9.4" +orjson = "^3.9.5" [build-system] requires = ["poetry-core>=1.0.0"] From 0aa413cb800121d7f38d52d215197451d3e0a800 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 21 Aug 2023 13:38:26 -0700 Subject: [PATCH 279/448] Update ws example value (#489) --- .polygon/websocket.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 95fbefa8..ed77968a 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -1089,7 +1089,7 @@ }, "example": { "ev": "LV", - "val": 3988.5, + "val": 189.22, "sym": "AAPL", "t": 1678220098130 } From 9283470eb927f4413fc63c5667415610083aefca Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Fri, 25 Aug 2023 12:29:09 -0700 Subject: [PATCH 280/448] Updated stocks-ws_extra.py example (#505) * Updated stocks-ws_extra.py example * Added example output to stocks-ws_extra.py --- examples/websocket/stocks-ws_extra.py | 177 +++++++++++++++++++------- 1 file changed, 131 insertions(+), 46 deletions(-) diff --git a/examples/websocket/stocks-ws_extra.py b/examples/websocket/stocks-ws_extra.py index 015659a4..d43e5c1e 100644 --- a/examples/websocket/stocks-ws_extra.py +++ b/examples/websocket/stocks-ws_extra.py @@ -16,6 +16,65 @@ # program then prints the map, which gives a readout of the top stocks # traded in the past 5 seconds. +# Here's what the output looks like after running it for a couple hours: + +""" + --- Past 5 seconds --- + Tickers seen (5s): 1697 + Trades seen (5s): 12335 + Cash traded (5s): 88,849,414.33 + + --- Running Totals --- + Total Tickers seen: 13848 + Total Trades seen: 22775838 + Total Cash traded: 178,499,702,488.96 + +---------------------------------------------------------------------------------------------------- + +Ticker Trades (5s) Cash (5s) Total Trades Total Cash +NVDA 445 6,933,283.61 632550 18,291,747,596.36 +TSLA 279 8,144,556.76 639585 11,319,594,268.07 +NVDL 277 3,748,806.85 10451 99,902,192.88 +TELL 171 78,424.03 6154 3,710,200.38 +AFRM 163 968,984.99 224338 745,895,134.93 +AAPL 134 2,359,278.02 304572 2,932,389,741.58 +QQQ 132 5,788,859.71 246679 11,003,577,730.48 +NVDS 130 598,047.04 7846 48,854,967.44 +SOXL 127 786,026.38 189184 719,639,349.26 +AMD 116 1,549,180.08 304704 3,713,351,432.39 +SPY 113 6,628,554.14 278926 15,435,607,506.98 +MSFT 109 1,600,861.75 148047 2,396,824,971.18 +SQQQ 88 1,006,330.83 173406 2,065,760,858.90 +TQQQ 83 717,574.40 296021 2,580,097,288.27 +PLUG 82 106,542.65 31921 53,825,007.27 +ITB 75 455,902.33 23369 185,892,273.60 +AVGO 71 1,955,826.79 31586 633,629,812.65 +STX 71 273,681.77 8420 34,141,139.17 +XPEV 68 234,765.41 41284 127,781,104.54 +OIH 55 662.12 2964 65,848,514.45 +XEL 54 197,642.42 18524 103,054,857.37 +XLU 53 850,017.20 35963 291,891,266.17 +ARRY 52 164,056.54 11354 23,001,537.49 +META 52 1,457,535.82 150793 2,717,344,906.63 +PLTR 52 147,743.93 86456 396,851,801.06 + +Current Time: 2023-08-25 08:27:14.602075 | App Uptime: 04:49:40 | Time taken: 0.003417 seconds +""" + +app_start_time = time.time() +string_map: Dict[str, int] = {} +cash_map_5s: Dict[str, float] = {} +cash_traded = float(0) + +# totals +total_tickers_seen = 0 +total_trades_seen = 0 +total_cash_traded = 0.0 + +# These dictionaries will keep track of the running total of trades and cash per ticker. +total_string_map: Dict[str, int] = {} +total_cash_map: Dict[str, float] = {} + def run_websocket_client(): # client = WebSocketClient("XXXXXX") # hardcoded api_key is used @@ -24,70 +83,96 @@ def run_websocket_client(): client.run(handle_msg) -string_map: Dict[str, int] -string_map = {} # -cash_traded = float(0) - - def handle_msg(msgs: List[WebSocketMessage]): + global cash_traded + global total_tickers_seen, total_trades_seen, total_cash_traded for m in msgs: - # print(m) - - if type(m) == EquityTrade: - # verify this is a string + if isinstance(m, EquityTrade): + # Update total trades and cash for the past 5 seconds if isinstance(m.symbol, str): - if m.symbol in string_map: - string_map[m.symbol] += 1 - else: - string_map[m.symbol] = 1 + string_map[m.symbol] = string_map.get(m.symbol, 0) + 1 + total_string_map[m.symbol] = total_string_map.get(m.symbol, 0) + 1 - # verify these are float + # Update cash traded if isinstance(m.price, float) and isinstance(m.size, int): - global cash_traded - cash_traded += m.price * m.size - # print(cash_traded) + cash_value = m.price * m.size + cash_traded += cash_value + total_cash_map[m.symbol] = ( # type: ignore + total_cash_map.get(m.symbol, 0) + cash_value # type: ignore + ) + + # Update cash for the past 5 seconds + cash_map_5s[m.symbol] = ( # type: ignore + cash_map_5s.get(m.symbol, 0) + cash_value # type: ignore + ) # Okay! + + # Update totals + total_tickers_seen = len(total_string_map) + total_trades_seen += 1 + total_cash_traded += cash_value def top_function(): # start timer start_time = time.time() + global cash_traded - sorted_string_map = sorted(string_map.items(), key=lambda x: x[1], reverse=True) - print("\033c", end="") # ANSI escape sequence to clear the screen - - for index, item in sorted_string_map[:25]: - print("{:<15}{:<15}".format(index, item)) - - # end timer + # Only sort the string_map once + sorted_trades_5s = sorted(string_map.items(), key=lambda x: x[1], reverse=True) + + # Clear screen + print("\033c", end="") + + # Print 5-second snapshot + print("\n --- Past 5 seconds ---") + print(f" Tickers seen (5s): {len(string_map)}") + print(f" Trades seen (5s): {sum(string_map.values())}") + print(f" Cash traded (5s): {cash_traded:,.2f}") + print("\n --- Running Totals ---") + print(f" Total Tickers seen: {total_tickers_seen}") + print(f" Total Trades seen: {total_trades_seen}") + print(f" Total Cash traded: {total_cash_traded:,.2f}") + + # Separator + print("\n" + "-" * 100 + "\n") + + # Print table header + print( + "{:<15}{:<20}{:<20}{:<20}{:<20}".format( + "Ticker", "Trades (5s)", "Cash (5s)", "Total Trades", "Total Cash" + ) + ) + + # Print table content + for ticker, trades in sorted(string_map.items(), key=lambda x: x[1], reverse=True)[ + :25 + ]: + cash_5s = cash_map_5s.get(ticker, 0) + total_trades = total_string_map[ticker] + total_cash = total_cash_map.get(ticker, 0.0) + print( + "{:<15}{:<20}{:<20,.2f}{:<20}{:<20,.2f}".format( + ticker, trades, cash_5s, total_trades, total_cash + ) + ) + + # Print times end_time = time.time() - - # print stats - print() - - # current time current_time = datetime.now() - print(f"Time: {current_time}") - - # how many tickers seen - ticker_count = len(sorted_string_map) - print(f"Tickers seen: {ticker_count}") - # how many trades seen - trade_count = 0 - for index, item in sorted_string_map: - trade_count += item - print(f"Trades seen: {trade_count}") - - # cash traded - global cash_traded - formatted_number = "{:,.2f}".format(cash_traded) - print("Roughly " + formatted_number + " cash changed hands") + # Print elapsed the since we started + elapsed_time = time.time() - app_start_time + hours, rem = divmod(elapsed_time, 3600) + minutes, seconds = divmod(rem, 60) - # performance? - print(f"Time taken: {end_time - start_time:.6f} seconds") + # Print the time and quick stats + print( + f"\nCurrent Time: {current_time} | App Uptime: {int(hours):02}:{int(minutes):02}:{int(seconds):02} | Time taken: {end_time - start_time:.6f} seconds" + ) # clear map and cash for next loop string_map.clear() + cash_map_5s.clear() cash_traded = 0 From 195d3a2894b979c4ad86c6bd170b674e09c30d9d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 09:19:25 -0700 Subject: [PATCH 281/448] Bump sphinx-rtd-theme from 1.2.2 to 1.3.0 (#506) Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 1.2.2 to 1.3.0. - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/1.2.2...1.3.0) --- updated-dependencies: - dependency-name: sphinx-rtd-theme dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index c84fa4a4..c6b6577b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "alabaster" @@ -669,18 +669,18 @@ type-comment = ["typed-ast (>=1.5.4)"] [[package]] name = "sphinx-rtd-theme" -version = "1.2.2" +version = "1.3.0" description = "Read the Docs theme for Sphinx" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, - {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, + {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, + {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, ] [package.dependencies] docutils = "<0.19" -sphinx = ">=1.6,<7" +sphinx = ">=1.6,<8" sphinxcontrib-jquery = ">=4,<5" [package.extras] @@ -968,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8c3498eba07ef60c306f8d29f4e5cf63aa642b92e8864adc40c8c3b712c74f68" +content-hash = "55b9d8ebbdb3489a3c420a1a2681791a4267c47a3708e0e1b608d8b6bb017a42" diff --git a/pyproject.toml b/pyproject.toml index 468987f9..88b6dd00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ black = "^23.7.0" mypy = "^1.5" types-urllib3 = "^1.26.25" Sphinx = "^6.2.1" -sphinx-rtd-theme = "^1.2.2" +sphinx-rtd-theme = "^1.3.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.23.0" types-certifi = "^2021.10.8" From 906a9de36f7f555fc408b4e0bbebf946cb685083 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 09:57:08 -0700 Subject: [PATCH 282/448] Bump types-setuptools from 68.1.0.0 to 68.1.0.1 (#508) Bumps [types-setuptools](https://github.com/python/typeshed) from 68.1.0.0 to 68.1.0.1. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c6b6577b..8de7dd54 100644 --- a/poetry.lock +++ b/poetry.lock @@ -813,13 +813,13 @@ files = [ [[package]] name = "types-setuptools" -version = "68.1.0.0" +version = "68.1.0.1" description = "Typing stubs for setuptools" optional = false python-versions = "*" files = [ - {file = "types-setuptools-68.1.0.0.tar.gz", hash = "sha256:2bc9b0c0818f77bdcec619970e452b320a423bb3ac074f5f8bc9300ac281c4ae"}, - {file = "types_setuptools-68.1.0.0-py3-none-any.whl", hash = "sha256:0c1618fb14850cb482adbec602bbb519c43f24942d66d66196bc7528320f33b1"}, + {file = "types-setuptools-68.1.0.1.tar.gz", hash = "sha256:271ed8da44885cd9a701c86e48cc6d3cc988052260e72b3ce26c26b3028f86ed"}, + {file = "types_setuptools-68.1.0.1-py3-none-any.whl", hash = "sha256:a9a0d2ca1da8a15924890d464adcee4004deb07b6a99bd0b1881eac5c73cb3a7"}, ] [[package]] From 584e7f86d4f870f1d2ea99a3d75ec89334944e78 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 10:02:49 -0700 Subject: [PATCH 283/448] Bump sphinx from 6.2.1 to 7.1.2 (#509) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 6.2.1 to 7.1.2. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v6.2.1...v7.1.2) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8de7dd54..2894a3ec 100644 --- a/poetry.lock +++ b/poetry.lock @@ -615,20 +615,20 @@ files = [ [[package]] name = "sphinx" -version = "6.2.1" +version = "7.1.2" description = "Python documentation generator" optional = false python-versions = ">=3.8" files = [ - {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, - {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, + {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, + {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.20" +docutils = ">=0.18.1,<0.21" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" @@ -968,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "55b9d8ebbdb3489a3c420a1a2681791a4267c47a3708e0e1b608d8b6bb017a42" +content-hash = "97d97b1f845e08ca8dc3abb5d61363b1e77fb281046578ad5e7eb2a756461a62" diff --git a/pyproject.toml b/pyproject.toml index 88b6dd00..294e8fce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ certifi = ">=2022.5.18,<2024.0.0" black = "^23.7.0" mypy = "^1.5" types-urllib3 = "^1.26.25" -Sphinx = "^6.2.1" +Sphinx = "^7.1.2" sphinx-rtd-theme = "^1.3.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.23.0" From c999c067c51bb68f8da0e5737544669332779130 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 6 Sep 2023 08:02:50 -0700 Subject: [PATCH 284/448] Center text for better formatting (#510) * Center text for better formatting * Add cash traded past 5 seconds --- examples/websocket/stocks-ws_extra.py | 36 +++++++++++++++++---------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/examples/websocket/stocks-ws_extra.py b/examples/websocket/stocks-ws_extra.py index d43e5c1e..a32cfa18 100644 --- a/examples/websocket/stocks-ws_extra.py +++ b/examples/websocket/stocks-ws_extra.py @@ -5,6 +5,7 @@ from datetime import datetime import time import threading +import os # docs # https://polygon.io/docs/stocks/ws_stocks_am @@ -76,6 +77,11 @@ total_cash_map: Dict[str, float] = {} +def print_centered(s: str): + term_width = os.get_terminal_size().columns + print(s.center(term_width)) + + def run_websocket_client(): # client = WebSocketClient("XXXXXX") # hardcoded api_key is used client = WebSocketClient() # POLYGON_API_KEY environment variable is used @@ -124,20 +130,23 @@ def top_function(): print("\033c", end="") # Print 5-second snapshot - print("\n --- Past 5 seconds ---") - print(f" Tickers seen (5s): {len(string_map)}") - print(f" Trades seen (5s): {sum(string_map.values())}") - print(f" Cash traded (5s): {cash_traded:,.2f}") - print("\n --- Running Totals ---") - print(f" Total Tickers seen: {total_tickers_seen}") - print(f" Total Trades seen: {total_trades_seen}") - print(f" Total Cash traded: {total_cash_traded:,.2f}") + print() + print_centered("--- Past 5 seconds ---") + print_centered(f"Tickers seen (5s): {len(string_map)}") + print_centered(f"Trades seen (5s): {sum(string_map.values())}") + print_centered(f"Cash traded (5s): {cash_traded:,.2f}") + print() + print_centered("--- Running Totals ---") + print_centered(f"Total Tickers seen: {total_tickers_seen}") + print_centered(f"Total Trades seen: {total_trades_seen}") + print_centered(f"Total Cash traded: {total_cash_traded:,.2f}") # Separator - print("\n" + "-" * 100 + "\n") + print() + print_centered("-" * 100 + "\n") # Print table header - print( + print_centered( "{:<15}{:<20}{:<20}{:<20}{:<20}".format( "Ticker", "Trades (5s)", "Cash (5s)", "Total Trades", "Total Cash" ) @@ -150,7 +159,7 @@ def top_function(): cash_5s = cash_map_5s.get(ticker, 0) total_trades = total_string_map[ticker] total_cash = total_cash_map.get(ticker, 0.0) - print( + print_centered( "{:<15}{:<20}{:<20,.2f}{:<20}{:<20,.2f}".format( ticker, trades, cash_5s, total_trades, total_cash ) @@ -166,8 +175,9 @@ def top_function(): minutes, seconds = divmod(rem, 60) # Print the time and quick stats - print( - f"\nCurrent Time: {current_time} | App Uptime: {int(hours):02}:{int(minutes):02}:{int(seconds):02} | Time taken: {end_time - start_time:.6f} seconds" + print() + print_centered( + f"Current Time: {current_time} | App Uptime: {int(hours):02}:{int(minutes):02}:{int(seconds):02} | Time taken: {end_time - start_time:.6f} seconds" ) # clear map and cash for next loop From e3a118a3b774798cab034fa29e6eec1223113199 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 6 Sep 2023 08:07:40 -0700 Subject: [PATCH 285/448] Added bulk agg download and reader scripts (#511) --- examples/rest/bulk_aggs_downloader.py | 97 +++++++++++++++++++++++++++ examples/rest/bulk_aggs_reader.py | 57 ++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 examples/rest/bulk_aggs_downloader.py create mode 100644 examples/rest/bulk_aggs_reader.py diff --git a/examples/rest/bulk_aggs_downloader.py b/examples/rest/bulk_aggs_downloader.py new file mode 100644 index 00000000..c5c6099e --- /dev/null +++ b/examples/rest/bulk_aggs_downloader.py @@ -0,0 +1,97 @@ +import datetime +import concurrent.futures +import logging +from polygon import RESTClient +import signal +import sys +import pickle +import lz4.frame # type: ignore + +""" +This script performs the following tasks: + +1. Downloads aggregated market data (referred to as 'aggs') for specific stock symbols using the Polygon API. +2. Handles data for multiple dates and performs these operations in parallel to improve efficiency. +3. Saves the downloaded data in a compressed format (LZ4) using Python's pickle serialization. +4. Utilizes logging to track its progress and any potential errors. +5. Designed to be interruptible: listens for a Ctrl+C keyboard interrupt and exits gracefully when detected. + +Usage: +1. pip install lz4 +2. Set your Polygon API key in the environment variable 'POLYGON_API_KEY'. +3. Specify the date range and stock symbols you are interested in within the script. +4. Run the script. + +The script will create compressed '.pickle.lz4' files containing the aggs for each specified stock symbol and date. + +Note: This script is designed to be compatible with a data reader script, such as 'bulk_aggs_reader.py'. +""" + +# Set up logging +logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(message)s") + + +def signal_handler(sig, frame): + print("You pressed Ctrl+C!") + sys.exit(0) + + +signal.signal(signal.SIGINT, signal_handler) + + +def get_aggs_for_symbol_and_date(symbol_date_pair): + """Retrieve aggs for a given symbol and date""" + symbol, date = symbol_date_pair + aggs = [] + client = RESTClient(trace=True) # Uses POLYGON_API_KEY environment variable + + for a in client.list_aggs( + symbol, + 1, + "minute", + date, + date, + limit=50000, + ): + aggs.append(a) + + print(len(aggs)) + + filename = f"{symbol}-aggs-{date}.pickle.lz4" + with open(filename, "wb") as file: + try: + compressed_data = lz4.frame.compress(pickle.dumps(aggs)) + file.write(compressed_data) + except TypeError as e: + print(f"Serialization Error: {e}") + + logging.info(f"Downloaded aggs for {date} and saved to {filename}") + + +def weekdays_between(start_date, end_date): + """Generate all weekdays between start_date and end_date""" + day = start_date + while day <= end_date: + if day.weekday() < 5: # 0-4 denotes Monday to Friday + yield day + day += datetime.timedelta(days=1) + + +def main(): + start_date = datetime.date(2023, 8, 1) + end_date = datetime.date(2023, 8, 31) + + symbols = ["TSLA", "AAPL", "HCP", "GOOG"] # The array of symbols you want + + dates = list(weekdays_between(start_date, end_date)) + + # Generate a list of (symbol, date) pairs + symbol_date_pairs = [(symbol, date) for symbol in symbols for date in dates] + + # Use ThreadPoolExecutor to download data in parallel + with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor: + executor.map(get_aggs_for_symbol_and_date, symbol_date_pairs) + + +if __name__ == "__main__": + main() diff --git a/examples/rest/bulk_aggs_reader.py b/examples/rest/bulk_aggs_reader.py new file mode 100644 index 00000000..fcc91915 --- /dev/null +++ b/examples/rest/bulk_aggs_reader.py @@ -0,0 +1,57 @@ +import lz4.frame # type: ignore +import pickle +import datetime + +""" +This script performs the following tasks: + +1. Reads aggregated market data ('aggs') for a specific stock symbol for multiple dates. +2. Data is read from compressed (LZ4) and pickled files, which should have been generated by a separate data downloading script. +3. Displays the read data to the console. +4. Handles exceptions gracefully: informs the user if a file for a specific date was not found or if any other error occurred. + +Usage: +1. pip install lz4 +2. Ensure that the compressed '.pickle.lz4' files for the specified stock symbol and date range exist in the same directory as this script. +3. Modify the date range and stock symbol in the script as per your requirements. +4. Run the script. + +The script will read and display the market data for each specified date and stock symbol. + +Note: This script is designed to be compatible with files generated by a data downloading script, such as 'bulk_aggs_downloader.py'. +""" + + +def read_trades_for_date(symbol, date): + """Reads trades for a given symbol and date, then prints them.""" + + # Construct the filename, similar to your writer script + filename = f"{symbol}-aggs-{date}.pickle.lz4" + + try: + with open(filename, "rb") as file: + compressed_data = file.read() + trades = pickle.loads(lz4.frame.decompress(compressed_data)) + print(trades) + return trades + except FileNotFoundError: + print(f"No file found for {date}") + except Exception as e: + print(f"An error occurred: {e}") + + +def main(): + start_date = datetime.date(2023, 8, 1) + end_date = datetime.date(2023, 8, 31) + symbol = "HCP" + + # Loop through each weekday between the start and end dates and read the trades + day = start_date + while day <= end_date: + if day.weekday() < 5: # 0-4 denotes Monday to Friday + read_trades_for_date(symbol, day) + day += datetime.timedelta(days=1) + + +if __name__ == "__main__": + main() From 021b3e1fa78d7f80e1eedea5724c3eb8460674f6 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 6 Sep 2023 08:12:30 -0700 Subject: [PATCH 286/448] Update README to Include trace mode (#512) --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index afbabe07..ae63afb0 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,34 @@ print(len(options_chain)) Also, please refer to the API documentation to get a full understanding of how the API works and the supported arguments. All required arguments are annotated with red asterisks " * " and argument examples are set. +## Debugging with RESTClient + +Sometimes you may find it useful to see the actual request and response details while working with the API. The `RESTClient` allows for this through its `trace=True` option. + +### How to Enable Debug Mode + +You can activate the debug mode as follows: + +```python +client = RESTClient(trace=True) +``` + +### What Does Debug Mode Do? + +When debug mode is enabled, the client will print out useful debugging information for each API request. This includes: the request URL, the headers sent in the request, and the headers received in the response. + +### Example Output + +For instance, if you made a request for `TSLA` data for the date `2023-08-01`, you would see debug output similar to the following: + +``` +Request URL: https://api.polygon.io/v2/aggs/ticker/TSLA/range/1/minute/2023-08-01/2023-08-01?limit=50000 +Request Headers: {'Authorization': 'Bearer REDACTED', 'Accept-Encoding': 'gzip', 'User-Agent': 'Polygon.io PythonClient/1.12.4'} +Response Headers: {'Server': 'nginx/1.19.2', 'Date': 'Tue, 05 Sep 2023 23:07:02 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Vary': 'Accept-Encoding', 'X-Request-Id': '727c82feed3790b44084c3f4cae1d7d4', 'Strict-Transport-Security': 'max-age=15724800; includeSubDomains'} +``` + +This can be an invaluable tool for debugging issues or understanding how the client interacts with the API. + ## WebSocket Client Import classes From 4950235cfd3cf58e8a8d85c3d5ae1eee70fd3947 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 10:03:22 -0700 Subject: [PATCH 287/448] Bump sphinx-autodoc-typehints from 1.23.0 to 1.24.0 (#513) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.23.0 to 1.24.0. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.23.0...1.24.0) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 18 +++++++++--------- pyproject.toml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2894a3ec..2e220e27 100644 --- a/poetry.lock +++ b/poetry.lock @@ -650,22 +650,22 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.23.0" +version = "1.24.0" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "sphinx_autodoc_typehints-1.23.0-py3-none-any.whl", hash = "sha256:ac099057e66b09e51b698058ba7dd76e57e1fe696cd91b54e121d3dad188f91d"}, - {file = "sphinx_autodoc_typehints-1.23.0.tar.gz", hash = "sha256:5d44e2996633cdada499b6d27a496ddf9dbc95dd1f0f09f7b37940249e61f6e9"}, + {file = "sphinx_autodoc_typehints-1.24.0-py3-none-any.whl", hash = "sha256:6a73c0c61a9144ce2ed5ef2bed99d615254e5005c1cc32002017d72d69fb70e6"}, + {file = "sphinx_autodoc_typehints-1.24.0.tar.gz", hash = "sha256:94e440066941bb237704bb880785e2d05e8ae5406c88674feefbb938ad0dc6af"}, ] [package.dependencies] -sphinx = ">=5.3" +sphinx = ">=7.0.1" [package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23.4)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=7.2.2)", "diff-cover (>=7.5)", "nptyping (>=2.5)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.5)"] -type-comment = ["typed-ast (>=1.5.4)"] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)"] +numpy = ["nptyping (>=2.5)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.6.3)"] [[package]] name = "sphinx-rtd-theme" @@ -968,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "97d97b1f845e08ca8dc3abb5d61363b1e77fb281046578ad5e7eb2a756461a62" +content-hash = "063899f74e6c09cd22bab1b681258c4f19def421b9a74f8ab7fba582bc28c305" diff --git a/pyproject.toml b/pyproject.toml index 294e8fce..bdaa557b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^1.3.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.23.0" +sphinx-autodoc-typehints = "^1.24.0" types-certifi = "^2021.10.8" types-setuptools = "^68.1.0" pook = "^1.1.1" From 3763a2fe540004e9de88eee6cedea1f753c687d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 17:07:49 +0000 Subject: [PATCH 288/448] Bump types-setuptools from 68.1.0.1 to 68.2.0.0 (#514) --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2e220e27..ca9bd4a2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -813,13 +813,13 @@ files = [ [[package]] name = "types-setuptools" -version = "68.1.0.1" +version = "68.2.0.0" description = "Typing stubs for setuptools" optional = false python-versions = "*" files = [ - {file = "types-setuptools-68.1.0.1.tar.gz", hash = "sha256:271ed8da44885cd9a701c86e48cc6d3cc988052260e72b3ce26c26b3028f86ed"}, - {file = "types_setuptools-68.1.0.1-py3-none-any.whl", hash = "sha256:a9a0d2ca1da8a15924890d464adcee4004deb07b6a99bd0b1881eac5c73cb3a7"}, + {file = "types-setuptools-68.2.0.0.tar.gz", hash = "sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"}, + {file = "types_setuptools-68.2.0.0-py3-none-any.whl", hash = "sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b"}, ] [[package]] @@ -968,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "063899f74e6c09cd22bab1b681258c4f19def421b9a74f8ab7fba582bc28c305" +content-hash = "b82f69845631f10c72a2767422a654a2472c24543d14c186c8ef9e743522c000" diff --git a/pyproject.toml b/pyproject.toml index bdaa557b..95991b2a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.3.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.24.0" types-certifi = "^2021.10.8" -types-setuptools = "^68.1.0" +types-setuptools = "^68.2.0" pook = "^1.1.1" orjson = "^3.9.5" From 9fa5c984aa7a0ae41b8d01126adafa62af80c71a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 10:22:49 -0700 Subject: [PATCH 289/448] Bump orjson from 3.9.5 to 3.9.7 (#515) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.5 to 3.9.7. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.5...3.9.7) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 124 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/poetry.lock b/poetry.lock index ca9bd4a2..a161e215 100644 --- a/poetry.lock +++ b/poetry.lock @@ -383,71 +383,71 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.5" +version = "3.9.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.7" files = [ - {file = "orjson-3.9.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ad6845912a71adcc65df7c8a7f2155eba2096cf03ad2c061c93857de70d699ad"}, - {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e298e0aacfcc14ef4476c3f409e85475031de24e5b23605a465e9bf4b2156273"}, - {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:83c9939073281ef7dd7c5ca7f54cceccb840b440cec4b8a326bda507ff88a0a6"}, - {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e174cc579904a48ee1ea3acb7045e8a6c5d52c17688dfcb00e0e842ec378cabf"}, - {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d51702f42c785b115401e1d64a27a2ea767ae7cf1fb8edaa09c7cf1571c660"}, - {file = "orjson-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f13d61c0c7414ddee1ef4d0f303e2222f8cced5a2e26d9774751aecd72324c9e"}, - {file = "orjson-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d748cc48caf5a91c883d306ab648df1b29e16b488c9316852844dd0fd000d1c2"}, - {file = "orjson-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bd19bc08fa023e4c2cbf8294ad3f2b8922f4de9ba088dbc71e6b268fdf54591c"}, - {file = "orjson-3.9.5-cp310-none-win32.whl", hash = "sha256:5793a21a21bf34e1767e3d61a778a25feea8476dcc0bdf0ae1bc506dc34561ea"}, - {file = "orjson-3.9.5-cp310-none-win_amd64.whl", hash = "sha256:2bcec0b1024d0031ab3eab7a8cb260c8a4e4a5e35993878a2da639d69cdf6a65"}, - {file = "orjson-3.9.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8547b95ca0e2abd17e1471973e6d676f1d8acedd5f8fb4f739e0612651602d66"}, - {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87ce174d6a38d12b3327f76145acbd26f7bc808b2b458f61e94d83cd0ebb4d76"}, - {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a960bb1bc9a964d16fcc2d4af5a04ce5e4dfddca84e3060c35720d0a062064fe"}, - {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a7aa5573a949760d6161d826d34dc36db6011926f836851fe9ccb55b5a7d8e8"}, - {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b2852afca17d7eea85f8e200d324e38c851c96598ac7b227e4f6c4e59fbd3df"}, - {file = "orjson-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa185959c082475288da90f996a82e05e0c437216b96f2a8111caeb1d54ef926"}, - {file = "orjson-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:89c9332695b838438ea4b9a482bce8ffbfddde4df92750522d928fb00b7b8dce"}, - {file = "orjson-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2493f1351a8f0611bc26e2d3d407efb873032b4f6b8926fed8cfed39210ca4ba"}, - {file = "orjson-3.9.5-cp311-none-win32.whl", hash = "sha256:ffc544e0e24e9ae69301b9a79df87a971fa5d1c20a6b18dca885699709d01be0"}, - {file = "orjson-3.9.5-cp311-none-win_amd64.whl", hash = "sha256:89670fe2732e3c0c54406f77cad1765c4c582f67b915c74fda742286809a0cdc"}, - {file = "orjson-3.9.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:15df211469625fa27eced4aa08dc03e35f99c57d45a33855cc35f218ea4071b8"}, - {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9f17c59fe6c02bc5f89ad29edb0253d3059fe8ba64806d789af89a45c35269a"}, - {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca6b96659c7690773d8cebb6115c631f4a259a611788463e9c41e74fa53bf33f"}, - {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a26fafe966e9195b149950334bdbe9026eca17fe8ffe2d8fa87fdc30ca925d30"}, - {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9006b1eb645ecf460da067e2dd17768ccbb8f39b01815a571bfcfab7e8da5e52"}, - {file = "orjson-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebfdbf695734b1785e792a1315e41835ddf2a3e907ca0e1c87a53f23006ce01d"}, - {file = "orjson-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4a3943234342ab37d9ed78fb0a8f81cd4b9532f67bf2ac0d3aa45fa3f0a339f3"}, - {file = "orjson-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e6762755470b5c82f07b96b934af32e4d77395a11768b964aaa5eb092817bc31"}, - {file = "orjson-3.9.5-cp312-none-win_amd64.whl", hash = "sha256:c74df28749c076fd6e2157190df23d43d42b2c83e09d79b51694ee7315374ad5"}, - {file = "orjson-3.9.5-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:88e18a74d916b74f00d0978d84e365c6bf0e7ab846792efa15756b5fb2f7d49d"}, - {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d28514b5b6dfaf69097be70d0cf4f1407ec29d0f93e0b4131bf9cc8fd3f3e374"}, - {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25b81aca8c7be61e2566246b6a0ca49f8aece70dd3f38c7f5c837f398c4cb142"}, - {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:385c1c713b1e47fd92e96cf55fd88650ac6dfa0b997e8aa7ecffd8b5865078b1"}, - {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9850c03a8e42fba1a508466e6a0f99472fd2b4a5f30235ea49b2a1b32c04c11"}, - {file = "orjson-3.9.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4449f84bbb13bcef493d8aa669feadfced0f7c5eea2d0d88b5cc21f812183af8"}, - {file = "orjson-3.9.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:86127bf194f3b873135e44ce5dc9212cb152b7e06798d5667a898a00f0519be4"}, - {file = "orjson-3.9.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0abcd039f05ae9ab5b0ff11624d0b9e54376253b7d3217a358d09c3edf1d36f7"}, - {file = "orjson-3.9.5-cp37-none-win32.whl", hash = "sha256:10cc8ad5ff7188efcb4bec196009d61ce525a4e09488e6d5db41218c7fe4f001"}, - {file = "orjson-3.9.5-cp37-none-win_amd64.whl", hash = "sha256:ff27e98532cb87379d1a585837d59b187907228268e7b0a87abe122b2be6968e"}, - {file = "orjson-3.9.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5bfa79916ef5fef75ad1f377e54a167f0de334c1fa4ebb8d0224075f3ec3d8c0"}, - {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87dfa6ac0dae764371ab19b35eaaa46dfcb6ef2545dfca03064f21f5d08239f"}, - {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50ced24a7b23058b469ecdb96e36607fc611cbaee38b58e62a55c80d1b3ad4e1"}, - {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1b74ea2a3064e1375da87788897935832e806cc784de3e789fd3c4ab8eb3fa5"}, - {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7cb961efe013606913d05609f014ad43edfaced82a576e8b520a5574ce3b2b9"}, - {file = "orjson-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1225d2d5ee76a786bda02f8c5e15017462f8432bb960de13d7c2619dba6f0275"}, - {file = "orjson-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f39f4b99199df05c7ecdd006086259ed25886cdbd7b14c8cdb10c7675cfcca7d"}, - {file = "orjson-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a461dc9fb60cac44f2d3218c36a0c1c01132314839a0e229d7fb1bba69b810d8"}, - {file = "orjson-3.9.5-cp38-none-win32.whl", hash = "sha256:dedf1a6173748202df223aea29de814b5836732a176b33501375c66f6ab7d822"}, - {file = "orjson-3.9.5-cp38-none-win_amd64.whl", hash = "sha256:fa504082f53efcbacb9087cc8676c163237beb6e999d43e72acb4bb6f0db11e6"}, - {file = "orjson-3.9.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6900f0248edc1bec2a2a3095a78a7e3ef4e63f60f8ddc583687eed162eedfd69"}, - {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17404333c40047888ac40bd8c4d49752a787e0a946e728a4e5723f111b6e55a5"}, - {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0eefb7cfdd9c2bc65f19f974a5d1dfecbac711dae91ed635820c6b12da7a3c11"}, - {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68c78b2a3718892dc018adbc62e8bab6ef3c0d811816d21e6973dee0ca30c152"}, - {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:591ad7d9e4a9f9b104486ad5d88658c79ba29b66c5557ef9edf8ca877a3f8d11"}, - {file = "orjson-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cc2cbf302fbb2d0b2c3c142a663d028873232a434d89ce1b2604ebe5cc93ce8"}, - {file = "orjson-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b26b5aa5e9ee1bad2795b925b3adb1b1b34122cb977f30d89e0a1b3f24d18450"}, - {file = "orjson-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef84724f7d29dcfe3aafb1fc5fc7788dca63e8ae626bb9298022866146091a3e"}, - {file = "orjson-3.9.5-cp39-none-win32.whl", hash = "sha256:664cff27f85939059472afd39acff152fbac9a091b7137092cb651cf5f7747b5"}, - {file = "orjson-3.9.5-cp39-none-win_amd64.whl", hash = "sha256:91dda66755795ac6100e303e206b636568d42ac83c156547634256a2e68de694"}, - {file = "orjson-3.9.5.tar.gz", hash = "sha256:6daf5ee0b3cf530b9978cdbf71024f1c16ed4a67d05f6ec435c6e7fe7a52724c"}, + {file = "orjson-3.9.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6df858e37c321cefbf27fe7ece30a950bcc3a75618a804a0dcef7ed9dd9c92d"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5198633137780d78b86bb54dafaaa9baea698b4f059456cd4554ab7009619221"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e736815b30f7e3c9044ec06a98ee59e217a833227e10eb157f44071faddd7c5"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a19e4074bc98793458b4b3ba35a9a1d132179345e60e152a1bb48c538ab863c4"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80acafe396ab689a326ab0d80f8cc61dec0dd2c5dca5b4b3825e7b1e0132c101"}, + {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:355efdbbf0cecc3bd9b12589b8f8e9f03c813a115efa53f8dc2a523bfdb01334"}, + {file = "orjson-3.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3aab72d2cef7f1dd6104c89b0b4d6b416b0db5ca87cc2fac5f79c5601f549cc2"}, + {file = "orjson-3.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36b1df2e4095368ee388190687cb1b8557c67bc38400a942a1a77713580b50ae"}, + {file = "orjson-3.9.7-cp310-none-win32.whl", hash = "sha256:e94b7b31aa0d65f5b7c72dd8f8227dbd3e30354b99e7a9af096d967a77f2a580"}, + {file = "orjson-3.9.7-cp310-none-win_amd64.whl", hash = "sha256:82720ab0cf5bb436bbd97a319ac529aee06077ff7e61cab57cee04a596c4f9b4"}, + {file = "orjson-3.9.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1f8b47650f90e298b78ecf4df003f66f54acdba6a0f763cc4df1eab048fe3738"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f738fee63eb263530efd4d2e9c76316c1f47b3bbf38c1bf45ae9625feed0395e"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38e34c3a21ed41a7dbd5349e24c3725be5416641fdeedf8f56fcbab6d981c900"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21a3344163be3b2c7e22cef14fa5abe957a892b2ea0525ee86ad8186921b6cf0"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23be6b22aab83f440b62a6f5975bcabeecb672bc627face6a83bc7aeb495dc7e"}, + {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5205ec0dfab1887dd383597012199f5175035e782cdb013c542187d280ca443"}, + {file = "orjson-3.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8769806ea0b45d7bf75cad253fba9ac6700b7050ebb19337ff6b4e9060f963fa"}, + {file = "orjson-3.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f9e01239abea2f52a429fe9d95c96df95f078f0172489d691b4a848ace54a476"}, + {file = "orjson-3.9.7-cp311-none-win32.whl", hash = "sha256:8bdb6c911dae5fbf110fe4f5cba578437526334df381b3554b6ab7f626e5eeca"}, + {file = "orjson-3.9.7-cp311-none-win_amd64.whl", hash = "sha256:9d62c583b5110e6a5cf5169ab616aa4ec71f2c0c30f833306f9e378cf51b6c86"}, + {file = "orjson-3.9.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1c3cee5c23979deb8d1b82dc4cc49be59cccc0547999dbe9adb434bb7af11cf7"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a347d7b43cb609e780ff8d7b3107d4bcb5b6fd09c2702aa7bdf52f15ed09fa09"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:154fd67216c2ca38a2edb4089584504fbb6c0694b518b9020ad35ecc97252bb9"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ea3e63e61b4b0beeb08508458bdff2daca7a321468d3c4b320a758a2f554d31"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb0b0b2476f357eb2975ff040ef23978137aa674cd86204cfd15d2d17318588"}, + {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b9a20a03576c6b7022926f614ac5a6b0914486825eac89196adf3267c6489d"}, + {file = "orjson-3.9.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:915e22c93e7b7b636240c5a79da5f6e4e84988d699656c8e27f2ac4c95b8dcc0"}, + {file = "orjson-3.9.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f26fb3e8e3e2ee405c947ff44a3e384e8fa1843bc35830fe6f3d9a95a1147b6e"}, + {file = "orjson-3.9.7-cp312-none-win_amd64.whl", hash = "sha256:d8692948cada6ee21f33db5e23460f71c8010d6dfcfe293c9b96737600a7df78"}, + {file = "orjson-3.9.7-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7bab596678d29ad969a524823c4e828929a90c09e91cc438e0ad79b37ce41166"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63ef3d371ea0b7239ace284cab9cd00d9c92b73119a7c274b437adb09bda35e6"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f8fcf696bbbc584c0c7ed4adb92fd2ad7d153a50258842787bc1524e50d7081"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90fe73a1f0321265126cbba13677dcceb367d926c7a65807bd80916af4c17047"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45a47f41b6c3beeb31ac5cf0ff7524987cfcce0a10c43156eb3ee8d92d92bf22"}, + {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a2937f528c84e64be20cb80e70cea76a6dfb74b628a04dab130679d4454395c"}, + {file = "orjson-3.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b4fb306c96e04c5863d52ba8d65137917a3d999059c11e659eba7b75a69167bd"}, + {file = "orjson-3.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:410aa9d34ad1089898f3db461b7b744d0efcf9252a9415bbdf23540d4f67589f"}, + {file = "orjson-3.9.7-cp37-none-win32.whl", hash = "sha256:26ffb398de58247ff7bde895fe30817a036f967b0ad0e1cf2b54bda5f8dcfdd9"}, + {file = "orjson-3.9.7-cp37-none-win_amd64.whl", hash = "sha256:bcb9a60ed2101af2af450318cd89c6b8313e9f8df4e8fb12b657b2e97227cf08"}, + {file = "orjson-3.9.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5da9032dac184b2ae2da4bce423edff7db34bfd936ebd7d4207ea45840f03905"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7951af8f2998045c656ba8062e8edf5e83fd82b912534ab1de1345de08a41d2b"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8e59650292aa3a8ea78073fc84184538783966528e442a1b9ed653aa282edcf"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9274ba499e7dfb8a651ee876d80386b481336d3868cba29af839370514e4dce0"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca1706e8b8b565e934c142db6a9592e6401dc430e4b067a97781a997070c5378"}, + {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cc275cf6dcb1a248e1876cdefd3f9b5f01063854acdfd687ec360cd3c9712a"}, + {file = "orjson-3.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:11c10f31f2c2056585f89d8229a56013bc2fe5de51e095ebc71868d070a8dd81"}, + {file = "orjson-3.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cf334ce1d2fadd1bf3e5e9bf15e58e0c42b26eb6590875ce65bd877d917a58aa"}, + {file = "orjson-3.9.7-cp38-none-win32.whl", hash = "sha256:76a0fc023910d8a8ab64daed8d31d608446d2d77c6474b616b34537aa7b79c7f"}, + {file = "orjson-3.9.7-cp38-none-win_amd64.whl", hash = "sha256:7a34a199d89d82d1897fd4a47820eb50947eec9cda5fd73f4578ff692a912f89"}, + {file = "orjson-3.9.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e7e7f44e091b93eb39db88bb0cb765db09b7a7f64aea2f35e7d86cbf47046c65"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d647b2a9c45a23a84c3e70e19d120011cba5f56131d185c1b78685457320bb"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0eb850a87e900a9c484150c414e21af53a6125a13f6e378cf4cc11ae86c8f9c5"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f4b0042d8388ac85b8330b65406c84c3229420a05068445c13ca28cc222f1f7"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd3e7aae977c723cc1dbb82f97babdb5e5fbce109630fbabb2ea5053523c89d3"}, + {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c616b796358a70b1f675a24628e4823b67d9e376df2703e893da58247458956"}, + {file = "orjson-3.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3ba725cf5cf87d2d2d988d39c6a2a8b6fc983d78ff71bc728b0be54c869c884"}, + {file = "orjson-3.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4891d4c934f88b6c29b56395dfc7014ebf7e10b9e22ffd9877784e16c6b2064f"}, + {file = "orjson-3.9.7-cp39-none-win32.whl", hash = "sha256:14d3fb6cd1040a4a4a530b28e8085131ed94ebc90d72793c59a713de34b60838"}, + {file = "orjson-3.9.7-cp39-none-win_amd64.whl", hash = "sha256:9ef82157bbcecd75d6296d5d8b2d792242afcd064eb1ac573f8847b52e58f677"}, + {file = "orjson-3.9.7.tar.gz", hash = "sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142"}, ] [[package]] @@ -968,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "b82f69845631f10c72a2767422a654a2472c24543d14c186c8ef9e743522c000" +content-hash = "267aae48db2997a3633b770a50444d50df7f1dd5134a999fa0b307f7b4f1b0b8" diff --git a/pyproject.toml b/pyproject.toml index 95991b2a..31ba71a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.24.0" types-certifi = "^2021.10.8" types-setuptools = "^68.2.0" pook = "^1.1.1" -orjson = "^3.9.5" +orjson = "^3.9.7" [build-system] requires = ["poetry-core>=1.0.0"] From 3af9b9850bd805bdfab6be53d21912ae8414d37f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 19:50:31 +0000 Subject: [PATCH 290/448] Bump black from 23.7.0 to 23.9.1 (#516) --- poetry.lock | 48 ++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index a161e215..edf1da02 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,33 +44,33 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "23.7.0" +version = "23.9.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, - {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, - {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, - {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, - {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, - {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, - {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, - {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, - {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, - {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, - {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, - {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, - {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, - {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, - {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, + {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, + {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, + {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, + {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, + {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, + {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, + {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, + {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, + {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, + {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, + {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, + {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, + {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, + {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, ] [package.dependencies] @@ -80,7 +80,7 @@ packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] diff --git a/pyproject.toml b/pyproject.toml index 31ba71a2..559d2d16 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<12.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] -black = "^23.7.0" +black = "^23.9.1" mypy = "^1.5" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From e437b847740248d5b0310d8160aaeabf0f593f12 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Sat, 23 Sep 2023 11:06:18 -0700 Subject: [PATCH 291/448] Update WS value data label (#521) --- .polygon/websocket.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index ed77968a..267b522d 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -1098,8 +1098,8 @@ } }, "x-polygon-entitlement-data-type": { - "name": "value", - "description": "Value data" + "name": "indicative-price", + "description": "Indicative Price" }, "x-polygon-entitlement-market-type": { "name": "stocks", @@ -1791,8 +1791,8 @@ } }, "x-polygon-entitlement-data-type": { - "name": "value", - "description": "Value data" + "name": "indicative-price", + "description": "Indicative Price" }, "x-polygon-entitlement-market-type": { "name": "options", @@ -2188,8 +2188,8 @@ } }, "x-polygon-entitlement-data-type": { - "name": "value", - "description": "Value data" + "name": "indicative-price", + "description": "Indicative Price" }, "x-polygon-entitlement-market-type": { "name": "fx", @@ -2829,8 +2829,8 @@ } }, "x-polygon-entitlement-data-type": { - "name": "value", - "description": "Value data" + "name": "indicative-price", + "description": "Indicative Price" }, "x-polygon-entitlement-market-type": { "name": "crypto", From e16370e9bf0f3b6cc7f77f4e4decbf4fdbf7a5e2 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Sat, 23 Sep 2023 11:11:17 -0700 Subject: [PATCH 292/448] Swap signal/histogram to align correctly (#520) --- polygon/rest/models/indicators.py | 4 ++-- test_rest/test_indicators.py | 32 +++++++++++++++---------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/polygon/rest/models/indicators.py b/polygon/rest/models/indicators.py index 81252477..aedada5a 100644 --- a/polygon/rest/models/indicators.py +++ b/polygon/rest/models/indicators.py @@ -31,8 +31,8 @@ def from_dict(d): return MACDIndicatorValue( timestamp=d.get("timestamp", None), value=d.get("value", None), - signal=d.get("histogram", None), - histogram=d.get("signal", None), + signal=d.get("signal", None), + histogram=d.get("histogram", None), ) diff --git a/test_rest/test_indicators.py b/test_rest/test_indicators.py index ce477fbf..bad16025 100644 --- a/test_rest/test_indicators.py +++ b/test_rest/test_indicators.py @@ -94,50 +94,50 @@ def test_get_macd_indicators(self): MACDIndicatorValue( timestamp=1660881600000, value=6.912856964275647, - signal=-42.59162765160919, - histogram=49.504484615884834, + signal=49.504484615884834, + histogram=-42.59162765160919, ), MACDIndicatorValue( timestamp=1660795200000, value=7.509881940545313, - signal=-51.45940882014157, - histogram=58.96929076068688, + signal=58.96929076068688, + histogram=-51.45940882014157, ), MACDIndicatorValue( timestamp=1660708800000, value=7.734132135566654, - signal=-62.67058280737392, - histogram=70.40471494294057, + signal=70.40471494294057, + histogram=-62.67058280737392, ), MACDIndicatorValue( timestamp=1660622400000, value=7.973958808765531, - signal=-76.35755231359147, - histogram=84.331511122357, + signal=84.331511122357, + histogram=-76.35755231359147, ), MACDIndicatorValue( timestamp=1660536000000, value=7.90112075397235, - signal=-93.39873532696055, - histogram=101.2998560809329, + signal=101.2998560809329, + histogram=-93.39873532696055, ), MACDIndicatorValue( timestamp=1660276800000, value=7.719066821080332, - signal=-114.33606377695492, - histogram=122.05513059803525, + signal=122.05513059803525, + histogram=-114.33606377695492, ), MACDIndicatorValue( timestamp=1660190400000, value=7.468267821253335, - signal=-139.99487694943858, - histogram=147.4631447706919, + signal=147.4631447706919, + histogram=-139.99487694943858, ), MACDIndicatorValue( timestamp=1660104000000, value=7.542041992364375, - signal=-171.03107543375833, - histogram=178.5731174261227, + signal=178.5731174261227, + histogram=-171.03107543375833, ), ], underlying=IndicatorUnderlying( From 9b4ecb00198aa210eeed5435c957e418c1359451 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 27 Sep 2023 08:42:59 -0700 Subject: [PATCH 293/448] Added last_updated to get_summaries (#526) --- polygon/rest/models/summaries.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/polygon/rest/models/summaries.py b/polygon/rest/models/summaries.py index 549c6fe0..21e6f395 100644 --- a/polygon/rest/models/summaries.py +++ b/polygon/rest/models/summaries.py @@ -48,6 +48,7 @@ class SummaryResult: ticker: Optional[str] = None branding: Optional[Branding] = None market_status: Optional[str] = None + last_updated: Optional[int] = None type: Optional[str] = None session: Optional[Session] = None options: Optional[Options] = None @@ -62,6 +63,7 @@ def from_dict(d): ticker=d.get("ticker", None), branding=None if "branding" not in d else Branding.from_dict(d["branding"]), market_status=d.get("market_status", None), + last_updated=d.get("last_updated", None), type=d.get("type", None), session=None if "session" not in d else Session.from_dict(d["session"]), options=None if "options" not in d else Options.from_dict(d["options"]), From 26048f4b3e52712bebc5368e45a937f442771b23 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 27 Sep 2023 10:53:43 -0700 Subject: [PATCH 294/448] Update http status codes to retry request on (#527) * Update http status codes to retry request on * Fix lint check --- polygon/rest/base.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index a166e5f2..34fd8121 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -2,6 +2,7 @@ import json import urllib3 import inspect +from urllib3.util.retry import Retry from enum import Enum from typing import Optional, Any, Dict from datetime import datetime @@ -47,6 +48,16 @@ def __init__( "User-Agent": f"Polygon.io PythonClient/{version}", } + # initialize self.retries with the parameter value before using it + self.retries = retries + + # https://urllib3.readthedocs.io/en/stable/reference/urllib3.util.html#urllib3.util.Retry.RETRY_AFTER_STATUS_CODES + retry_strategy = Retry( + total=self.retries, + status_forcelist=[413, 429, 500, 502, 503, 504], # default 413, 429, 503 + backoff_factor=0.1, # [0.0s, 0.2s, 0.4s, 0.8s, 1.6s, ...] + ) + # https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool self.client = urllib3.PoolManager( @@ -54,10 +65,11 @@ def __init__( headers=self.headers, # default headers sent with each request. ca_certs=certifi.where(), cert_reqs="CERT_REQUIRED", + retries=retry_strategy, # use the customized Retry instance ) self.timeout = urllib3.Timeout(connect=connect_timeout, read=read_timeout) - self.retries = retries + if verbose: logger.setLevel(logging.DEBUG) self.trace = trace From 14a866f4f5743850747b78108e8178b0e202b0ec Mon Sep 17 00:00:00 2001 From: Kartik Subbarao Date: Thu, 28 Sep 2023 22:48:56 -0400 Subject: [PATCH 295/448] Update base.py (#529) clean up old code that prevented https://github.com/polygon-io/client-python/issues/525 from working, fixes https://github.com/polygon-io/client-python/issues/528 --- polygon/rest/base.py | 1 - 1 file changed, 1 deletion(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 34fd8121..0f82191c 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -110,7 +110,6 @@ def _get( "GET", self.BASE + path, fields=params, - retries=self.retries, headers=headers, ) From d5fb47305b142f4379445d669bfb1b6333667ea1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 07:53:04 -0700 Subject: [PATCH 296/448] Bump urllib3 from 1.26.13 to 1.26.17 (#530) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.13 to 1.26.17. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.13...1.26.17) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index edf1da02..4f471616 100644 --- a/poetry.lock +++ b/poetry.lock @@ -846,17 +846,17 @@ files = [ [[package]] name = "urllib3" -version = "1.26.13" +version = "1.26.17" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"}, - {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"}, + {file = "urllib3-1.26.17-py2.py3-none-any.whl", hash = "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b"}, + {file = "urllib3-1.26.17.tar.gz", hash = "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] @@ -968,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "267aae48db2997a3633b770a50444d50df7f1dd5134a999fa0b307f7b4f1b0b8" +content-hash = "5affead8473c6de1910d798fa992a9f527c6f53d61d408489e51389c1e216bda" From 3dadb985e305e574c7e792139486578a0a3de87c Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Fri, 6 Oct 2023 12:41:30 -0700 Subject: [PATCH 297/448] Added treemap example (#531) * Added treemap example * Update readme.md * Update readme --- .../tools/treemap/market-wide-treemap.png | Bin 0 -> 114279 bytes .../treemap/polygon_sic_code_data_gatherer.py | 130 ++++++++ examples/tools/treemap/readme.md | 60 ++++ examples/tools/treemap/sic_code_groups.json | 1 + examples/tools/treemap/treemap_server.py | 280 ++++++++++++++++++ 5 files changed, 471 insertions(+) create mode 100644 examples/tools/treemap/market-wide-treemap.png create mode 100644 examples/tools/treemap/polygon_sic_code_data_gatherer.py create mode 100644 examples/tools/treemap/readme.md create mode 100644 examples/tools/treemap/sic_code_groups.json create mode 100644 examples/tools/treemap/treemap_server.py diff --git a/examples/tools/treemap/market-wide-treemap.png b/examples/tools/treemap/market-wide-treemap.png new file mode 100644 index 0000000000000000000000000000000000000000..3e072d92fa37dbf1a3dbb8fa5a2fc338dbbef17c GIT binary patch literal 114279 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 + + + + Polygon.io Snapshot + D3.js Treemap + + + + +

+ + + +""" + + +class handler(http.server.SimpleHTTPRequestHandler): + def generate_data(self): + client = ( + RESTClient() + ) # Assuming you have POLYGON_API_KEY environment variable set up + snapshots = client.get_snapshot_all("stocks") + pct_changes = { + snapshot.ticker: round(snapshot.todays_change_percent, 2) + for snapshot in snapshots + } + + with open("sic_code_groups.json", "r") as file: + sic_code_groups = json.load(file) + + data = defaultdict(lambda: defaultdict(list)) + + for sic_code, group_data in sic_code_groups.items(): + parent = group_data["sic_description"] + for company in group_data["companies"]: + ticker = company["ticker"] + weight = company["weight"] + pct_change = pct_changes.get(ticker, 0.0) + data[parent][ticker].append( + {"name": ticker, "weight": weight, "change": pct_change} + ) + + data = dict(data) + output = {"name": "root", "children": []} + for parent, children in data.items(): + parent_dict = {"name": parent, "children": []} + for child, companies in children.items(): + total_change = sum(company["change"] for company in companies) + avg_change = total_change / len(companies) if companies else 0 + avg_change = round(avg_change, 2) + child_dict = { + "name": child, + "change": avg_change, + "children": companies, + } + parent_dict["children"].append(child_dict) + output["children"].append(parent_dict) + + return json.dumps(output) + + def do_GET(self): + if self.path == "/data": + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + json_data = self.generate_data() + self.wfile.write(json_data.encode()) + else: + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + self.wfile.write(html.encode()) + + +try: + with socketserver.TCPServer(("", PORT), handler) as httpd: + print("serving at port", PORT) + httpd.serve_forever() +except KeyboardInterrupt: + print("\nExiting gracefully...") From 146f627391950d0c20fb3b91e7fecee03223c49a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 09:37:17 -0700 Subject: [PATCH 298/448] Bump mypy from 1.5.1 to 1.6.0 (#536) Bumps [mypy](https://github.com/python/mypy) from 1.5.1 to 1.6.0. - [Commits](https://github.com/python/mypy/compare/v1.5.1...v1.6.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 58 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4f471616..ed3141f1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.5.1" +version = "1.6.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, + {file = "mypy-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:091f53ff88cb093dcc33c29eee522c087a438df65eb92acd371161c1f4380ff0"}, + {file = "mypy-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb7ff4007865833c470a601498ba30462b7374342580e2346bf7884557e40531"}, + {file = "mypy-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49499cf1e464f533fc45be54d20a6351a312f96ae7892d8e9f1708140e27ce41"}, + {file = "mypy-1.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c192445899c69f07874dabda7e931b0cc811ea055bf82c1ababf358b9b2a72c"}, + {file = "mypy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:3df87094028e52766b0a59a3e46481bb98b27986ed6ded6a6cc35ecc75bb9182"}, + {file = "mypy-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c8835a07b8442da900db47ccfda76c92c69c3a575872a5b764332c4bacb5a0a"}, + {file = "mypy-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:24f3de8b9e7021cd794ad9dfbf2e9fe3f069ff5e28cb57af6f873ffec1cb0425"}, + {file = "mypy-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:856bad61ebc7d21dbc019b719e98303dc6256cec6dcc9ebb0b214b81d6901bd8"}, + {file = "mypy-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89513ddfda06b5c8ebd64f026d20a61ef264e89125dc82633f3c34eeb50e7d60"}, + {file = "mypy-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f8464ed410ada641c29f5de3e6716cbdd4f460b31cf755b2af52f2d5ea79ead"}, + {file = "mypy-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:971104bcb180e4fed0d7bd85504c9036346ab44b7416c75dd93b5c8c6bb7e28f"}, + {file = "mypy-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab98b8f6fdf669711f3abe83a745f67f50e3cbaea3998b90e8608d2b459fd566"}, + {file = "mypy-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a69db3018b87b3e6e9dd28970f983ea6c933800c9edf8c503c3135b3274d5ad"}, + {file = "mypy-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dccd850a2e3863891871c9e16c54c742dba5470f5120ffed8152956e9e0a5e13"}, + {file = "mypy-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8598307150b5722854f035d2e70a1ad9cc3c72d392c34fffd8c66d888c90f17"}, + {file = "mypy-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fea451a3125bf0bfe716e5d7ad4b92033c471e4b5b3e154c67525539d14dc15a"}, + {file = "mypy-1.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e28d7b221898c401494f3b77db3bac78a03ad0a0fff29a950317d87885c655d2"}, + {file = "mypy-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4b7a99275a61aa22256bab5839c35fe8a6887781862471df82afb4b445daae6"}, + {file = "mypy-1.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7469545380dddce5719e3656b80bdfbb217cfe8dbb1438532d6abc754b828fed"}, + {file = "mypy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:7807a2a61e636af9ca247ba8494031fb060a0a744b9fee7de3a54bed8a753323"}, + {file = "mypy-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2dad072e01764823d4b2f06bc7365bb1d4b6c2f38c4d42fade3c8d45b0b4b67"}, + {file = "mypy-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b19006055dde8a5425baa5f3b57a19fa79df621606540493e5e893500148c72f"}, + {file = "mypy-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31eba8a7a71f0071f55227a8057468b8d2eb5bf578c8502c7f01abaec8141b2f"}, + {file = "mypy-1.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e0db37ac4ebb2fee7702767dfc1b773c7365731c22787cb99f507285014fcaf"}, + {file = "mypy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:c69051274762cccd13498b568ed2430f8d22baa4b179911ad0c1577d336ed849"}, + {file = "mypy-1.6.0-py3-none-any.whl", hash = "sha256:9e1589ca150a51d9d00bb839bfeca2f7a04f32cd62fad87a847bc0818e15d7dc"}, + {file = "mypy-1.6.0.tar.gz", hash = "sha256:4f3d27537abde1be6d5f2c96c29a454da333a2a271ae7d5bc7110e6d4b7beb3f"}, ] [package.dependencies] @@ -968,4 +968,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "5affead8473c6de1910d798fa992a9f527c6f53d61d408489e51389c1e216bda" +content-hash = "14a20878568e440ec8901c2ff58194b9add2b96ed212ebce832d56ac464e93b8" diff --git a/pyproject.toml b/pyproject.toml index 559d2d16..e9bd7142 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] black = "^23.9.1" -mypy = "^1.5" +mypy = "^1.6" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^1.3.0" From f4dadeb9dad1c4ec0335d1b64f7b83e16228ba2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 09:43:10 -0700 Subject: [PATCH 299/448] Bump orjson from 3.9.7 to 3.9.9 (#537) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.7 to 3.9.9. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.7...3.9.9) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 116 ++++++++++++++++++++++--------------------------- pyproject.toml | 2 +- 2 files changed, 54 insertions(+), 64 deletions(-) diff --git a/poetry.lock b/poetry.lock index ed3141f1..e9d37564 100644 --- a/poetry.lock +++ b/poetry.lock @@ -383,71 +383,61 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.7" +version = "3.9.9" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "orjson-3.9.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6df858e37c321cefbf27fe7ece30a950bcc3a75618a804a0dcef7ed9dd9c92d"}, - {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5198633137780d78b86bb54dafaaa9baea698b4f059456cd4554ab7009619221"}, - {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e736815b30f7e3c9044ec06a98ee59e217a833227e10eb157f44071faddd7c5"}, - {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a19e4074bc98793458b4b3ba35a9a1d132179345e60e152a1bb48c538ab863c4"}, - {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80acafe396ab689a326ab0d80f8cc61dec0dd2c5dca5b4b3825e7b1e0132c101"}, - {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:355efdbbf0cecc3bd9b12589b8f8e9f03c813a115efa53f8dc2a523bfdb01334"}, - {file = "orjson-3.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3aab72d2cef7f1dd6104c89b0b4d6b416b0db5ca87cc2fac5f79c5601f549cc2"}, - {file = "orjson-3.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36b1df2e4095368ee388190687cb1b8557c67bc38400a942a1a77713580b50ae"}, - {file = "orjson-3.9.7-cp310-none-win32.whl", hash = "sha256:e94b7b31aa0d65f5b7c72dd8f8227dbd3e30354b99e7a9af096d967a77f2a580"}, - {file = "orjson-3.9.7-cp310-none-win_amd64.whl", hash = "sha256:82720ab0cf5bb436bbd97a319ac529aee06077ff7e61cab57cee04a596c4f9b4"}, - {file = "orjson-3.9.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1f8b47650f90e298b78ecf4df003f66f54acdba6a0f763cc4df1eab048fe3738"}, - {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f738fee63eb263530efd4d2e9c76316c1f47b3bbf38c1bf45ae9625feed0395e"}, - {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38e34c3a21ed41a7dbd5349e24c3725be5416641fdeedf8f56fcbab6d981c900"}, - {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21a3344163be3b2c7e22cef14fa5abe957a892b2ea0525ee86ad8186921b6cf0"}, - {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23be6b22aab83f440b62a6f5975bcabeecb672bc627face6a83bc7aeb495dc7e"}, - {file = "orjson-3.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5205ec0dfab1887dd383597012199f5175035e782cdb013c542187d280ca443"}, - {file = "orjson-3.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8769806ea0b45d7bf75cad253fba9ac6700b7050ebb19337ff6b4e9060f963fa"}, - {file = "orjson-3.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f9e01239abea2f52a429fe9d95c96df95f078f0172489d691b4a848ace54a476"}, - {file = "orjson-3.9.7-cp311-none-win32.whl", hash = "sha256:8bdb6c911dae5fbf110fe4f5cba578437526334df381b3554b6ab7f626e5eeca"}, - {file = "orjson-3.9.7-cp311-none-win_amd64.whl", hash = "sha256:9d62c583b5110e6a5cf5169ab616aa4ec71f2c0c30f833306f9e378cf51b6c86"}, - {file = "orjson-3.9.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1c3cee5c23979deb8d1b82dc4cc49be59cccc0547999dbe9adb434bb7af11cf7"}, - {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a347d7b43cb609e780ff8d7b3107d4bcb5b6fd09c2702aa7bdf52f15ed09fa09"}, - {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:154fd67216c2ca38a2edb4089584504fbb6c0694b518b9020ad35ecc97252bb9"}, - {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ea3e63e61b4b0beeb08508458bdff2daca7a321468d3c4b320a758a2f554d31"}, - {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb0b0b2476f357eb2975ff040ef23978137aa674cd86204cfd15d2d17318588"}, - {file = "orjson-3.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b9a20a03576c6b7022926f614ac5a6b0914486825eac89196adf3267c6489d"}, - {file = "orjson-3.9.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:915e22c93e7b7b636240c5a79da5f6e4e84988d699656c8e27f2ac4c95b8dcc0"}, - {file = "orjson-3.9.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f26fb3e8e3e2ee405c947ff44a3e384e8fa1843bc35830fe6f3d9a95a1147b6e"}, - {file = "orjson-3.9.7-cp312-none-win_amd64.whl", hash = "sha256:d8692948cada6ee21f33db5e23460f71c8010d6dfcfe293c9b96737600a7df78"}, - {file = "orjson-3.9.7-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7bab596678d29ad969a524823c4e828929a90c09e91cc438e0ad79b37ce41166"}, - {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63ef3d371ea0b7239ace284cab9cd00d9c92b73119a7c274b437adb09bda35e6"}, - {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f8fcf696bbbc584c0c7ed4adb92fd2ad7d153a50258842787bc1524e50d7081"}, - {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90fe73a1f0321265126cbba13677dcceb367d926c7a65807bd80916af4c17047"}, - {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45a47f41b6c3beeb31ac5cf0ff7524987cfcce0a10c43156eb3ee8d92d92bf22"}, - {file = "orjson-3.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a2937f528c84e64be20cb80e70cea76a6dfb74b628a04dab130679d4454395c"}, - {file = "orjson-3.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b4fb306c96e04c5863d52ba8d65137917a3d999059c11e659eba7b75a69167bd"}, - {file = "orjson-3.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:410aa9d34ad1089898f3db461b7b744d0efcf9252a9415bbdf23540d4f67589f"}, - {file = "orjson-3.9.7-cp37-none-win32.whl", hash = "sha256:26ffb398de58247ff7bde895fe30817a036f967b0ad0e1cf2b54bda5f8dcfdd9"}, - {file = "orjson-3.9.7-cp37-none-win_amd64.whl", hash = "sha256:bcb9a60ed2101af2af450318cd89c6b8313e9f8df4e8fb12b657b2e97227cf08"}, - {file = "orjson-3.9.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5da9032dac184b2ae2da4bce423edff7db34bfd936ebd7d4207ea45840f03905"}, - {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7951af8f2998045c656ba8062e8edf5e83fd82b912534ab1de1345de08a41d2b"}, - {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8e59650292aa3a8ea78073fc84184538783966528e442a1b9ed653aa282edcf"}, - {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9274ba499e7dfb8a651ee876d80386b481336d3868cba29af839370514e4dce0"}, - {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca1706e8b8b565e934c142db6a9592e6401dc430e4b067a97781a997070c5378"}, - {file = "orjson-3.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83cc275cf6dcb1a248e1876cdefd3f9b5f01063854acdfd687ec360cd3c9712a"}, - {file = "orjson-3.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:11c10f31f2c2056585f89d8229a56013bc2fe5de51e095ebc71868d070a8dd81"}, - {file = "orjson-3.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cf334ce1d2fadd1bf3e5e9bf15e58e0c42b26eb6590875ce65bd877d917a58aa"}, - {file = "orjson-3.9.7-cp38-none-win32.whl", hash = "sha256:76a0fc023910d8a8ab64daed8d31d608446d2d77c6474b616b34537aa7b79c7f"}, - {file = "orjson-3.9.7-cp38-none-win_amd64.whl", hash = "sha256:7a34a199d89d82d1897fd4a47820eb50947eec9cda5fd73f4578ff692a912f89"}, - {file = "orjson-3.9.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e7e7f44e091b93eb39db88bb0cb765db09b7a7f64aea2f35e7d86cbf47046c65"}, - {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d647b2a9c45a23a84c3e70e19d120011cba5f56131d185c1b78685457320bb"}, - {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0eb850a87e900a9c484150c414e21af53a6125a13f6e378cf4cc11ae86c8f9c5"}, - {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f4b0042d8388ac85b8330b65406c84c3229420a05068445c13ca28cc222f1f7"}, - {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd3e7aae977c723cc1dbb82f97babdb5e5fbce109630fbabb2ea5053523c89d3"}, - {file = "orjson-3.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c616b796358a70b1f675a24628e4823b67d9e376df2703e893da58247458956"}, - {file = "orjson-3.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c3ba725cf5cf87d2d2d988d39c6a2a8b6fc983d78ff71bc728b0be54c869c884"}, - {file = "orjson-3.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4891d4c934f88b6c29b56395dfc7014ebf7e10b9e22ffd9877784e16c6b2064f"}, - {file = "orjson-3.9.7-cp39-none-win32.whl", hash = "sha256:14d3fb6cd1040a4a4a530b28e8085131ed94ebc90d72793c59a713de34b60838"}, - {file = "orjson-3.9.7-cp39-none-win_amd64.whl", hash = "sha256:9ef82157bbcecd75d6296d5d8b2d792242afcd064eb1ac573f8847b52e58f677"}, - {file = "orjson-3.9.7.tar.gz", hash = "sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142"}, + {file = "orjson-3.9.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f28090060a31f4d11221f9ba48b2273b0d04b702f4dcaa197c38c64ce639cc51"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8038ba245d0c0a6337cfb6747ea0c51fe18b0cf1a4bc943d530fd66799fae33d"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:543b36df56db195739c70d645ecd43e49b44d5ead5f8f645d2782af118249b37"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e7877256b5092f1e4e48fc0f1004728dc6901e7a4ffaa4acb0a9578610aa4ce"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b83e0d8ba4ca88b894c3e00efc59fe6d53d9ffb5dbbb79d437a466fc1a513d"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef06431f021453a47a9abb7f7853f04f031d31fbdfe1cc83e3c6aadde502cce"}, + {file = "orjson-3.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0a1a4d9e64597e550428ba091e51a4bcddc7a335c8f9297effbfa67078972b5c"}, + {file = "orjson-3.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:879d2d1f6085c9c0831cec6716c63aaa89e41d8e036cabb19a315498c173fcc6"}, + {file = "orjson-3.9.9-cp310-none-win32.whl", hash = "sha256:d3f56e41bc79d30fdf077073072f2377d2ebf0b946b01f2009ab58b08907bc28"}, + {file = "orjson-3.9.9-cp310-none-win_amd64.whl", hash = "sha256:ab7bae2b8bf17620ed381e4101aeeb64b3ba2a45fc74c7617c633a923cb0f169"}, + {file = "orjson-3.9.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:31d676bc236f6e919d100fb85d0a99812cff1ebffaa58106eaaec9399693e227"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:678ffb5c0a6b1518b149cc328c610615d70d9297e351e12c01d0beed5d65360f"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71b0cc21f2c324747bc77c35161e0438e3b5e72db6d3b515310457aba743f7f"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae72621f216d1d990468291b1ec153e1b46e0ed188a86d54e0941f3dabd09ee8"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:512e5a41af008e76451f5a344941d61f48dddcf7d7ddd3073deb555de64596a6"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f89dc338a12f4357f5bf1b098d3dea6072fb0b643fd35fec556f4941b31ae27"}, + {file = "orjson-3.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:957a45fb201c61b78bcf655a16afbe8a36c2c27f18a998bd6b5d8a35e358d4ad"}, + {file = "orjson-3.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1c01cf4b8e00c7e98a0a7cf606a30a26c32adf2560be2d7d5d6766d6f474b31"}, + {file = "orjson-3.9.9-cp311-none-win32.whl", hash = "sha256:397a185e5dd7f8ebe88a063fe13e34d61d394ebb8c70a443cee7661b9c89bda7"}, + {file = "orjson-3.9.9-cp311-none-win_amd64.whl", hash = "sha256:24301f2d99d670ded4fb5e2f87643bc7428a54ba49176e38deb2887e42fe82fb"}, + {file = "orjson-3.9.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bd55ea5cce3addc03f8fb0705be0cfed63b048acc4f20914ce5e1375b15a293b"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b28c1a65cd13fff5958ab8b350f0921121691464a7a1752936b06ed25c0c7b6e"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b97a67c47840467ccf116136450c50b6ed4e16a8919c81a4b4faef71e0a2b3f4"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75b805549cbbcb963e9c9068f1a05abd0ea4c34edc81f8d8ef2edb7e139e5b0f"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5424ecbafe57b2de30d3b5736c5d5835064d522185516a372eea069b92786ba6"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d2cd6ef4726ef1b8c63e30d8287225a383dbd1de3424d287b37c1906d8d2855"}, + {file = "orjson-3.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c959550e0705dc9f59de8fca1a316da0d9b115991806b217c82931ac81d75f74"}, + {file = "orjson-3.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ece2d8ed4c34903e7f1b64fb1e448a00e919a4cdb104fc713ad34b055b665fca"}, + {file = "orjson-3.9.9-cp312-none-win_amd64.whl", hash = "sha256:f708ca623287186e5876256cb30599308bce9b2757f90d917b7186de54ce6547"}, + {file = "orjson-3.9.9-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:335406231f9247f985df045f0c0c8f6b6d5d6b3ff17b41a57c1e8ef1a31b4d04"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d9b5440a5d215d9e1cfd4aee35fd4101a8b8ceb8329f549c16e3894ed9f18b5"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e98ca450cb4fb176dd572ce28c6623de6923752c70556be4ef79764505320acb"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3bf6ca6bce22eb89dd0650ef49c77341440def966abcb7a2d01de8453df083a"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb50d869b3c97c7c5187eda3759e8eb15deb1271d694bc5d6ba7040db9e29036"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fcf06c69ccc78e32d9f28aa382ab2ab08bf54b696dbe00ee566808fdf05da7d"}, + {file = "orjson-3.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9a4402e7df1b5c9a4c71c7892e1c8f43f642371d13c73242bda5964be6231f95"}, + {file = "orjson-3.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b20becf50d4aec7114dc902b58d85c6431b3a59b04caa977e6ce67b6fee0e159"}, + {file = "orjson-3.9.9-cp38-none-win32.whl", hash = "sha256:1f352117eccac268a59fedac884b0518347f5e2b55b9f650c2463dd1e732eb61"}, + {file = "orjson-3.9.9-cp38-none-win_amd64.whl", hash = "sha256:c4eb31a8e8a5e1d9af5aa9e247c2a52ad5cf7e968aaa9aaefdff98cfcc7f2e37"}, + {file = "orjson-3.9.9-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4a308aeac326c2bafbca9abbae1e1fcf682b06e78a54dad0347b760525838d85"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e159b97f5676dcdac0d0f75ec856ef5851707f61d262851eb41a30e8fadad7c9"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f692e7aabad92fa0fff5b13a846fb586b02109475652207ec96733a085019d80"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cffb77cf0cd3cbf20eb603f932e0dde51b45134bdd2d439c9f57924581bb395b"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c63eca397127ebf46b59c9c1fb77b30dd7a8fc808ac385e7a58a7e64bae6e106"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f0c024a75e8ba5d9101facb4fb5a028cdabe3cdfe081534f2a9de0d5062af2"}, + {file = "orjson-3.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8cba20c9815c2a003b8ca4429b0ad4aa87cb6649af41365821249f0fd397148e"}, + {file = "orjson-3.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:906cac73b7818c20cf0f6a7dde5a6f009c52aecc318416c7af5ea37f15ca7e66"}, + {file = "orjson-3.9.9-cp39-none-win32.whl", hash = "sha256:50232572dd300c49f134838c8e7e0917f29a91f97dbd608d23f2895248464b7f"}, + {file = "orjson-3.9.9-cp39-none-win_amd64.whl", hash = "sha256:920814e02e3dd7af12f0262bbc18b9fe353f75a0d0c237f6a67d270da1a1bb44"}, + {file = "orjson-3.9.9.tar.gz", hash = "sha256:02e693843c2959befdd82d1ebae8b05ed12d1cb821605d5f9fe9f98ca5c9fd2b"}, ] [[package]] @@ -968,4 +958,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "14a20878568e440ec8901c2ff58194b9add2b96ed212ebce832d56ac464e93b8" +content-hash = "c43b1d213a3dde8e863612e1d24baa0aa55eb76c305f0eea6a158d855d86aaba" diff --git a/pyproject.toml b/pyproject.toml index e9bd7142..47dc3056 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.24.0" types-certifi = "^2021.10.8" types-setuptools = "^68.2.0" pook = "^1.1.1" -orjson = "^3.9.7" +orjson = "^3.9.9" [build-system] requires = ["poetry-core>=1.0.0"] From d93ab7eaf09b2c1e8ad16e20b6d4b796a3e11655 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 21:37:08 -0700 Subject: [PATCH 300/448] Bump urllib3 from 1.26.17 to 1.26.18 (#538) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.17 to 1.26.18. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.17...1.26.18) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index e9d37564..6caf87c8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -836,13 +836,13 @@ files = [ [[package]] name = "urllib3" -version = "1.26.17" +version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.17-py2.py3-none-any.whl", hash = "sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b"}, - {file = "urllib3-1.26.17.tar.gz", hash = "sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21"}, + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, ] [package.extras] From bb207cc14046207b92c016274d91d552c69106df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 09:42:07 -0700 Subject: [PATCH 301/448] Bump mypy from 1.6.0 to 1.6.1 (#542) Bumps [mypy](https://github.com/python/mypy) from 1.6.0 to 1.6.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.6.0...v1.6.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6caf87c8..b3aacad8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.6.0" +version = "1.6.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:091f53ff88cb093dcc33c29eee522c087a438df65eb92acd371161c1f4380ff0"}, - {file = "mypy-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb7ff4007865833c470a601498ba30462b7374342580e2346bf7884557e40531"}, - {file = "mypy-1.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49499cf1e464f533fc45be54d20a6351a312f96ae7892d8e9f1708140e27ce41"}, - {file = "mypy-1.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c192445899c69f07874dabda7e931b0cc811ea055bf82c1ababf358b9b2a72c"}, - {file = "mypy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:3df87094028e52766b0a59a3e46481bb98b27986ed6ded6a6cc35ecc75bb9182"}, - {file = "mypy-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c8835a07b8442da900db47ccfda76c92c69c3a575872a5b764332c4bacb5a0a"}, - {file = "mypy-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:24f3de8b9e7021cd794ad9dfbf2e9fe3f069ff5e28cb57af6f873ffec1cb0425"}, - {file = "mypy-1.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:856bad61ebc7d21dbc019b719e98303dc6256cec6dcc9ebb0b214b81d6901bd8"}, - {file = "mypy-1.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89513ddfda06b5c8ebd64f026d20a61ef264e89125dc82633f3c34eeb50e7d60"}, - {file = "mypy-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:9f8464ed410ada641c29f5de3e6716cbdd4f460b31cf755b2af52f2d5ea79ead"}, - {file = "mypy-1.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:971104bcb180e4fed0d7bd85504c9036346ab44b7416c75dd93b5c8c6bb7e28f"}, - {file = "mypy-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab98b8f6fdf669711f3abe83a745f67f50e3cbaea3998b90e8608d2b459fd566"}, - {file = "mypy-1.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a69db3018b87b3e6e9dd28970f983ea6c933800c9edf8c503c3135b3274d5ad"}, - {file = "mypy-1.6.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dccd850a2e3863891871c9e16c54c742dba5470f5120ffed8152956e9e0a5e13"}, - {file = "mypy-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:f8598307150b5722854f035d2e70a1ad9cc3c72d392c34fffd8c66d888c90f17"}, - {file = "mypy-1.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fea451a3125bf0bfe716e5d7ad4b92033c471e4b5b3e154c67525539d14dc15a"}, - {file = "mypy-1.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e28d7b221898c401494f3b77db3bac78a03ad0a0fff29a950317d87885c655d2"}, - {file = "mypy-1.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4b7a99275a61aa22256bab5839c35fe8a6887781862471df82afb4b445daae6"}, - {file = "mypy-1.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7469545380dddce5719e3656b80bdfbb217cfe8dbb1438532d6abc754b828fed"}, - {file = "mypy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:7807a2a61e636af9ca247ba8494031fb060a0a744b9fee7de3a54bed8a753323"}, - {file = "mypy-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2dad072e01764823d4b2f06bc7365bb1d4b6c2f38c4d42fade3c8d45b0b4b67"}, - {file = "mypy-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b19006055dde8a5425baa5f3b57a19fa79df621606540493e5e893500148c72f"}, - {file = "mypy-1.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31eba8a7a71f0071f55227a8057468b8d2eb5bf578c8502c7f01abaec8141b2f"}, - {file = "mypy-1.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e0db37ac4ebb2fee7702767dfc1b773c7365731c22787cb99f507285014fcaf"}, - {file = "mypy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:c69051274762cccd13498b568ed2430f8d22baa4b179911ad0c1577d336ed849"}, - {file = "mypy-1.6.0-py3-none-any.whl", hash = "sha256:9e1589ca150a51d9d00bb839bfeca2f7a04f32cd62fad87a847bc0818e15d7dc"}, - {file = "mypy-1.6.0.tar.gz", hash = "sha256:4f3d27537abde1be6d5f2c96c29a454da333a2a271ae7d5bc7110e6d4b7beb3f"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, + {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, + {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, + {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, + {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, + {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, + {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, + {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, + {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, + {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, + {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, + {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, + {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, + {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, + {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, + {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, + {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, + {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, + {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, + {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, + {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, + {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, + {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, ] [package.dependencies] From f5c4fc5abf366f3b0811c8f2b3e4bf2035f7f10a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 09:54:18 -0700 Subject: [PATCH 302/448] Bump black from 23.9.1 to 23.10.0 (#541) Bumps [black](https://github.com/psf/black) from 23.9.1 to 23.10.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.9.1...23.10.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 44 ++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index b3aacad8..be161eac 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,33 +44,29 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "23.9.1" +version = "23.10.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.9.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301"}, - {file = "black-23.9.1-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100"}, - {file = "black-23.9.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71"}, - {file = "black-23.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7"}, - {file = "black-23.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe"}, - {file = "black-23.9.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186"}, - {file = "black-23.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f"}, - {file = "black-23.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855"}, - {file = "black-23.9.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204"}, - {file = "black-23.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377"}, - {file = "black-23.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325"}, - {file = "black-23.9.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393"}, - {file = "black-23.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9"}, - {file = "black-23.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f"}, - {file = "black-23.9.1-py3-none-any.whl", hash = "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9"}, - {file = "black-23.9.1.tar.gz", hash = "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d"}, + {file = "black-23.10.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:f8dc7d50d94063cdfd13c82368afd8588bac4ce360e4224ac399e769d6704e98"}, + {file = "black-23.10.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:f20ff03f3fdd2fd4460b4f631663813e57dc277e37fb216463f3b907aa5a9bdd"}, + {file = "black-23.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3d9129ce05b0829730323bdcb00f928a448a124af5acf90aa94d9aba6969604"}, + {file = "black-23.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:960c21555be135c4b37b7018d63d6248bdae8514e5c55b71e994ad37407f45b8"}, + {file = "black-23.10.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:30b78ac9b54cf87bcb9910ee3d499d2bc893afd52495066c49d9ee6b21eee06e"}, + {file = "black-23.10.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:0e232f24a337fed7a82c1185ae46c56c4a6167fb0fe37411b43e876892c76699"}, + {file = "black-23.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31946ec6f9c54ed7ba431c38bc81d758970dd734b96b8e8c2b17a367d7908171"}, + {file = "black-23.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:c870bee76ad5f7a5ea7bd01dc646028d05568d33b0b09b7ecfc8ec0da3f3f39c"}, + {file = "black-23.10.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:6901631b937acbee93c75537e74f69463adaf34379a04eef32425b88aca88a23"}, + {file = "black-23.10.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:481167c60cd3e6b1cb8ef2aac0f76165843a374346aeeaa9d86765fe0dd0318b"}, + {file = "black-23.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74892b4b836e5162aa0452393112a574dac85e13902c57dfbaaf388e4eda37c"}, + {file = "black-23.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:47c4510f70ec2e8f9135ba490811c071419c115e46f143e4dce2ac45afdcf4c9"}, + {file = "black-23.10.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:76baba9281e5e5b230c9b7f83a96daf67a95e919c2dfc240d9e6295eab7b9204"}, + {file = "black-23.10.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:a3c2ddb35f71976a4cfeca558848c2f2f89abc86b06e8dd89b5a65c1e6c0f22a"}, + {file = "black-23.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db451a3363b1e765c172c3fd86213a4ce63fb8524c938ebd82919bf2a6e28c6a"}, + {file = "black-23.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:7fb5fc36bb65160df21498d5a3dd330af8b6401be3f25af60c6ebfe23753f747"}, + {file = "black-23.10.0-py3-none-any.whl", hash = "sha256:e223b731a0e025f8ef427dd79d8cd69c167da807f5710add30cdf131f13dd62e"}, + {file = "black-23.10.0.tar.gz", hash = "sha256:31b9f87b277a68d0e99d2905edae08807c007973eaa609da5f0c62def6b7c0bd"}, ] [package.dependencies] @@ -958,4 +954,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "c43b1d213a3dde8e863612e1d24baa0aa55eb76c305f0eea6a158d855d86aaba" +content-hash = "de855423c6240007aafe0100a24310672ea9414fff57c4a664803ad2a1acaf7d" diff --git a/pyproject.toml b/pyproject.toml index 47dc3056..ef9cac59 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<12.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] -black = "^23.9.1" +black = "^23.10.0" mypy = "^1.6" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From d971fd593dfa2716665677d40d464af10218b1fd Mon Sep 17 00:00:00 2001 From: Vera Moone <53271741+morningvera@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:38:24 -0400 Subject: [PATCH 303/448] add fmv to snapshot and ws models and add new feeds (#539) --- .polygon/rest.json | 2438 ++++++++++++----- .polygon/websocket.json | 333 +++ polygon/rest/models/snapshot.py | 6 + polygon/websocket/models/common.py | 14 + polygon/websocket/models/models.py | 17 + .../us/markets/stocks/tickers/AAPL.json | 1 + .../us/markets/stocks/tickers/index.json | 1 + test_rest/mocks/v3/snapshot.json | 2 + test_rest/mocks/v3/snapshot/options/AAPL.json | 1 + .../options/AAPL/O;AAPL230616C00150000.json | 1 + test_rest/test_snapshots.py | 6 + 11 files changed, 2096 insertions(+), 724 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 1925b814..a8bf65b0 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -79,6 +79,7 @@ "required": true, "schema": { "enum": [ + "second", "minute", "hour", "day", @@ -150,7 +151,7 @@ }, "IndicesTickerPathParam": { "description": "The ticker symbol of Index.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -826,11 +827,19 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -848,7 +857,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -900,6 +911,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastTrade": { "allOf": [ { @@ -966,11 +982,19 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -988,7 +1012,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -1203,6 +1229,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastTrade": { "allOf": [ { @@ -1269,11 +1300,19 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -1291,7 +1330,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -1956,6 +1997,11 @@ ], "type": "object" }, + "Fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "ForexConversion": { "properties": { "converted": { @@ -2362,6 +2408,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker.", "properties": { @@ -2410,24 +2461,25 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", "type": "number" } }, - "required": [ - "o", - "h", - "l", - "c", - "v" - ], "type": "object" }, "prevDay": { @@ -2551,6 +2603,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker.", "properties": { @@ -2599,24 +2656,25 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", "type": "number" } }, - "required": [ - "o", - "h", - "l", - "c", - "v" - ], "type": "object" }, "prevDay": { @@ -3273,6 +3331,44 @@ "format": "double", "type": "number" }, + "SnapshotMinOHLCV": { + "properties": { + "c": { + "description": "The close price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "h": { + "description": "The highest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "l": { + "description": "The lowest price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, + "o": { + "description": "The open price for the symbol in the given time period.", + "format": "double", + "type": "number" + }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, + "v": { + "description": "The trading volume of the symbol in the given time period.", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, "SnapshotOHLCV": { "properties": { "c": { @@ -3657,11 +3753,19 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -3680,7 +3784,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -3705,6 +3811,10 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", @@ -3714,6 +3824,10 @@ "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", "type": "boolean" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -3732,7 +3846,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -3788,6 +3904,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", "properties": { @@ -3887,6 +4008,10 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", @@ -3896,6 +4021,10 @@ "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", "type": "boolean" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -3914,7 +4043,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -4043,6 +4174,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", "properties": { @@ -4142,6 +4278,10 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", @@ -4151,6 +4291,10 @@ "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", "type": "boolean" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -4169,7 +4313,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -5047,9 +5193,8 @@ "example": 100, "in": "query", "name": "amount", - "required": true, "schema": { - "default": 100, + "default": 1, "type": "number" } }, @@ -5085,7 +5230,9 @@ "exchange": 48, "timestamp": 1605555313000 }, + "request_id": "a73a29dbcab4613eeaf48583d3baacf0", "status": "success", + "symbol": "AUD/USD", "to": "USD" }, "schema": { @@ -5132,6 +5279,12 @@ } } }, + "required": [ + "exchange", + "timestamp", + "ask", + "bid" + ], "type": "object", "x-polygon-go-type": { "name": "LastQuoteCurrencies" @@ -5154,6 +5307,15 @@ "type": "string" } }, + "required": [ + "status", + "request_id", + "from", + "to", + "symbol", + "initialAmount", + "converted" + ], "type": "object" } }, @@ -5688,7 +5850,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -5696,7 +5858,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -5704,7 +5866,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -5712,7 +5874,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -5897,7 +6059,7 @@ "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "C:EUR-USD", + "example": "C:EURUSD", "in": "path", "name": "fxTicker", "required": true, @@ -6006,7 +6168,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -6014,7 +6176,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -6022,7 +6184,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -6030,7 +6192,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -6215,7 +6377,7 @@ "parameters": [ { "description": "The ticker symbol for which to get exponential moving average (EMA) data.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -6324,7 +6486,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -6332,7 +6494,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -6340,7 +6502,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -6348,7 +6510,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -6361,16 +6523,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/ema/I:DJI?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", - "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "next_url": "https://api.polygon.io/v1/indicators/ema/I:NDX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTE1MDg0Ljk5OTM4OTgyMDAzJTJDJTIyaCUyMiUzQTAlMkMlMjJsJTIyJTNBMCUyQyUyMnQlMjIlM0ExNjg3MjE5MjAwMDAwJTdEJmFzPSZleHBhbmRfdW5kZXJseWluZz1mYWxzZSZsaW1pdD0xJm9yZGVyPWRlc2Mmc2VyaWVzX3R5cGU9Y2xvc2UmdGltZXNwYW49ZGF5JnRpbWVzdGFtcC5sdD0xNjg3MjM3MjAwMDAwJndpbmRvdz01MA", + "request_id": "b9201816341441eed663a90443c0623a", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678726291180?limit=35&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:NDX/range/1/day/1678338000000/1687366449650?limit=226&sort=desc" }, "values": [ { - "timestamp": 1681966800000, - "value": 33355.64416487007 + "timestamp": 1687237200000, + "value": 14452.002555459003 } ] }, @@ -6509,6 +6671,7 @@ "tags": [ "indices:aggregates" ], + "x-polygon-entitlement-allowed-limited-tickers": true, "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" @@ -6636,7 +6799,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -6644,7 +6807,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -6652,7 +6815,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -6660,7 +6823,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -6954,7 +7117,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -6962,7 +7125,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -6970,7 +7133,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -6978,7 +7141,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -7281,7 +7444,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -7289,7 +7452,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -7297,7 +7460,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -7305,7 +7468,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -7514,7 +7677,7 @@ "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "C:EUR-USD", + "example": "C:EURUSD", "in": "path", "name": "fxTicker", "required": true, @@ -7643,7 +7806,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -7651,7 +7814,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -7659,7 +7822,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -7667,7 +7830,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -7876,7 +8039,7 @@ "parameters": [ { "description": "The ticker symbol for which to get MACD data.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -8005,7 +8168,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -8013,7 +8176,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -8021,7 +8184,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -8029,7 +8192,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -8042,24 +8205,24 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/macd/I:DJI?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", - "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "next_url": "https://api.polygon.io/v1/indicators/macd/I:NDX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTE1MDg0Ljk5OTM4OTgyMDAzJTJDJTIyaCUyMiUzQTAlMkMlMjJsJTIyJTNBMCUyQyUyMnQlMjIlM0ExNjg3MTUwODAwMDAwJTdEJmFzPSZleHBhbmRfdW5kZXJseWluZz1mYWxzZSZsaW1pdD0yJmxvbmdfd2luZG93PTI2Jm9yZGVyPWRlc2Mmc2VyaWVzX3R5cGU9Y2xvc2Umc2hvcnRfd2luZG93PTEyJnNpZ25hbF93aW5kb3c9OSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2ODcyMTkyMDAwMDA", + "request_id": "2eeda0be57e83cbc64cc8d1a74e84dbd", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678726155743?limit=129&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:NDX/range/1/day/1678338000000/1687366537196?limit=121&sort=desc" }, "values": [ { - "histogram": -48.29157370302107, - "signal": 225.60959338746886, - "timestamp": 1681966800000, - "value": 177.3180196844478 + "histogram": -4.7646219788108795, + "signal": 220.7596784587801, + "timestamp": 1687237200000, + "value": 215.9950564799692 }, { - "histogram": -37.55634001543484, - "signal": 237.6824868132241, - "timestamp": 1681963200000, - "value": 200.12614679778926 + "histogram": 3.4518937661882205, + "signal": 221.9508339534828, + "timestamp": 1687219200000, + "value": 225.40272771967102 } ] }, @@ -8214,6 +8377,7 @@ "tags": [ "indices:aggregates" ], + "x-polygon-entitlement-allowed-limited-tickers": true, "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" @@ -8361,7 +8525,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -8369,7 +8533,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -8377,7 +8541,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -8385,7 +8549,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -8723,7 +8887,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -8731,7 +8895,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -8739,7 +8903,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -8747,7 +8911,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -9054,7 +9218,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -9062,7 +9226,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -9070,7 +9234,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -9078,7 +9242,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -9100,7 +9264,7 @@ "values": [ { "timestamp": 1517562000016, - "value": 140.139 + "value": 82.19 } ] }, @@ -9263,7 +9427,7 @@ "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "C:EUR-USD", + "example": "C:EURUSD", "in": "path", "name": "fxTicker", "required": true, @@ -9372,7 +9536,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -9380,7 +9544,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -9388,7 +9552,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -9396,7 +9560,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -9418,7 +9582,7 @@ "values": [ { "timestamp": 1517562000016, - "value": 140.139 + "value": 82.19 } ] }, @@ -9581,7 +9745,7 @@ "parameters": [ { "description": "The ticker symbol for which to get relative strength index (RSI) data.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -9690,7 +9854,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -9698,7 +9862,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -9706,7 +9870,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -9714,7 +9878,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -9727,16 +9891,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/rsi/I:DJI?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", - "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "next_url": "https://api.polygon.io/v1/indicators/rsi/I:NDX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTE1MDg0Ljk5OTM4OTgyMDAzJTJDJTIyaCUyMiUzQTAlMkMlMjJsJTIyJTNBMCUyQyUyMnQlMjIlM0ExNjg3MjE5MjAwMDAwJTdEJmFzPSZleHBhbmRfdW5kZXJseWluZz1mYWxzZSZsaW1pdD0xJm9yZGVyPWRlc2Mmc2VyaWVzX3R5cGU9Y2xvc2UmdGltZXNwYW49ZGF5JnRpbWVzdGFtcC5sdD0xNjg3MjM3MjAwMDAwJndpbmRvdz0xNA", + "request_id": "28a8417f521f98e1d08f6ed7d1fbcad3", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:NDX/range/1/day/1678338000000/1687366658253?limit=66&sort=desc" }, "values": [ { - "timestamp": 1681966800000, - "value": 55.89394103205648 + "timestamp": 1687237200000, + "value": 73.98019439047955 } ] }, @@ -9875,6 +10039,7 @@ "tags": [ "indices:aggregates" ], + "x-polygon-entitlement-allowed-limited-tickers": true, "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" @@ -10002,7 +10167,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -10010,7 +10175,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -10018,7 +10183,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -10026,7 +10191,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -10048,7 +10213,7 @@ "values": [ { "timestamp": 1517562000016, - "value": 140.139 + "value": 82.19 } ] }, @@ -10320,7 +10485,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -10328,7 +10493,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -10336,7 +10501,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -10344,7 +10509,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -10366,7 +10531,7 @@ "values": [ { "timestamp": 1517562000016, - "value": 140.139 + "value": 82.19 } ] }, @@ -10627,7 +10792,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -10635,7 +10800,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -10643,7 +10808,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -10651,7 +10816,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -10858,7 +11023,7 @@ "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "C:EUR-USD", + "example": "C:EURUSD", "in": "path", "name": "fxTicker", "required": true, @@ -10967,7 +11132,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -10975,7 +11140,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -10983,7 +11148,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -10991,7 +11156,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -11198,7 +11363,7 @@ "parameters": [ { "description": "The ticker symbol for which to get simple moving average (SMA) data.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -11307,7 +11472,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -11315,7 +11480,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -11323,7 +11488,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -11331,7 +11496,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -11344,16 +11509,16 @@ "content": { "application/json": { "example": { - "next_url": "https://api.polygon.io/v1/indicators/sma/I:DJI?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTQwNDcuNDEwMDAwMDAwMDAwMyUyQyUyMmglMjIlM0EwJTJDJTIybCUyMiUzQTAlMkMlMjJ0JTIyJTNBMTY3ODA4MjQwMDAwMCU3RCZhcz0mZXhwYW5kX3VuZGVybHlpbmc9ZmFsc2UmbGltaXQ9MTAmb3JkZXI9ZGVzYyZzZXJpZXNfdHlwZT1jbG9zZSZ0aW1lc3Bhbj1kYXkmdGltZXN0YW1wLmx0PTE2NzgxNjUyMDAwMDAmd2luZG93PTU", - "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", + "next_url": "https://api.polygon.io/v1/indicators/sma/I:NDX?cursor=YWRqdXN0ZWQ9dHJ1ZSZhcD0lN0IlMjJ2JTIyJTNBMCUyQyUyMm8lMjIlM0EwJTJDJTIyYyUyMiUzQTE1MDg0Ljk5OTM4OTgyMDAzJTJDJTIyaCUyMiUzQTAlMkMlMjJsJTIyJTNBMCUyQyUyMnQlMjIlM0ExNjg3MjE5MjAwMDAwJTdEJmFzPSZleHBhbmRfdW5kZXJseWluZz1mYWxzZSZsaW1pdD0xJm9yZGVyPWRlc2Mmc2VyaWVzX3R5cGU9Y2xvc2UmdGltZXNwYW49ZGF5JnRpbWVzdGFtcC5sdD0xNjg3MjM3MjAwMDAwJndpbmRvdz01Mw", + "request_id": "4cae270008cb3f947e3f92c206e3888a", "results": { "underlying": { - "url": "https://api.polygon.io/v2/aggs/ticker/I:DJI/range/1/day/1063281600000/1678725829099?limit=35&sort=desc" + "url": "https://api.polygon.io/v2/aggs/ticker/I:NDX/range/1/day/1678338000000/1687366378997?limit=240&sort=desc" }, "values": [ { - "timestamp": 1681966800000, - "value": 33236.3424 + "timestamp": 1687237200000, + "value": 14362.676417589264 } ] }, @@ -11492,6 +11657,7 @@ "tags": [ "indices:aggregates" ], + "x-polygon-entitlement-allowed-limited-tickers": true, "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" @@ -11619,7 +11785,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -11627,7 +11793,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -11635,7 +11801,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -11643,7 +11809,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -11959,7 +12125,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -11967,7 +12133,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -11975,7 +12141,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -11983,7 +12149,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -12265,6 +12431,12 @@ } } }, + "required": [ + "exchange", + "price", + "size", + "timestamp" + ], "type": "object", "x-polygon-go-type": { "name": "LastTradeCrypto" @@ -12283,6 +12455,11 @@ "type": "string" } }, + "required": [ + "status", + "request_id", + "symbol" + ], "type": "object" } }, @@ -12381,6 +12558,12 @@ } } }, + "required": [ + "ask", + "bid", + "exchange", + "timestamp" + ], "type": "object", "x-polygon-go-type": { "name": "LastQuoteCurrencies" @@ -12399,6 +12582,11 @@ "type": "string" } }, + "required": [ + "status", + "request_id", + "symbol" + ], "type": "object" } }, @@ -12892,7 +13080,7 @@ "parameters": [ { "description": "The ticker symbol of Index.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -12907,7 +13095,6 @@ "name": "date", "required": true, "schema": { - "format": "date", "type": "string" } } @@ -12917,15 +13104,15 @@ "content": { "application/json": { "example": { - "afterHours": 31909.64, - "close": 32245.14, - "from": "2023-03-10", - "high": 32988.26, - "low": 32200.66, - "open": 32922.75, - "preMarket": 32338.23, + "afterHours": 11830.43006295237, + "close": 11830.28178808306, + "from": "2023-03-10T00:00:00.000Z", + "high": 12069.62262033557, + "low": 11789.85923449393, + "open": 12001.69552583921, + "preMarket": 12001.69552583921, "status": "OK", - "symbol": "I:DJI" + "symbol": "I:NDX" }, "schema": { "properties": { @@ -12983,6 +13170,12 @@ ], "type": "object" } + }, + "text/csv": { + "example": "from,open,high,low,close,afterHours,preMarket\n2023-01-10,12001.69552583921,12069.62262033557,11789.85923449393,11830.28178808306,26122646,11830.43006295237,12001.69552583921\n", + "schema": { + "type": "string" + } } }, "description": "The open/close of this stock symbol." @@ -12995,6 +13188,7 @@ "tags": [ "stocks:open-close" ], + "x-polygon-entitlement-allowed-limited-tickers": true, "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" @@ -14256,6 +14450,7 @@ "icon_url": "https://api.polygon.io/icon.png", "logo_url": "https://api.polygon.io/logo.svg" }, + "last_updated": 1679597116344223500, "market_status": "closed", "name": "Norwegian Cruise Lines", "price": 22.3, @@ -14277,6 +14472,7 @@ "type": "stock" }, { + "last_updated": 1679597116344223500, "market_status": "closed", "name": "NCLH $5 Call", "options": { @@ -14306,6 +14502,7 @@ "type": "options" }, { + "last_updated": 1679597116344223500, "market_status": "open", "name": "Euro - United States Dollar", "price": 0.97989, @@ -14326,6 +14523,7 @@ "icon_url": "https://api.polygon.io/icon.png", "logo_url": "https://api.polygon.io/logo.svg" }, + "last_updated": 1679597116344223500, "market_status": "open", "name": "Bitcoin - United States Dollar", "price": 32154.68, @@ -14377,6 +14575,15 @@ "description": "The error while looking for this ticker.", "type": "string" }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, "market_status": { "description": "The market status for the market that trades this ticker.", "type": "string" @@ -14424,7 +14631,7 @@ "type": "number" }, "strike_price": { - "description": "The strike price of the option contract", + "description": "The strike price of the option contract.", "format": "double", "type": "number" }, @@ -14469,12 +14676,12 @@ "type": "number" }, "early_trading_change": { - "description": "Today\u2019s early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", + "description": "Today's early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", "format": "double", "type": "number" }, "early_trading_change_percent": { - "description": "Today\u2019s early trading change as a percentage.", + "description": "Today's early trading change as a percentage.", "format": "double", "type": "number" }, @@ -14484,12 +14691,12 @@ "type": "number" }, "late_trading_change": { - "description": "Today\u2019s late trading change amount, difference between price and today\u2019s close if in late trading hours, otherwise difference between last price during late trading and today\u2019s close.", + "description": "Today's late trading change amount, difference between price and today's close if in late trading hours, otherwise difference between last price during late trading and today's close.", "format": "double", "type": "number" }, "late_trading_change_percent": { - "description": "Today\u2019s late trading change as a percentage.", + "description": "Today's late trading change as a percentage.", "format": "double", "type": "number" }, @@ -14508,6 +14715,11 @@ "format": "double", "type": "number" }, + "price": { + "description": "The price of the most recent trade or bid price for this asset.", + "format": "double", + "type": "number" + }, "volume": { "description": "The trading volume for the asset for the day.", "format": "double", @@ -14551,7 +14763,8 @@ "market_status", "type", "session", - "options" + "options", + "last_updated" ], "type": "object", "x-polygon-go-type": { @@ -15410,6 +15623,7 @@ "required": true, "schema": { "enum": [ + "second", "minute", "hour", "day", @@ -15862,6 +16076,7 @@ "required": true, "schema": { "enum": [ + "second", "minute", "hour", "day", @@ -16089,7 +16304,7 @@ "parameters": [ { "description": "The ticker symbol of Index.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -16107,17 +16322,17 @@ "request_id": "b2170df985474b6d21a6eeccfb6bee67", "results": [ { - "T": "I:DJI", - "c": 33786.62, - "h": 33786.62, - "l": 33677.74, - "o": 33677.74, - "t": 1682020800000 + "T": "I:NDX", + "c": 15070.14948566977, + "h": 15127.4195807999, + "l": 14946.7243781848, + "o": 15036.48391066877, + "t": 1687291200000 } ], "resultsCount": 1, "status": "OK", - "ticker": "I:DJI" + "ticker": "I:NDX" }, "schema": { "allOf": [ @@ -16206,6 +16421,12 @@ } ] } + }, + "text/csv": { + "example": "T,c,h,l,o,t,v,vw\nI:NDX,15036.48391066877,15070.14948566977,15127.4195807999,14946.7243781848,1687291200000\n", + "schema": { + "type": "string" + } } }, "description": "The previous day OHLC for a index." @@ -16218,6 +16439,7 @@ "tags": [ "indices:aggregates" ], + "x-polygon-entitlement-allowed-limited-tickers": true, "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" @@ -16234,7 +16456,7 @@ "parameters": [ { "description": "The ticker symbol of Index.", - "example": "I:DJI", + "example": "I:NDX", "in": "path", "name": "indicesTicker", "required": true, @@ -16260,6 +16482,7 @@ "required": true, "schema": { "enum": [ + "second", "minute", "hour", "day", @@ -16323,22 +16546,22 @@ "request_id": "0cf72b6da685bcd386548ffe2895904a", "results": [ { - "c": 32245.14, - "h": 32988.26, - "l": 32200.66, - "o": 32922.75, + "c": 11995.88235998666, + "h": 12340.44936267155, + "l": 11970.34221717375, + "o": 12230.83658266843, "t": 1678341600000 }, { - "c": 31787.7, - "h": 32422.100000000002, - "l": 31786.06, - "o": 32198.9, + "c": 11830.28178808306, + "h": 12069.62262033557, + "l": 11789.85923449393, + "o": 12001.69552583921, "t": 1678428000000 } ], "status": "OK", - "ticker": "I:DJI" + "ticker": "I:NDX" }, "schema": { "allOf": [ @@ -16427,6 +16650,12 @@ } ] } + }, + "text/csv": { + "example": "c,h,l,n,o,t\n11995.88235998666,12340.44936267155,11970.34221717375,12230.83658266843,1678341600000\n11830.28178808306,12069.62262033557,11789.85923449393,12001.69552583921,1678341600000\n", + "schema": { + "type": "string" + } } }, "description": "Index Aggregates." @@ -16439,6 +16668,7 @@ "tags": [ "indices:aggregates" ], + "x-polygon-entitlement-allowed-limited-tickers": true, "x-polygon-entitlement-data-type": { "description": "Aggregate data", "name": "aggregates" @@ -16665,6 +16895,7 @@ "required": true, "schema": { "enum": [ + "second", "minute", "hour", "day", @@ -17112,6 +17343,7 @@ "required": true, "schema": { "enum": [ + "second", "minute", "hour", "day", @@ -17479,6 +17711,12 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "q" + ], "type": "object", "x-polygon-go-type": { "name": "LastQuoteResult" @@ -17489,6 +17727,10 @@ "type": "string" } }, + "required": [ + "status", + "request_id" + ], "type": "object" } }, @@ -17566,7 +17808,8 @@ "r": 202, "s": 25, "t": 1617901342969834000, - "x": 312 + "x": 312, + "y": 1617901342969834000 }, "status": "OK" }, @@ -17642,6 +17885,15 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "q", + "i", + "p", + "x" + ], "type": "object", "x-polygon-go-type": { "name": "LastTradeResult" @@ -17652,6 +17904,10 @@ "type": "string" } }, + "required": [ + "status", + "request_id" + ], "type": "object" } }, @@ -17809,6 +18065,15 @@ "type": "integer" } }, + "required": [ + "T", + "t", + "y", + "q", + "i", + "p", + "x" + ], "type": "object", "x-polygon-go-type": { "name": "LastTradeResult" @@ -17819,6 +18084,10 @@ "type": "string" } }, + "required": [ + "status", + "request_id" + ], "type": "object" } }, @@ -18307,7 +18576,9 @@ "c": 0.296, "h": 0.296, "l": 0.294, + "n": 2, "o": 0.296, + "t": 1684427880000, "v": 123.4866, "vw": 0 }, @@ -18389,6 +18660,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastTrade": { "allOf": [ { @@ -18455,11 +18731,19 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -18477,7 +18761,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -18646,7 +18932,9 @@ "c": 16235.1, "h": 16264.29, "l": 16129.3, + "n": 558, "o": 16257.51, + "t": 1684428960000, "v": 19.30791925, "vw": 0 }, @@ -18738,6 +19026,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastTrade": { "allOf": [ { @@ -18804,11 +19097,19 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -18826,7 +19127,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -19185,7 +19488,9 @@ "c": 0.062377, "h": 0.062377, "l": 0.062377, + "n": 2, "o": 0.062377, + "t": 1684426740000, "v": 35420, "vw": 0 }, @@ -19259,6 +19564,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastTrade": { "allOf": [ { @@ -19325,11 +19635,19 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -19347,7 +19665,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -19512,7 +19832,9 @@ "c": 0.117769, "h": 0.11779633, "l": 0.11773698, + "n": 1, "o": 0.11778, + "t": 1684422000000, "v": 202 }, "prevDay": { @@ -19587,6 +19909,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker.", "properties": { @@ -19635,24 +19962,25 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", "type": "number" } }, - "required": [ - "o", - "h", - "l", - "c", - "v" - ], "type": "object" }, "prevDay": { @@ -19816,7 +20144,9 @@ "c": 1.18396, "h": 1.18423, "l": 1.1838, + "n": 85, "o": 1.18404, + "t": 1684422000000, "v": 41 }, "prevDay": { @@ -19901,6 +20231,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker.", "properties": { @@ -19949,24 +20284,25 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", "type": "number" } }, - "required": [ - "o", - "h", - "l", - "c", - "v" - ], "type": "object" }, "prevDay": { @@ -20131,7 +20467,9 @@ "c": 0.886156, "h": 0.886156, "l": 0.886156, + "n": 1, "o": 0.886156, + "t": 1684422000000, "v": 1 }, "prevDay": { @@ -20206,6 +20544,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker.", "properties": { @@ -20254,24 +20597,25 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", "type": "number" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", "type": "number" } }, - "required": [ - "o", - "h", - "l", - "c", - "v" - ], "type": "object" }, "prevDay": { @@ -20460,7 +20804,9 @@ "c": 20.506, "h": 20.506, "l": 20.506, + "n": 1, "o": 20.506, + "t": 1684428600000, "v": 5000, "vw": 20.5105 }, @@ -20550,6 +20896,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", "properties": { @@ -20649,6 +21000,10 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", @@ -20658,6 +21013,10 @@ "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", "type": "boolean" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -20676,7 +21035,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -20848,7 +21209,9 @@ "c": 120.4201, "h": 120.468, "l": 120.37, + "n": 762, "o": 120.435, + "t": 1684428720000, "v": 270796, "vw": 120.4129 }, @@ -20944,6 +21307,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", "properties": { @@ -21043,6 +21411,10 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", @@ -21052,6 +21424,10 @@ "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", "type": "boolean" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -21070,7 +21446,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -21251,7 +21629,9 @@ "c": 14.2284, "h": 14.325, "l": 14.2, + "n": 5, "o": 14.28, + "t": 1684428600000, "v": 6108, "vw": 14.2426 }, @@ -21337,6 +21717,11 @@ ], "type": "object" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.", + "format": "double", + "type": "number" + }, "lastQuote": { "description": "The most recent quote for this ticker. This is only returned if your current plan includes quotes.", "properties": { @@ -21436,6 +21821,10 @@ "format": "double", "type": "number" }, + "n": { + "description": "The number of transactions in the aggregate window.", + "type": "integer" + }, "o": { "description": "The open price for the symbol in the given time period.", "format": "double", @@ -21445,6 +21834,10 @@ "description": "Whether or not this aggregate is for an OTC ticker. This field will be left off if false.", "type": "boolean" }, + "t": { + "description": "The Unix Msec timestamp for the start of the aggregate window.", + "type": "integer" + }, "v": { "description": "The trading volume of the symbol in the given time period.", "format": "double", @@ -21463,7 +21856,9 @@ "l", "c", "v", - "vw" + "vw", + "t", + "n" ], "type": "object" }, @@ -22245,7 +22640,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -22253,7 +22648,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -22261,7 +22656,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -22269,7 +22664,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -22325,17 +22720,17 @@ "request_id": "a47d1beb8c11b6ae897ab76cdbbf35a3", "results": [ { - "ask_exchange": "48,", - "ask_price": "1.18565,", - "bid_exchange": "48,", - "bid_price": "1.18558,", + "ask_exchange": 48, + "ask_price": 1.18565, + "bid_exchange": 48, + "bid_price": 1.18558, "participant_timestamp": 1625097600000000000 }, { - "ask_exchange": "48,", - "ask_price": "1.18565,", - "bid_exchange": "48,", - "bid_price": "1.18559,", + "ask_exchange": 48, + "ask_price": 1.18565, + "bid_exchange": 48, + "bid_price": 1.18559, "participant_timestamp": 1625097600000000000 } ], @@ -22378,6 +22773,9 @@ } } }, + "required": [ + "participant_timestamp" + ], "type": "object" }, "type": "array" @@ -22387,6 +22785,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" } }, @@ -22464,7 +22865,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -22472,7 +22873,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -22480,7 +22881,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -22488,7 +22889,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -22618,6 +23019,10 @@ } } }, + "required": [ + "sip_timestamp", + "sequence_number" + ], "type": "object" }, "type": "array" @@ -22627,6 +23032,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" } }, @@ -22697,7 +23105,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -22705,7 +23113,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -22713,7 +23121,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -22721,7 +23129,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -22908,7 +23316,15 @@ } } }, - "type": "object" + "required": [ + "participant_timestamp", + "sequence_number", + "sip_timestamp" + ], + "type": "object", + "x-polygon-go-type": { + "name": "CommonQuote" + } }, "type": "array" }, @@ -22917,6 +23333,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" } }, @@ -23830,7 +24249,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.gte", "schema": { @@ -23838,7 +24257,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.gt", "schema": { @@ -23846,7 +24265,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.lte", "schema": { @@ -23854,7 +24273,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.lt", "schema": { @@ -23862,7 +24281,7 @@ } }, { - "description": "Search by ex_dividend_date.", + "description": "Range by ex_dividend_date.", "in": "query", "name": "ex_dividend_date.gte", "schema": { @@ -23871,7 +24290,7 @@ } }, { - "description": "Search by ex_dividend_date.", + "description": "Range by ex_dividend_date.", "in": "query", "name": "ex_dividend_date.gt", "schema": { @@ -23880,7 +24299,7 @@ } }, { - "description": "Search by ex_dividend_date.", + "description": "Range by ex_dividend_date.", "in": "query", "name": "ex_dividend_date.lte", "schema": { @@ -23889,7 +24308,7 @@ } }, { - "description": "Search by ex_dividend_date.", + "description": "Range by ex_dividend_date.", "in": "query", "name": "ex_dividend_date.lt", "schema": { @@ -23898,7 +24317,7 @@ } }, { - "description": "Search by record_date.", + "description": "Range by record_date.", "in": "query", "name": "record_date.gte", "schema": { @@ -23907,7 +24326,7 @@ } }, { - "description": "Search by record_date.", + "description": "Range by record_date.", "in": "query", "name": "record_date.gt", "schema": { @@ -23916,7 +24335,7 @@ } }, { - "description": "Search by record_date.", + "description": "Range by record_date.", "in": "query", "name": "record_date.lte", "schema": { @@ -23925,7 +24344,7 @@ } }, { - "description": "Search by record_date.", + "description": "Range by record_date.", "in": "query", "name": "record_date.lt", "schema": { @@ -23934,7 +24353,7 @@ } }, { - "description": "Search by declaration_date.", + "description": "Range by declaration_date.", "in": "query", "name": "declaration_date.gte", "schema": { @@ -23943,7 +24362,7 @@ } }, { - "description": "Search by declaration_date.", + "description": "Range by declaration_date.", "in": "query", "name": "declaration_date.gt", "schema": { @@ -23952,7 +24371,7 @@ } }, { - "description": "Search by declaration_date.", + "description": "Range by declaration_date.", "in": "query", "name": "declaration_date.lte", "schema": { @@ -23961,7 +24380,7 @@ } }, { - "description": "Search by declaration_date.", + "description": "Range by declaration_date.", "in": "query", "name": "declaration_date.lt", "schema": { @@ -23970,7 +24389,7 @@ } }, { - "description": "Search by pay_date.", + "description": "Range by pay_date.", "in": "query", "name": "pay_date.gte", "schema": { @@ -23979,7 +24398,7 @@ } }, { - "description": "Search by pay_date.", + "description": "Range by pay_date.", "in": "query", "name": "pay_date.gt", "schema": { @@ -23988,7 +24407,7 @@ } }, { - "description": "Search by pay_date.", + "description": "Range by pay_date.", "in": "query", "name": "pay_date.lte", "schema": { @@ -23997,7 +24416,7 @@ } }, { - "description": "Search by pay_date.", + "description": "Range by pay_date.", "in": "query", "name": "pay_date.lt", "schema": { @@ -24006,7 +24425,7 @@ } }, { - "description": "Search by cash_amount.", + "description": "Range by cash_amount.", "in": "query", "name": "cash_amount.gte", "schema": { @@ -24014,7 +24433,7 @@ } }, { - "description": "Search by cash_amount.", + "description": "Range by cash_amount.", "in": "query", "name": "cash_amount.gt", "schema": { @@ -24022,7 +24441,7 @@ } }, { - "description": "Search by cash_amount.", + "description": "Range by cash_amount.", "in": "query", "name": "cash_amount.lte", "schema": { @@ -24030,7 +24449,7 @@ } }, { - "description": "Search by cash_amount.", + "description": "Range by cash_amount.", "in": "query", "name": "cash_amount.lt", "schema": { @@ -24276,401 +24695,58 @@ ] } } - }, - "post": { - "description": "Manually add Polygon a dividend.", - "operationId": "CreateDividend", + } + }, + "/v3/reference/exchanges": { + "get": { + "description": "List all exchanges that Polygon.io knows about.", + "operationId": "ListExchanges", "parameters": [ { - "description": "If true don't trigger overlay", + "description": "Filter by asset class.", "in": "query", - "name": "skip_overlay_trigger", + "name": "asset_class", "schema": { - "default": false, - "type": "boolean" + "description": "An identifier for a group of similar financial instruments.", + "enum": [ + "stocks", + "options", + "crypto", + "fx" + ], + "example": "stocks", + "type": "string" + } + }, + { + "description": "Filter by locale.", + "in": "query", + "name": "locale", + "schema": { + "description": "An identifier for a geographical location.", + "enum": [ + "us", + "global" + ], + "example": "us", + "type": "string" } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "properties": { - "cash_amount": { - "description": "The cash amount of the dividend per share owned.", - "type": "number", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "currency": { - "description": "The currency in which the dividend is paid.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "declaration_date": { - "description": "The date that the dividend was announced.", - "type": "string" - }, - "dividend_type": { - "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", - "enum": [ - "CD", - "SC", - "LT", - "ST" - ], - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "ex_dividend_date": { - "description": "The date that the stock first trades without the dividend, determined by the exchange.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "frequency": { - "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", - "type": "integer", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "pay_date": { - "description": "The date that the dividend is paid out.", - "type": "string" - }, - "record_date": { - "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string" - }, - "ticker": { - "description": "The ticker symbol of the dividend.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - } - }, - "required": [ - "ticker", - "ex_dividend_date", - "frequency", - "cash_amount", - "dividend_type" - ], - "type": "object", - "x-polygon-go-struct-tags": { - "tags": [ - "db" - ] - } - } - } - }, - "description": "Pass the desired dividend in the request body.", - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { + "count": { + "description": "The total number of results for this request.", + "example": 1, + "type": "integer" + }, "request_id": { - "type": "string" - }, - "results": { - "properties": { - "cash_amount": { - "description": "The cash amount of the dividend per share owned.", - "type": "number", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "currency": { - "description": "The currency in which the dividend is paid.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "declaration_date": { - "description": "The date that the dividend was announced.", - "type": "string" - }, - "dividend_type": { - "description": "The type of dividend. Dividends that have been paid and/or are expected to be paid on consistent schedules are denoted as CD.\nSpecial Cash dividends that have been paid that are infrequent or unusual, and/or can not be expected to occur in the future are denoted as SC.\nLong-Term and Short-Term capital gain distributions are denoted as LT and ST, respectively.", - "enum": [ - "CD", - "SC", - "LT", - "ST" - ], - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "ex_dividend_date": { - "description": "The date that the stock first trades without the dividend, determined by the exchange.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "frequency": { - "description": "The number of times per year the dividend is paid out. Possible values are 0 (one-time), 1 (annually), 2 (bi-annually), 4 (quarterly), and 12 (monthly).", - "type": "integer", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - }, - "pay_date": { - "description": "The date that the dividend is paid out.", - "type": "string" - }, - "record_date": { - "description": "The date that the stock must be held to receive the dividend, set by the company.", - "type": "string" - }, - "ticker": { - "description": "The ticker symbol of the dividend.", - "type": "string", - "x-polygon-go-field-tags": { - "tags": [ - { - "key": "binding", - "value": "required" - } - ] - } - } - }, - "required": [ - "ticker", - "ex_dividend_date", - "frequency", - "cash_amount", - "dividend_type" - ], - "type": "object", - "x-polygon-go-struct-tags": { - "tags": [ - "db" - ] - } - }, - "status": { - "type": "string" - } - }, - "required": [ - "request_id" - ], - "type": "object" - } - } - }, - "description": "OK" - }, - "400": { - "content": { - "application/json": { - "schema": { - "properties": { - "error": { - "type": "string" - }, - "request_id": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "required": [ - "request_id", - "error" - ], - "type": "object" - } - } - }, - "description": "the requested update was unable to be performed due to an invalid request body" - }, - "409": { - "content": { - "application/json": { - "schema": { - "properties": { - "error": { - "type": "string" - }, - "request_id": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "required": [ - "request_id", - "error" - ], - "type": "object" - } - } - }, - "description": "a dividend already exists for this date and ticker" - }, - "default": { - "content": { - "application/json": { - "schema": { - "properties": { - "error": { - "type": "string" - }, - "request_id": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "required": [ - "request_id", - "error" - ], - "type": "object" - } - } - }, - "description": "unknown error" - } - }, - "summary": "Dividends v3", - "tags": [ - "reference:stocks" - ], - "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" - } - } - }, - "/v3/reference/exchanges": { - "get": { - "description": "List all exchanges that Polygon.io knows about.", - "operationId": "ListExchanges", - "parameters": [ - { - "description": "Filter by asset class.", - "in": "query", - "name": "asset_class", - "schema": { - "description": "An identifier for a group of similar financial instruments.", - "enum": [ - "stocks", - "options", - "crypto", - "fx" - ], - "example": "stocks", - "type": "string" - } - }, - { - "description": "Filter by locale.", - "in": "query", - "name": "locale", - "schema": { - "description": "An identifier for a geographical location.", - "enum": [ - "us", - "global" - ], - "example": "us", - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "properties": { - "count": { - "description": "The total number of results for this request.", - "example": 1, - "type": "integer" - }, - "request_id": { - "description": "A request ID assigned by the server.", - "example": "31d59dda-80e5-4721-8496-d0d32a654afe", + "description": "A request ID assigned by the server.", + "example": "31d59dda-80e5-4721-8496-d0d32a654afe", "type": "string" }, "results": { @@ -24926,7 +25002,7 @@ } }, { - "description": "Search by underlying_ticker.", + "description": "Range by underlying_ticker.", "in": "query", "name": "underlying_ticker.gte", "schema": { @@ -24934,7 +25010,7 @@ } }, { - "description": "Search by underlying_ticker.", + "description": "Range by underlying_ticker.", "in": "query", "name": "underlying_ticker.gt", "schema": { @@ -24942,7 +25018,7 @@ } }, { - "description": "Search by underlying_ticker.", + "description": "Range by underlying_ticker.", "in": "query", "name": "underlying_ticker.lte", "schema": { @@ -24950,7 +25026,7 @@ } }, { - "description": "Search by underlying_ticker.", + "description": "Range by underlying_ticker.", "in": "query", "name": "underlying_ticker.lt", "schema": { @@ -24958,7 +25034,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.gte", "schema": { @@ -24966,7 +25042,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.gt", "schema": { @@ -24974,7 +25050,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.lte", "schema": { @@ -24982,7 +25058,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.lt", "schema": { @@ -24990,7 +25066,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.gte", "schema": { @@ -24998,7 +25074,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.gt", "schema": { @@ -25006,7 +25082,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.lte", "schema": { @@ -25014,7 +25090,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.lt", "schema": { @@ -25667,7 +25743,7 @@ }, "/v3/reference/tickers": { "get": { - "description": "Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Crypto, and Forex.", + "description": "Query all ticker symbols which are supported by Polygon.io. This API currently includes Stocks/Equities, Indices, Forex, and Crypto.", "operationId": "ListTickers", "parameters": [ { @@ -25780,7 +25856,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.gte", "schema": { @@ -25788,7 +25864,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.gt", "schema": { @@ -25796,7 +25872,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.lte", "schema": { @@ -25804,7 +25880,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.lt", "schema": { @@ -26465,54 +26541,771 @@ "description": "The type of the asset. Find the types that we support via our [Ticker Types API](https://polygon.io/docs/stocks/get_v3_reference_tickers_types).", "type": "string" }, - "weighted_shares_outstanding": { - "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.", - "format": "double", - "type": "number" + "weighted_shares_outstanding": { + "description": "The shares outstanding calculated assuming all shares of other share classes are converted to this share class.", + "format": "double", + "type": "number" + } + }, + "required": [ + "ticker", + "name", + "market", + "locale", + "active", + "currency_name" + ], + "type": "object", + "x-polygon-go-type": { + "name": "ReferenceTicker", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + }, + "text/csv": { + "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,round_lot,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,100,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", + "schema": { + "type": "string" + } + } + }, + "description": "Reference Tickers." + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "summary": "Ticker Details v3", + "tags": [ + "reference:tickers:get" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, + "/v3/snapshot": { + "get": { + "description": "Get snapshots for assets of all types", + "operationId": "Snapshots", + "parameters": [ + { + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "anyOf": { + "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.\n", + "enabled": true, + "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD,I:SPX" + }, + "range": true, + "type": "string" + } + }, + { + "description": "Query by the type of asset.", + "in": "query", + "name": "type", + "schema": { + "enum": [ + "stocks", + "options", + "crypto", + "fx", + "indices" + ], + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.\n", + "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD,I:SPX", + "in": "query", + "name": "ticker.any_of", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 250.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 250, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker" + ], + "example": "ticker", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "abc123", + "results": [ + { + "break_even_price": 171.075, + "details": { + "contract_type": "call", + "exercise_style": "american", + "expiration_date": "2022-10-14", + "shares_per_contract": 100, + "strike_price": 5, + "underlying_ticker": "NCLH" + }, + "greeks": { + "delta": 0.5520187372272933, + "gamma": 0.00706756515659829, + "theta": -0.018532772783847958, + "vega": 0.7274811132998142 + }, + "implied_volatility": 0.3048997097864957, + "last_quote": { + "ask": 21.25, + "ask_exchange": 12, + "ask_size": 110, + "bid": 20.9, + "bid_exchange": 10, + "bid_size": 172, + "last_updated": 1636573458756383500, + "midpoint": 21.075, + "timeframe": "REAL-TIME" + }, + "last_trade": { + "conditions": [ + 209 + ], + "exchange": 316, + "price": 0.05, + "sip_timestamp": 1675280958783136800, + "size": 2, + "timeframe": "REAL-TIME" + }, + "market_status": "closed", + "name": "NCLH $5 Call", + "open_interest": 8921, + "session": { + "change": -0.05, + "change_percent": -1.07, + "close": 6.65, + "early_trading_change": -0.01, + "early_trading_change_percent": -0.03, + "high": 7.01, + "late_trading_change": -0.4, + "late_trading_change_percent": -0.02, + "low": 5.42, + "open": 6.7, + "previous_close": 6.71, + "volume": 67 + }, + "ticker": "O:NCLH221014C00005000", + "type": "options", + "underlying_asset": { + "change_to_break_even": 23.123999999999995, + "last_updated": 1636573459862384600, + "price": 147.951, + "ticker": "AAPL", + "timeframe": "REAL-TIME" + } + }, + { + "last_quote": { + "ask": 21.25, + "ask_exchange": 300, + "ask_size": 110, + "bid": 20.9, + "bid_exchange": 323, + "bid_size": 172, + "last_updated": 1636573458756383500, + "timeframe": "REAL-TIME" + }, + "last_trade": { + "conditions": [ + 209 + ], + "exchange": 316, + "id": "4064", + "last_updated": 1675280958783136800, + "price": 0.05, + "size": 2, + "timeframe": "REAL-TIME" + }, + "market_status": "closed", + "name": "Apple Inc.", + "session": { + "change": -1.05, + "change_percent": -4.67, + "close": 21.4, + "early_trading_change": -0.39, + "early_trading_change_percent": -0.07, + "high": 22.49, + "late_trading_change": 1.2, + "late_trading_change_percent": 3.92, + "low": 21.35, + "open": 22.49, + "previous_close": 22.45, + "volume": 37 + }, + "ticker": "AAPL", + "type": "stocks" + }, + { + "error": "NOT_FOUND", + "message": "Ticker not found.", + "ticker": "TSLAAPL" + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "break_even_price": { + "description": "The price of the underlying asset for the contract to break even. For a call, this value is (strike price + premium paid). For a put, this value is (strike price - premium paid).", + "format": "double", + "type": "number" + }, + "details": { + "description": "The details for this contract.", + "properties": { + "contract_type": { + "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", + "enum": [ + "put", + "call", + "other" + ], + "type": "string" + }, + "exercise_style": { + "description": "The exercise style of this contract. See this link for more details on exercise styles.", + "enum": [ + "american", + "european", + "bermudan" + ], + "type": "string" + }, + "expiration_date": { + "description": "The contract's expiration date in YYYY-MM-DD format.", + "format": "date", + "type": "string", + "x-polygon-go-type": { + "name": "IDaysPolygonDateString", + "path": "github.com/polygon-io/ptime" + } + }, + "shares_per_contract": { + "description": "The number of shares per contract for this contract.", + "type": "number" + }, + "strike_price": { + "description": "The strike price of the option contract.", + "format": "double", + "type": "number" + } + }, + "required": [ + "contract_type", + "exercise_style", + "expiration_date", + "shares_per_contract", + "strike_price" + ], + "type": "object" + }, + "error": { + "description": "The error while looking for this ticker.", + "type": "string" + }, + "greeks": { + "description": "The greeks for this contract. \nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", + "properties": { + "delta": { + "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "gamma": { + "description": "The change in delta per $0.01 change in the price of the underlying asset.", + "format": "double", + "type": "number" + }, + "theta": { + "description": "The change in the option's price per day.", + "format": "double", + "type": "number" + }, + "vega": { + "description": "The change in the option's price per 1% increment in volatility.", + "format": "double", + "type": "number" + } + }, + "required": [ + "delta", + "gamma", + "theta", + "vega" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Greeks" + } + }, + "implied_volatility": { + "description": "The market's forecast for the volatility of the underlying asset, based on this option's current price.", + "format": "double", + "type": "number" + }, + "last_quote": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "ask": { + "description": "The ask price.", + "format": "double", + "type": "number" + }, + "ask_exchange": { + "description": "The ask side exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "ask_size": { + "description": "The ask size. This represents the number of round lot orders at the given ask price. The normal round lot size is 100 shares. An ask size of 2 means there are 200 shares available to purchase at the given ask price.", + "format": "double", + "type": "number" + }, + "bid": { + "description": "The bid price.", + "format": "double", + "type": "number" + }, + "bid_exchange": { + "description": "The bid side exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "bid_size": { + "description": "The bid size. This represents the number of round lot orders at the given bid price. The normal round lot size is 100 shares. A bid size of 2 means there are 200 shares for purchase at the given bid price.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "midpoint": { + "description": "The average of the bid and ask price.", + "format": "double", + "type": "number" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "required": [ + "last_updated", + "timeframe", + "ask", + "bid", + "last_updated", + "timeframe" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SnapshotLastQuote" + } + }, + "last_trade": { + "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "properties": { + "conditions": { + "description": "A list of condition codes.", + "items": { + "description": "The condition code. These are the conditions of this message. See\n[Condition Mappings](https://polygon.io/docs/stocks/get_v3_reference_conditions)\nfor a mapping to exchange conditions.", + "format": "int32", + "type": "integer" + }, + "type": "array" + }, + "exchange": { + "description": "The exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "type": "integer" + }, + "id": { + "description": "The Trade ID which uniquely identifies a trade. These are unique per combination of ticker, exchange, and TRF. For example: A trade for AAPL executed on NYSE and a trade for AAPL executed on NASDAQ could potentially have the same Trade ID.", + "type": "string" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "participant_timestamp": { + "description": "The nanosecond Exchange Unix Timestamp. This is the timestamp of when the trade was generated at the exchange.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of\nthis trade. A trade of 100 shares with a price of $2.00 would be worth a\ntotal dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "sip_timestamp": { + "description": "The nanosecond accuracy SIP Unix Timestamp. This is the timestamp of when the SIP received this trade from the exchange which produced it.", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "The size of a trade (also known as volume).", + "format": "int32", + "type": "integer" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + } + }, + "required": [ + "last_updated", + "timeframe", + "participant_timestamp", + "price", + "size" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SnapshotLastTrade" + } + }, + "market_status": { + "description": "The market status for the market that trades this ticker. Possible values for stocks, options, crypto, and forex snapshots are open, closed, early_trading, or late_trading.\nPossible values for indices snapshots are regular_trading, closed, early_trading, and late_trading.", + "type": "string" + }, + "message": { + "description": "The error message while looking for this ticker.", + "type": "string" + }, + "name": { + "description": "The name of this contract.", + "type": "string" + }, + "open_interest": { + "description": "The quantity of this contract held at the end of the last trading day.", + "format": "double", + "type": "number" + }, + "session": { + "properties": { + "change": { + "description": "The value of the price change for the asset from the previous trading day.", + "format": "double", + "type": "number" + }, + "change_percent": { + "description": "The percent of the price change for the asset from the previous trading day.", + "format": "double", + "type": "number" + }, + "close": { + "description": "The closing price of the asset for the day.", + "format": "double", + "type": "number" + }, + "early_trading_change": { + "description": "Today's early trading change amount, difference between price and previous close if in early trading hours, otherwise difference between last price during early trading and previous close.", + "format": "double", + "type": "number" + }, + "early_trading_change_percent": { + "description": "Today's early trading change as a percentage.", + "format": "double", + "type": "number" + }, + "high": { + "description": "The highest price of the asset for the day.", + "format": "double", + "type": "number" + }, + "late_trading_change": { + "description": "Today's late trading change amount, difference between price and today's close if in late trading hours, otherwise difference between last price during late trading and today's close.", + "format": "double", + "type": "number" + }, + "late_trading_change_percent": { + "description": "Today's late trading change as a percentage.", + "format": "double", + "type": "number" + }, + "low": { + "description": "The lowest price of the asset for the day.", + "format": "double", + "type": "number" + }, + "open": { + "description": "The open price of the asset for the day.", + "format": "double", + "type": "number" + }, + "previous_close": { + "description": "The closing price of the asset for the previous trading day.", + "format": "double", + "type": "number" + }, + "price": { + "description": "The price of the most recent trade or bid price for this asset.", + "format": "double", + "type": "number" + }, + "volume": { + "description": "The trading volume for the asset for the day.", + "format": "double", + "type": "number" + } + }, + "required": [ + "change", + "change_percent", + "close", + "high", + "low", + "open", + "previous_close" + ], + "type": "object", + "x-polygon-go-type": { + "name": "Session" + } + }, + "ticker": { + "description": "The ticker symbol for the asset.", + "type": "string" + }, + "type": { + "description": "The asset class for this ticker.", + "enum": [ + "stocks", + "options", + "fx", + "crypto" + ], + "type": "string" + }, + "underlying_asset": { + "description": "Information on the underlying stock for this options contract. The market data returned depends on your current stocks plan.", + "properties": { + "change_to_break_even": { + "description": "The change in price for the contract to break even.", + "format": "double", + "type": "number" + }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, + "price": { + "description": "The price of the trade. This is the actual dollar value per whole share of this trade. A trade of 100 shares with a price of $2.00 would be worth a total dollar value of $200.00.", + "format": "double", + "type": "number" + }, + "ticker": { + "description": "The ticker symbol for the contract's underlying asset.", + "type": "string" + }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + }, + "value": { + "description": "The value of the underlying index.", + "format": "double", + "type": "number" + } + }, + "required": [ + "last_updated", + "timeframe", + "ticker", + "change_to_break_even" + ], + "type": "object", + "x-polygon-go-type": { + "name": "UnderlyingAsset" + } + }, + "value": { + "description": "Value of Index.", + "type": "number" + } + }, + "required": [ + "ticker" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SnapshotResponseModel" } }, - "required": [ - "ticker", - "name", - "market", - "locale", - "active", - "currency_name" - ], - "type": "object", - "x-polygon-go-type": { - "name": "ReferenceTicker", - "path": "github.com/polygon-io/go-lib-models/v2/globals" - } + "type": "array" }, "status": { "description": "The status of this request's response.", "type": "string" } }, + "required": [ + "status", + "request_id" + ], "type": "object" } - }, - "text/csv": { - "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,round_lot,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,100,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", - "schema": { - "type": "string" - } } }, - "description": "Reference Tickers." - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" + "description": "Snapshots for the ticker list" } }, - "summary": "Ticker Details v3", - "tags": [ - "reference:tickers:get" + "summary": "Universal Snapshot", + "x-polygon-entitlement-allowed-timeframes": [ + { + "description": "Real Time Data", + "name": "realtime" + }, + { + "description": "15 minute delayed data", + "name": "delayed" + } ], "x-polygon-entitlement-data-type": { - "description": "Reference data", - "name": "reference" + "description": "Snapshot data", + "name": "snapshots" + }, + "x-polygon-entitlement-market-type": { + "description": "All asset classes", + "name": "universal" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 250, + "min": 1 + }, + "sort": { + "default": "ticker", + "enum": [ + "ticker" + ] + } } } }, @@ -26523,12 +27316,94 @@ "parameters": [ { "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.", - "example": "I:SPX", + "example": "I:DJI", "in": "query", "name": "ticker.any_of", "schema": { "type": "string" } + }, + { + "description": "Search a range of tickers lexicographically.", + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 250.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 250, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker" + ], + "example": "ticker", + "type": "string" + } } ], "responses": { @@ -26539,8 +27414,9 @@ "request_id": "6a7e466379af0a71039d60cc78e72282", "results": [ { + "last_updated": 1679597116344223500, "market_status": "closed", - "name": "S&P 500", + "name": "Dow Jones Industrial Average", "session": { "change": -50.01, "change_percent": -1.45, @@ -26550,7 +27426,7 @@ "open": 3827.38, "previous_close": 3812.19 }, - "ticker": "I:SPX", + "ticker": "I:DJI", "timeframe": "REAL-TIME", "type": "indices", "value": 3822.39 @@ -26570,6 +27446,10 @@ }, "schema": { "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, "request_id": { "type": "string" }, @@ -26580,6 +27460,15 @@ "description": "The error while looking for this ticker.", "type": "string" }, + "last_updated": { + "description": "The nanosecond timestamp of when this information was updated.", + "format": "int64", + "type": "integer", + "x-polygon-go-type": { + "name": "INanoseconds", + "path": "github.com/polygon-io/ptime" + } + }, "market_status": { "description": "The market status for the market that trades this ticker.", "type": "string" @@ -26639,6 +27528,14 @@ "description": "Ticker of asset queried.", "type": "string" }, + "timeframe": { + "description": "The time relevance of the data.", + "enum": [ + "DELAYED", + "REAL-TIME" + ], + "type": "string" + }, "type": { "description": "The indices market.", "enum": [ @@ -26652,7 +27549,9 @@ } }, "required": [ - "ticker" + "ticker", + "timeframe", + "last_updated" ], "type": "object", "x-polygon-go-type": { @@ -26698,6 +27597,18 @@ "x-polygon-entitlement-market-type": { "description": "Indices data", "name": "indices" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 250 + }, + "sort": { + "default": "ticker", + "enum": [ + "ticker" + ] + } } } }, @@ -26708,7 +27619,7 @@ "parameters": [ { "description": "The underlying ticker symbol of the option contract.", - "example": "AAPL", + "example": "EVRI", "in": "path", "name": "underlyingAsset", "required": true, @@ -26752,7 +27663,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.gte", "schema": { @@ -26760,7 +27671,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.gt", "schema": { @@ -26768,7 +27679,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.lte", "schema": { @@ -26776,7 +27687,7 @@ } }, { - "description": "Search by strike_price.", + "description": "Range by strike_price.", "in": "query", "name": "strike_price.lt", "schema": { @@ -26784,7 +27695,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.gte", "schema": { @@ -26792,7 +27703,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.gt", "schema": { @@ -26800,7 +27711,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.lte", "schema": { @@ -26808,7 +27719,7 @@ } }, { - "description": "Search by expiration_date.", + "description": "Range by expiration_date.", "in": "query", "name": "expiration_date.lt", "schema": { @@ -26935,7 +27846,7 @@ "items": { "properties": { "break_even_price": { - "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "description": "The price of the underlying asset for the contract to break even. For a call, this value is (strike price + premium paid). For a put, this value is (strike price - premium paid).", "format": "double", "type": "number" }, @@ -27016,6 +27927,7 @@ } }, "details": { + "description": "The details for this contract.", "properties": { "contract_type": { "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", @@ -27054,7 +27966,7 @@ "type": "number" }, "ticker": { - "description": "The ticker for the option contract.", + "description": "The ticker symbol for the asset.", "type": "string" } }, @@ -27072,7 +27984,7 @@ } }, "greeks": { - "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "description": "The greeks for this contract. \nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", "properties": { "delta": { "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", @@ -27095,6 +28007,12 @@ "type": "number" } }, + "required": [ + "delta", + "gamma", + "theta", + "vega" + ], "type": "object", "x-polygon-go-type": { "name": "Greeks" @@ -27113,6 +28031,11 @@ "format": "double", "type": "number" }, + "ask_exchange": { + "description": "The ask side exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "format": "int32", + "type": "number" + }, "ask_size": { "description": "The ask size.", "format": "double", @@ -27123,6 +28046,11 @@ "format": "double", "type": "number" }, + "bid_exchange": { + "description": "The bid side exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "format": "int32", + "type": "number" + }, "bid_size": { "description": "The bid size.", "format": "double", @@ -27279,8 +28207,8 @@ "last_quote", "underlying_asset", "details", + "cha", "break_even_price", - "implied_volatility", "open_interest" ], "type": "object", @@ -27351,7 +28279,7 @@ "parameters": [ { "description": "The underlying ticker symbol of the option contract.", - "example": "AAPL", + "example": "EVRI", "in": "path", "name": "underlyingAsset", "required": true, @@ -27361,7 +28289,7 @@ }, { "description": "The option contract identifier.", - "example": "O:AAPL230616C00150000", + "example": "O:EVRI240119C00002500", "in": "path", "name": "optionContract", "required": true, @@ -27407,8 +28335,10 @@ "implied_volatility": 0.3048997097864957, "last_quote": { "ask": 21.25, + "ask_exchange": 301, "ask_size": 110, "bid": 20.9, + "bid_exchange": 301, "bid_size": 172, "last_updated": 1636573458756383500, "midpoint": 21.075, @@ -27447,7 +28377,7 @@ "results": { "properties": { "break_even_price": { - "description": "The price the underlying asset for the contract to break even. For a call this value is (strike price + premium paid), where a put this value is (strike price - premium paid)", + "description": "The price of the underlying asset for the contract to break even. For a call, this value is (strike price + premium paid). For a put, this value is (strike price - premium paid).", "format": "double", "type": "number" }, @@ -27528,6 +28458,7 @@ } }, "details": { + "description": "The details for this contract.", "properties": { "contract_type": { "description": "The type of contract. Can be \"put\", \"call\", or in some rare cases, \"other\".", @@ -27566,7 +28497,7 @@ "type": "number" }, "ticker": { - "description": "The ticker for the option contract.", + "description": "The ticker symbol for the asset.", "type": "string" } }, @@ -27584,7 +28515,7 @@ } }, "greeks": { - "description": "The greeks for this contract. This is only returned if your current plan includes greeks.", + "description": "The greeks for this contract. \nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", "properties": { "delta": { "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", @@ -27607,6 +28538,12 @@ "type": "number" } }, + "required": [ + "delta", + "gamma", + "theta", + "vega" + ], "type": "object", "x-polygon-go-type": { "name": "Greeks" @@ -27625,6 +28562,11 @@ "format": "double", "type": "number" }, + "ask_exchange": { + "description": "The ask side exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "format": "int32", + "type": "number" + }, "ask_size": { "description": "The ask size.", "format": "double", @@ -27635,6 +28577,11 @@ "format": "double", "type": "number" }, + "bid_exchange": { + "description": "The bid side exchange ID. See Exchanges for Polygon.io's mapping of exchange IDs.", + "format": "int32", + "type": "number" + }, "bid_size": { "description": "The bid size.", "format": "double", @@ -27791,8 +28738,8 @@ "last_quote", "underlying_asset", "details", + "cha", "break_even_price", - "implied_volatility", "open_interest" ], "type": "object", @@ -27873,7 +28820,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -27881,7 +28828,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -27889,7 +28836,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -27897,7 +28844,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -28024,6 +28971,12 @@ "type": "number" } }, + "required": [ + "exchange", + "price", + "size", + "id" + ], "type": "object" }, "type": "array" @@ -28033,6 +28986,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" } }, @@ -28110,7 +29066,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -28118,7 +29074,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -28126,7 +29082,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -28134,7 +29090,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -28267,6 +29223,12 @@ "type": "number" } }, + "required": [ + "exchange", + "price", + "sip_timestamp", + "size" + ], "type": "object" }, "type": "array" @@ -28276,6 +29238,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" } }, @@ -28346,7 +29311,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gte", "schema": { @@ -28354,7 +29319,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.gt", "schema": { @@ -28362,7 +29327,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lte", "schema": { @@ -28370,7 +29335,7 @@ } }, { - "description": "Search by timestamp.", + "description": "Range by timestamp.", "in": "query", "name": "timestamp.lt", "schema": { @@ -28541,7 +29506,19 @@ } } }, - "type": "object" + "required": [ + "exchange", + "id", + "price", + "sequence_number", + "sip_timestamp", + "participant_timestamp", + "size" + ], + "type": "object", + "x-polygon-go-type": { + "name": "CommonTrade" + } }, "type": "array" }, @@ -28550,6 +29527,9 @@ "type": "string" } }, + "required": [ + "status" + ], "type": "object" } }, @@ -29133,7 +30113,7 @@ "financials": { "properties": { "balance_sheet": { - "description": "Balance sheet.\nNote that the keys in this object can be any of the balance sheet concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.", + "description": "Balance sheet.\nThe keys in this object can be any of the fields listed in the Balance Sheet section of the financials API glossary of terms.", "properties": { "*": { "description": "An individual financial data point.", @@ -29185,15 +30165,15 @@ "type": "object" }, "cash_flow_statement": { - "description": "Cash flow statement.\nNote that the keys in this object can be any of the cash flow statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "description": "Cash flow statement.\nThe keys in this object can be any of the fields listed in the Cash Flow Statement section of the financials API glossary of terms.\nSee the attributes of the objects within `balance_sheet` for more details.", "type": "object" }, "comprehensive_income": { - "description": "Comprehensive income.\nNote that the keys in this object can be any of the comprehensive income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "description": "Comprehensive income.\nThe keys in this object can be any of the fields listed in the Comprehensive Income section of the financials API glossary of terms.\nSee the attributes of the objects within `balance_sheet` for more details.", "type": "object" }, "income_statement": { - "description": "Income statement.\nNote that the keys in this object can be any of the income statement concepts defined in this table of fundamental accounting concepts but converted to `snake_case`.\nSee the attributes of the objects within `balance_sheet` for more details.", + "description": "Income statement.\nThe keys in this object can be any of the fields listed in the Income Statement section of the financials API glossary of terms.\nSee the attributes of the objects within `balance_sheet` for more details.", "type": "object" } }, @@ -29565,7 +30545,8 @@ "/v2/snapshot/locale/global/markets/crypto/tickers", "/v2/snapshot/locale/global/markets/crypto/{direction}", "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}", - "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book" + "/v2/snapshot/locale/global/markets/crypto/tickers/{ticker}/book", + "/v3/snapshot" ] }, { @@ -29655,7 +30636,8 @@ "paths": [ "/v2/snapshot/locale/global/markets/forex/tickers", "/v2/snapshot/locale/global/markets/forex/{direction}", - "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}" + "/v2/snapshot/locale/global/markets/forex/tickers/{ticker}", + "/v3/snapshot" ] }, { @@ -29726,7 +30708,8 @@ { "group": "Snapshots", "paths": [ - "/v3/snapshot/indices" + "/v3/snapshot/indices", + "/v3/snapshot" ] } ], @@ -29796,7 +30779,8 @@ "group": "Snapshots", "paths": [ "/v3/snapshot/options/{underlyingAsset}/{optionContract}", - "/v3/snapshot/options/{underlyingAsset}" + "/v3/snapshot/options/{underlyingAsset}", + "/v3/snapshot" ] }, { @@ -29931,7 +30915,8 @@ "paths": [ "/v2/snapshot/locale/us/markets/stocks/tickers", "/v2/snapshot/locale/us/markets/stocks/{direction}", - "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}" + "/v2/snapshot/locale/us/markets/stocks/tickers/{stocksTicker}", + "/v3/snapshot" ] }, { @@ -29975,6 +30960,11 @@ "/v3/reference/tickers/types" ] }, + { + "paths": [ + "/vX/reference/tickers/taxonomies" + ] + }, { "paths": [ "/v1/marketstatus/upcoming" diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 267b522d..0738b167 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -48,6 +48,11 @@ "/stocks/LULD" ] }, + { + "paths": [ + "/business/stocks/FMV" + ] + }, { "paths": [ "/launchpad/stocks/AM" @@ -84,6 +89,11 @@ "/options/Q" ] }, + { + "paths": [ + "/business/options/FMV" + ] + }, { "paths": [ "/launchpad/options/AM" @@ -110,6 +120,11 @@ "/forex/C" ] }, + { + "paths": [ + "/business/forex/FMV" + ] + }, { "paths": [ "/launchpad/forex/AM" @@ -146,6 +161,11 @@ "/crypto/XL2" ] }, + { + "paths": [ + "/business/crypto/FMV" + ] + }, { "paths": [ "/launchpad/crypto/AM" @@ -915,6 +935,79 @@ ] } }, + "/business/stocks/FMV": { + "get": { + "summary": "Fair Market Value", + "description": "Real-time fair market value for a given stock ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a stock ticker or use * to subscribe to all stock tickers.\nYou can also use a comma separated list to subscribe to multiple stock tickers.\nYou can retrieve available stock tickers from our [Stock Tickers API](https://polygon.io/docs/stocks/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^([a-zA-Z]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a fair market value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "FMV" + ], + "description": "The event type." + }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.\n" + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "FMV", + "val": 189.22, + "sym": "AAPL", + "t": 1678220098130 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "indicative-price", + "description": "Indicative Price" + }, + "x-polygon-entitlement-market-type": { + "name": "stocks", + "description": "Stocks data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/launchpad/stocks/AM": { "get": { "summary": "Aggregates (Per Minute)", @@ -1608,6 +1701,79 @@ ] } }, + "/business/options/FMV": { + "get": { + "summary": "Fair Market Value", + "description": "Real-time fair market value for a given options ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an option contract. You're only allowed to subscribe to 1,000 option contracts per connection.\nYou can also use a comma separated list to subscribe to multiple option contracts.\nYou can retrieve active options contracts from our [Options Contracts API](https://polygon.io/docs/options/get_v3_reference_options_contracts).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(([a-zA-Z]+|[0-9])+)$/" + }, + "example": "O:SPY241220P00720000" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a fair market value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "FMV" + ], + "description": "The event type." + }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.\n" + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "FMV", + "val": 7.2, + "sym": "O:TSLA210903C00700000", + "t": 1401715883806000000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "indicative-price", + "description": "Indicative Price" + }, + "x-polygon-entitlement-market-type": { + "name": "options", + "description": "Options data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/launchpad/options/AM": { "get": { "summary": "Aggregates (Per Minute)", @@ -2005,6 +2171,79 @@ ] } }, + "/business/forex/FMV": { + "get": { + "summary": "Fair Market Value", + "description": "Real-time fair market value for a given forex ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a fair market value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "FMV" + ], + "description": "The event type." + }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.\n" + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "FMV", + "val": 1.0631, + "sym": "C:EURUSD", + "t": 1678220098130 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "indicative-price", + "description": "Indicative Price" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/launchpad/forex/AM": { "get": { "summary": "Aggregates (Per Minute)", @@ -2646,6 +2885,79 @@ ] } }, + "/business/crypto/FMV": { + "get": { + "summary": "Fair Market Value", + "description": "Real-time fair market value for a given crypto ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a fair market value event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "FMV" + ], + "description": "The event type." + }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.\n" + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } + }, + "example": { + "ev": "FMV", + "val": 33021.9, + "sym": "X:BTC-USD", + "t": 1610462007425 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "indicative-price", + "description": "Indicative Price" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/launchpad/crypto/AM": { "get": { "summary": "Aggregates (Per Minute)", @@ -4621,6 +4933,27 @@ "description": "The nanosecond timestamp." } } + }, + "BusinessWebsocketFairMarketValue": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "FMV" + ], + "description": "The event type." + }, + "fmv": { + "description": "Fair market value is only available on Business plans. It is our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security. For more information, contact us.\n" + }, + "sym": { + "description": "The ticker symbol for the given security." + }, + "t": { + "description": "The nanosecond timestamp." + } + } } }, "parameters": { diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index f655dcf3..d97f17c3 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -90,6 +90,7 @@ class TickerSnapshot: todays_change: Optional[float] = None todays_change_percent: Optional[float] = None updated: Optional[int] = None + fair_market_value: Optional[float] = None @staticmethod def from_dict(d): @@ -107,6 +108,7 @@ def from_dict(d): todays_change=d.get("todaysChange", None), todays_change_percent=d.get("todaysChangePerc", None), updated=d.get("updated", None), + fair_market_value=d.get("fmv", None), ) @@ -215,6 +217,7 @@ class OptionContractSnapshot: last_trade: Optional[LastTradeOptionContractSnapshot] = None open_interest: Optional[float] = None underlying_asset: Optional[UnderlyingAsset] = None + fair_market_value: Optional[float] = None @staticmethod def from_dict(d): @@ -238,6 +241,7 @@ def from_dict(d): underlying_asset=None if "underlying_asset" not in d else UnderlyingAsset.from_dict(d["underlying_asset"]), + fair_market_value=d.get("fmv", None), ) @@ -391,6 +395,7 @@ class UniversalSnapshot: open_interest: Optional[float] = None market_status: Optional[str] = None name: Optional[str] = None + fair_market_value: Optional[float] = None error: Optional[str] = None message: Optional[str] = None @@ -420,6 +425,7 @@ def from_dict(d): open_interest=d.get("open_interest", None), market_status=d.get("market_status", None), name=d.get("name", None), + fair_market_value=d.get("fmv", None), error=d.get("error", None), message=d.get("message", None), ) diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index 95148f13..b39f9f87 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -9,6 +9,16 @@ class Feed(Enum): PolyFeedPlus = "polyfeedplus.polygon.io" StarterFeed = "starterfeed.polygon.io" Launchpad = "launchpad.polygon.io" + Business = "business.polygon.io" + EdgxBusiness = "edgx-business.polygon.io" + DelayedBusiness = "delayed-business.polygon.io" + DelayedEdgxBusiness = "delayed-edgx-business.polygon.io" + DelayedNasdaqLastSaleBusiness = "delayed-nasdaq-last-sale-business.polygon.io" + DelayedNasdaqBasic = "delayed-nasdaq-basic-business.polygon.io" + DelayedFullMarketBusiness = "delayed-fullmarket-business.polygon.io" + FullMarketBusiness = "fullmarket-business.polygon.io" + NasdaqLastSaleBusiness = "nasdaq-last-sale-business.polygon.io" + NasdaqBasicBusiness = "nasdaq-basic-business.polygon.io" class Market(Enum): @@ -40,3 +50,7 @@ class EventType(Enum): """ LaunchpadValue = "LV" LaunchpadAggMin = "AM" + """Business* EventTypes are only available to Business users. These values are the same across all asset classes ( + stocks, options, forex, crypto). + """ + BusinessFairMarketValue = "FMV" diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 1227131d..48061e16 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -342,6 +342,23 @@ def from_dict(d): ) +@modelclass +class FairMarketValue: + event_type: Optional[Union[str, EventType]] = None + fmv: Optional[float] = None + ticker: Optional[str] = None + timestamp: Optional[int] = None + + @staticmethod + def from_dict(d): + return LaunchpadValue( + event_type=d.get("ev", None), + fmv=d.get("fmv", None), + ticker=d.get("sym", None), + timestamp=d.get("t", None), + ) + + WebSocketMessage = NewType( "WebSocketMessage", List[ diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json index 08a7cefb..fb382df2 100644 --- a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json +++ b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/AAPL.json @@ -10,6 +10,7 @@ "v": 68840127, "vw": 162.7124 }, + "fmv": 160.315, "lastQuote": { "P": 159.99, "S": 5, diff --git a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json index 2bb197f3..4316f2cc 100644 --- a/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json +++ b/test_rest/mocks/v2/snapshot/locale/us/markets/stocks/tickers/index.json @@ -11,6 +11,7 @@ "v": 37216, "vw": 20.616 }, + "fmv": 20.5, "lastQuote": { "P": 20.6, "S": 22, diff --git a/test_rest/mocks/v3/snapshot.json b/test_rest/mocks/v3/snapshot.json index c9ccb730..9a09706c 100644 --- a/test_rest/mocks/v3/snapshot.json +++ b/test_rest/mocks/v3/snapshot.json @@ -11,6 +11,7 @@ "strike_price": 5, "underlying_ticker": "NCLH" }, + "fmv": 20.5, "greeks": { "delta": 0.5520187372272933, "gamma": 0.00706756515659829, @@ -65,6 +66,7 @@ } }, { + "fmv": 0.05, "last_quote": { "ask": 21.25, "ask_size": 110, diff --git a/test_rest/mocks/v3/snapshot/options/AAPL.json b/test_rest/mocks/v3/snapshot/options/AAPL.json index de91e5d7..84e38b93 100644 --- a/test_rest/mocks/v3/snapshot/options/AAPL.json +++ b/test_rest/mocks/v3/snapshot/options/AAPL.json @@ -23,6 +23,7 @@ "strike_price": 150, "ticker": "O:AAPL230616C00150000" }, + "fmv": 20.5, "greeks": { "delta": 0.6436614934293701, "gamma": 0.0061735291012820675, diff --git a/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json b/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json index 81e4aab2..d63e980e 100644 --- a/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json +++ b/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json @@ -22,6 +22,7 @@ "strike_price": 150, "ticker": "O:AAPL230616C00150000" }, + "fmv": 29.2, "greeks": { "delta": 0.6436614934293701, "gamma": 0.0061735291012820675, diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index f0b0bf3f..48e90bd4 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -44,6 +44,7 @@ def test_list_universal_snapshots(self): strike_price=5, underlying_ticker="NCLH", ), + fair_market_value=20.5, greeks=Greeks( delta=0.5520187372272933, gamma=0.00706756515659829, @@ -90,6 +91,7 @@ def test_list_universal_snapshots(self): ), ), UniversalSnapshot( + fair_market_value=0.05, last_quote=UniversalSnapshotLastQuote( ask=21.25, ask_size=110, @@ -147,6 +149,7 @@ def test_get_snapshot_all(self): timestamp=None, transactions=None, ), + fair_market_value=20.5, last_quote=LastQuote( ticker=None, trf_timestamp=None, @@ -220,6 +223,7 @@ def test_get_snapshot_ticker(self): timestamp=None, transactions=None, ), + fair_market_value=160.315, last_quote=LastQuote( ticker=None, trf_timestamp=None, @@ -303,6 +307,7 @@ def test_get_snapshot_option(self): strike_price=150, ticker="O:AAPL230616C00150000", ), + fair_market_value=29.2, greeks=Greeks( delta=0.6436614934293701, gamma=0.0061735291012820675, @@ -363,6 +368,7 @@ def test_list_snapshot_options_chain(self): strike_price=150, ticker="O:AAPL230616C00150000", ), + fair_market_value=20.5, greeks=Greeks( delta=0.6436614934293701, gamma=0.0061735291012820675, From 01e17defbba3c7b7f0544a3d6a8e9bde9aa25c8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 09:41:59 -0700 Subject: [PATCH 304/448] Bump black from 23.10.0 to 23.10.1 (#546) Bumps [black](https://github.com/psf/black) from 23.10.0 to 23.10.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.10.0...23.10.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 40 ++++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index be161eac..46dbf7f6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,29 +44,29 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "23.10.0" +version = "23.10.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.10.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:f8dc7d50d94063cdfd13c82368afd8588bac4ce360e4224ac399e769d6704e98"}, - {file = "black-23.10.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:f20ff03f3fdd2fd4460b4f631663813e57dc277e37fb216463f3b907aa5a9bdd"}, - {file = "black-23.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3d9129ce05b0829730323bdcb00f928a448a124af5acf90aa94d9aba6969604"}, - {file = "black-23.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:960c21555be135c4b37b7018d63d6248bdae8514e5c55b71e994ad37407f45b8"}, - {file = "black-23.10.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:30b78ac9b54cf87bcb9910ee3d499d2bc893afd52495066c49d9ee6b21eee06e"}, - {file = "black-23.10.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:0e232f24a337fed7a82c1185ae46c56c4a6167fb0fe37411b43e876892c76699"}, - {file = "black-23.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31946ec6f9c54ed7ba431c38bc81d758970dd734b96b8e8c2b17a367d7908171"}, - {file = "black-23.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:c870bee76ad5f7a5ea7bd01dc646028d05568d33b0b09b7ecfc8ec0da3f3f39c"}, - {file = "black-23.10.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:6901631b937acbee93c75537e74f69463adaf34379a04eef32425b88aca88a23"}, - {file = "black-23.10.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:481167c60cd3e6b1cb8ef2aac0f76165843a374346aeeaa9d86765fe0dd0318b"}, - {file = "black-23.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f74892b4b836e5162aa0452393112a574dac85e13902c57dfbaaf388e4eda37c"}, - {file = "black-23.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:47c4510f70ec2e8f9135ba490811c071419c115e46f143e4dce2ac45afdcf4c9"}, - {file = "black-23.10.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:76baba9281e5e5b230c9b7f83a96daf67a95e919c2dfc240d9e6295eab7b9204"}, - {file = "black-23.10.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:a3c2ddb35f71976a4cfeca558848c2f2f89abc86b06e8dd89b5a65c1e6c0f22a"}, - {file = "black-23.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db451a3363b1e765c172c3fd86213a4ce63fb8524c938ebd82919bf2a6e28c6a"}, - {file = "black-23.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:7fb5fc36bb65160df21498d5a3dd330af8b6401be3f25af60c6ebfe23753f747"}, - {file = "black-23.10.0-py3-none-any.whl", hash = "sha256:e223b731a0e025f8ef427dd79d8cd69c167da807f5710add30cdf131f13dd62e"}, - {file = "black-23.10.0.tar.gz", hash = "sha256:31b9f87b277a68d0e99d2905edae08807c007973eaa609da5f0c62def6b7c0bd"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, + {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, + {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, + {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, + {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, + {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, + {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, + {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, + {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, + {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, + {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, + {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, + {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, + {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, + {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, ] [package.dependencies] @@ -954,4 +954,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "de855423c6240007aafe0100a24310672ea9414fff57c4a664803ad2a1acaf7d" +content-hash = "c80bfbecc09f45c60cf3287f16e6016a8229f84de95a95e92e2b55471f83014c" diff --git a/pyproject.toml b/pyproject.toml index ef9cac59..d2cc614f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<12.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] -black = "^23.10.0" +black = "^23.10.1" mypy = "^1.6" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From b1e09994da6fc78834870fa499ec24be51f6a332 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 09:53:09 -0700 Subject: [PATCH 305/448] Bump orjson from 3.9.9 to 3.9.10 (#547) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.9 to 3.9.10. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.9...3.9.10) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 104 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/poetry.lock b/poetry.lock index 46dbf7f6..eddc0512 100644 --- a/poetry.lock +++ b/poetry.lock @@ -379,61 +379,61 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.9" +version = "3.9.10" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f28090060a31f4d11221f9ba48b2273b0d04b702f4dcaa197c38c64ce639cc51"}, - {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8038ba245d0c0a6337cfb6747ea0c51fe18b0cf1a4bc943d530fd66799fae33d"}, - {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:543b36df56db195739c70d645ecd43e49b44d5ead5f8f645d2782af118249b37"}, - {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e7877256b5092f1e4e48fc0f1004728dc6901e7a4ffaa4acb0a9578610aa4ce"}, - {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b83e0d8ba4ca88b894c3e00efc59fe6d53d9ffb5dbbb79d437a466fc1a513d"}, - {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef06431f021453a47a9abb7f7853f04f031d31fbdfe1cc83e3c6aadde502cce"}, - {file = "orjson-3.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0a1a4d9e64597e550428ba091e51a4bcddc7a335c8f9297effbfa67078972b5c"}, - {file = "orjson-3.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:879d2d1f6085c9c0831cec6716c63aaa89e41d8e036cabb19a315498c173fcc6"}, - {file = "orjson-3.9.9-cp310-none-win32.whl", hash = "sha256:d3f56e41bc79d30fdf077073072f2377d2ebf0b946b01f2009ab58b08907bc28"}, - {file = "orjson-3.9.9-cp310-none-win_amd64.whl", hash = "sha256:ab7bae2b8bf17620ed381e4101aeeb64b3ba2a45fc74c7617c633a923cb0f169"}, - {file = "orjson-3.9.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:31d676bc236f6e919d100fb85d0a99812cff1ebffaa58106eaaec9399693e227"}, - {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:678ffb5c0a6b1518b149cc328c610615d70d9297e351e12c01d0beed5d65360f"}, - {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71b0cc21f2c324747bc77c35161e0438e3b5e72db6d3b515310457aba743f7f"}, - {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae72621f216d1d990468291b1ec153e1b46e0ed188a86d54e0941f3dabd09ee8"}, - {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:512e5a41af008e76451f5a344941d61f48dddcf7d7ddd3073deb555de64596a6"}, - {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f89dc338a12f4357f5bf1b098d3dea6072fb0b643fd35fec556f4941b31ae27"}, - {file = "orjson-3.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:957a45fb201c61b78bcf655a16afbe8a36c2c27f18a998bd6b5d8a35e358d4ad"}, - {file = "orjson-3.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1c01cf4b8e00c7e98a0a7cf606a30a26c32adf2560be2d7d5d6766d6f474b31"}, - {file = "orjson-3.9.9-cp311-none-win32.whl", hash = "sha256:397a185e5dd7f8ebe88a063fe13e34d61d394ebb8c70a443cee7661b9c89bda7"}, - {file = "orjson-3.9.9-cp311-none-win_amd64.whl", hash = "sha256:24301f2d99d670ded4fb5e2f87643bc7428a54ba49176e38deb2887e42fe82fb"}, - {file = "orjson-3.9.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bd55ea5cce3addc03f8fb0705be0cfed63b048acc4f20914ce5e1375b15a293b"}, - {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b28c1a65cd13fff5958ab8b350f0921121691464a7a1752936b06ed25c0c7b6e"}, - {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b97a67c47840467ccf116136450c50b6ed4e16a8919c81a4b4faef71e0a2b3f4"}, - {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75b805549cbbcb963e9c9068f1a05abd0ea4c34edc81f8d8ef2edb7e139e5b0f"}, - {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5424ecbafe57b2de30d3b5736c5d5835064d522185516a372eea069b92786ba6"}, - {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d2cd6ef4726ef1b8c63e30d8287225a383dbd1de3424d287b37c1906d8d2855"}, - {file = "orjson-3.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c959550e0705dc9f59de8fca1a316da0d9b115991806b217c82931ac81d75f74"}, - {file = "orjson-3.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ece2d8ed4c34903e7f1b64fb1e448a00e919a4cdb104fc713ad34b055b665fca"}, - {file = "orjson-3.9.9-cp312-none-win_amd64.whl", hash = "sha256:f708ca623287186e5876256cb30599308bce9b2757f90d917b7186de54ce6547"}, - {file = "orjson-3.9.9-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:335406231f9247f985df045f0c0c8f6b6d5d6b3ff17b41a57c1e8ef1a31b4d04"}, - {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d9b5440a5d215d9e1cfd4aee35fd4101a8b8ceb8329f549c16e3894ed9f18b5"}, - {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e98ca450cb4fb176dd572ce28c6623de6923752c70556be4ef79764505320acb"}, - {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3bf6ca6bce22eb89dd0650ef49c77341440def966abcb7a2d01de8453df083a"}, - {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb50d869b3c97c7c5187eda3759e8eb15deb1271d694bc5d6ba7040db9e29036"}, - {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fcf06c69ccc78e32d9f28aa382ab2ab08bf54b696dbe00ee566808fdf05da7d"}, - {file = "orjson-3.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9a4402e7df1b5c9a4c71c7892e1c8f43f642371d13c73242bda5964be6231f95"}, - {file = "orjson-3.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b20becf50d4aec7114dc902b58d85c6431b3a59b04caa977e6ce67b6fee0e159"}, - {file = "orjson-3.9.9-cp38-none-win32.whl", hash = "sha256:1f352117eccac268a59fedac884b0518347f5e2b55b9f650c2463dd1e732eb61"}, - {file = "orjson-3.9.9-cp38-none-win_amd64.whl", hash = "sha256:c4eb31a8e8a5e1d9af5aa9e247c2a52ad5cf7e968aaa9aaefdff98cfcc7f2e37"}, - {file = "orjson-3.9.9-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4a308aeac326c2bafbca9abbae1e1fcf682b06e78a54dad0347b760525838d85"}, - {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e159b97f5676dcdac0d0f75ec856ef5851707f61d262851eb41a30e8fadad7c9"}, - {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f692e7aabad92fa0fff5b13a846fb586b02109475652207ec96733a085019d80"}, - {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cffb77cf0cd3cbf20eb603f932e0dde51b45134bdd2d439c9f57924581bb395b"}, - {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c63eca397127ebf46b59c9c1fb77b30dd7a8fc808ac385e7a58a7e64bae6e106"}, - {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f0c024a75e8ba5d9101facb4fb5a028cdabe3cdfe081534f2a9de0d5062af2"}, - {file = "orjson-3.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8cba20c9815c2a003b8ca4429b0ad4aa87cb6649af41365821249f0fd397148e"}, - {file = "orjson-3.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:906cac73b7818c20cf0f6a7dde5a6f009c52aecc318416c7af5ea37f15ca7e66"}, - {file = "orjson-3.9.9-cp39-none-win32.whl", hash = "sha256:50232572dd300c49f134838c8e7e0917f29a91f97dbd608d23f2895248464b7f"}, - {file = "orjson-3.9.9-cp39-none-win_amd64.whl", hash = "sha256:920814e02e3dd7af12f0262bbc18b9fe353f75a0d0c237f6a67d270da1a1bb44"}, - {file = "orjson-3.9.9.tar.gz", hash = "sha256:02e693843c2959befdd82d1ebae8b05ed12d1cb821605d5f9fe9f98ca5c9fd2b"}, + {file = "orjson-3.9.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c18a4da2f50050a03d1da5317388ef84a16013302a5281d6f64e4a3f406aabc4"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5148bab4d71f58948c7c39d12b14a9005b6ab35a0bdf317a8ade9a9e4d9d0bd5"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cf7837c3b11a2dfb589f8530b3cff2bd0307ace4c301e8997e95c7468c1378e"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c62b6fa2961a1dcc51ebe88771be5319a93fd89bd247c9ddf732bc250507bc2b"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deeb3922a7a804755bbe6b5be9b312e746137a03600f488290318936c1a2d4dc"}, + {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1234dc92d011d3554d929b6cf058ac4a24d188d97be5e04355f1b9223e98bbe9"}, + {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:06ad5543217e0e46fd7ab7ea45d506c76f878b87b1b4e369006bdb01acc05a83"}, + {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fd72fab7bddce46c6826994ce1e7de145ae1e9e106ebb8eb9ce1393ca01444d"}, + {file = "orjson-3.9.10-cp310-none-win32.whl", hash = "sha256:b5b7d4a44cc0e6ff98da5d56cde794385bdd212a86563ac321ca64d7f80c80d1"}, + {file = "orjson-3.9.10-cp310-none-win_amd64.whl", hash = "sha256:61804231099214e2f84998316f3238c4c2c4aaec302df12b21a64d72e2a135c7"}, + {file = "orjson-3.9.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca"}, + {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb"}, + {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499"}, + {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3"}, + {file = "orjson-3.9.10-cp311-none-win32.whl", hash = "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8"}, + {file = "orjson-3.9.10-cp311-none-win_amd64.whl", hash = "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616"}, + {file = "orjson-3.9.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d"}, + {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d"}, + {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921"}, + {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca"}, + {file = "orjson-3.9.10-cp312-none-win_amd64.whl", hash = "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d"}, + {file = "orjson-3.9.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8b9ba0ccd5a7f4219e67fbbe25e6b4a46ceef783c42af7dbc1da548eb28b6531"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e2ecd1d349e62e3960695214f40939bbfdcaeaaa62ccc638f8e651cf0970e5f"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f433be3b3f4c66016d5a20e5b4444ef833a1f802ced13a2d852c637f69729c1"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4689270c35d4bb3102e103ac43c3f0b76b169760aff8bcf2d401a3e0e58cdb7f"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd176f528a8151a6efc5359b853ba3cc0e82d4cd1fab9c1300c5d957dc8f48c"}, + {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2ce5ea4f71681623f04e2b7dadede3c7435dfb5e5e2d1d0ec25b35530e277b"}, + {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:49f8ad582da6e8d2cf663c4ba5bf9f83cc052570a3a767487fec6af839b0e777"}, + {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a11b4b1a8415f105d989876a19b173f6cdc89ca13855ccc67c18efbd7cbd1f8"}, + {file = "orjson-3.9.10-cp38-none-win32.whl", hash = "sha256:a353bf1f565ed27ba71a419b2cd3db9d6151da426b61b289b6ba1422a702e643"}, + {file = "orjson-3.9.10-cp38-none-win_amd64.whl", hash = "sha256:e28a50b5be854e18d54f75ef1bb13e1abf4bc650ab9d635e4258c58e71eb6ad5"}, + {file = "orjson-3.9.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ee5926746232f627a3be1cc175b2cfad24d0170d520361f4ce3fa2fd83f09e1d"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a73160e823151f33cdc05fe2cea557c5ef12fdf276ce29bb4f1c571c8368a60"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c338ed69ad0b8f8f8920c13f529889fe0771abbb46550013e3c3d01e5174deef"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5869e8e130e99687d9e4be835116c4ebd83ca92e52e55810962446d841aba8de"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2c1e559d96a7f94a4f581e2a32d6d610df5840881a8cba8f25e446f4d792df3"}, + {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a3a3a72c9811b56adf8bcc829b010163bb2fc308877e50e9910c9357e78521"}, + {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f8fb7f5ecf4f6355683ac6881fd64b5bb2b8a60e3ccde6ff799e48791d8f864"}, + {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c943b35ecdf7123b2d81d225397efddf0bce2e81db2f3ae633ead38e85cd5ade"}, + {file = "orjson-3.9.10-cp39-none-win32.whl", hash = "sha256:fb0b361d73f6b8eeceba47cd37070b5e6c9de5beaeaa63a1cb35c7e1a73ef088"}, + {file = "orjson-3.9.10-cp39-none-win_amd64.whl", hash = "sha256:b90f340cb6397ec7a854157fac03f0c82b744abdd1c0941a024c3c29d1340aff"}, + {file = "orjson-3.9.10.tar.gz", hash = "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1"}, ] [[package]] @@ -954,4 +954,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "c80bfbecc09f45c60cf3287f16e6016a8229f84de95a95e92e2b55471f83014c" +content-hash = "0e4b3ab3e92b9ddc6ae0d1615a25c6aec0f7691de96e10a7154ddf3d9db040cc" diff --git a/pyproject.toml b/pyproject.toml index d2cc614f..e232efaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.24.0" types-certifi = "^2021.10.8" types-setuptools = "^68.2.0" pook = "^1.1.1" -orjson = "^3.9.9" +orjson = "^3.9.10" [build-system] requires = ["poetry-core>=1.0.0"] From 55fe883cf6b70bb91d07acb7dfb4ebd41045309c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 10:00:23 -0700 Subject: [PATCH 306/448] Bump websockets from 11.0.3 to 12.0 (#544) Bumps [websockets](https://github.com/python-websockets/websockets) from 11.0.3 to 12.0. - [Release notes](https://github.com/python-websockets/websockets/releases) - [Commits](https://github.com/python-websockets/websockets/compare/11.0.3...12.0) --- updated-dependencies: - dependency-name: websockets dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 148 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 76 insertions(+), 74 deletions(-) diff --git a/poetry.lock b/poetry.lock index eddc0512..8f174a81 100644 --- a/poetry.lock +++ b/poetry.lock @@ -848,81 +848,83 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "websockets" -version = "11.0.3" +version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, ] [[package]] @@ -954,4 +956,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0e4b3ab3e92b9ddc6ae0d1615a25c6aec0f7691de96e10a7154ddf3d9db040cc" +content-hash = "397d2f882124755cb4026fdf01d41d0ad2c205f1021bc277d3925bf085016eeb" diff --git a/pyproject.toml b/pyproject.toml index e232efaa..91c3e4f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ packages = [ [tool.poetry.dependencies] python = "^3.8" urllib3 = "^1.26.9,<2.0" -websockets = ">=10.3,<12.0" +websockets = ">=10.3,<13.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] From a69c26c5e419687a64c223b7e5afb343286f609c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Nov 2023 09:31:02 -0800 Subject: [PATCH 307/448] Bump sphinx-autodoc-typehints from 1.24.0 to 1.24.1 (#549) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.24.0 to 1.24.1. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.24.0...1.24.1) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 14 +++++++------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8f174a81..416ba76e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -636,22 +636,22 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.24.0" +version = "1.24.1" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false python-versions = ">=3.8" files = [ - {file = "sphinx_autodoc_typehints-1.24.0-py3-none-any.whl", hash = "sha256:6a73c0c61a9144ce2ed5ef2bed99d615254e5005c1cc32002017d72d69fb70e6"}, - {file = "sphinx_autodoc_typehints-1.24.0.tar.gz", hash = "sha256:94e440066941bb237704bb880785e2d05e8ae5406c88674feefbb938ad0dc6af"}, + {file = "sphinx_autodoc_typehints-1.24.1-py3-none-any.whl", hash = "sha256:4cc16c5545f2bf896ca52a854babefe3d8baeaaa033d13a7f179ac1d9feb02d5"}, + {file = "sphinx_autodoc_typehints-1.24.1.tar.gz", hash = "sha256:06683a2b76c3c7b1931b75e40e0211866fbb50ba4c4e802d0901d9b4e849add2"}, ] [package.dependencies] -sphinx = ">=7.0.1" +sphinx = ">=7.1.2" [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)"] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)"] numpy = ["nptyping (>=2.5)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.6.3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.7.1)"] [[package]] name = "sphinx-rtd-theme" @@ -956,4 +956,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "397d2f882124755cb4026fdf01d41d0ad2c205f1021bc277d3925bf085016eeb" +content-hash = "1e975c5e917bae78520eac2af6d6b452ca195cf5fb7ce6ab6c6510c7955ed422" diff --git a/pyproject.toml b/pyproject.toml index 91c3e4f3..a2fadcf1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^1.3.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.24.0" +sphinx-autodoc-typehints = "^1.24.1" types-certifi = "^2021.10.8" types-setuptools = "^68.2.0" pook = "^1.1.1" From 23352c88705635c5e2b2edddada90f3a0d2d101d Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 7 Nov 2023 13:17:10 -0800 Subject: [PATCH 308/448] Added params to technical indicators (#550) * Added params to technical indicators * Fix lint --- examples/rest/crypto-technical_indicators_ema.py | 8 +++++++- examples/rest/crypto-technical_indicators_macd.py | 10 +++++++++- examples/rest/crypto-technical_indicators_rsi.py | 8 +++++++- examples/rest/crypto-technical_indicators_sma.py | 8 +++++++- examples/rest/forex-technical_indicators_ema.py | 8 +++++++- examples/rest/forex-technical_indicators_macd.py | 10 +++++++++- examples/rest/forex-technical_indicators_rsi.py | 8 +++++++- examples/rest/forex-technical_indicators_sma.py | 8 +++++++- examples/rest/indices-technical_indicators_ema.py | 8 +++++++- examples/rest/indices-technical_indicators_macd.py | 10 +++++++++- examples/rest/indices-technical_indicators_rsi.py | 8 +++++++- examples/rest/indices-technical_indicators_sma.py | 8 +++++++- examples/rest/stocks-technical_indicators_ema.py | 8 +++++++- examples/rest/stocks-technical_indicators_macd.py | 10 +++++++++- examples/rest/stocks-technical_indicators_rsi.py | 8 +++++++- examples/rest/stocks-technical_indicators_sma.py | 8 +++++++- 16 files changed, 120 insertions(+), 16 deletions(-) diff --git a/examples/rest/crypto-technical_indicators_ema.py b/examples/rest/crypto-technical_indicators_ema.py index edd45dee..49958006 100644 --- a/examples/rest/crypto-technical_indicators_ema.py +++ b/examples/rest/crypto-technical_indicators_ema.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -ema = client.get_ema("X:BTCUSD") +ema = client.get_ema( + ticker="X:BTCUSD", + timespan="day", + window=50, + series_type="close", +) + print(ema) diff --git a/examples/rest/crypto-technical_indicators_macd.py b/examples/rest/crypto-technical_indicators_macd.py index d1f60337..ee168d0f 100644 --- a/examples/rest/crypto-technical_indicators_macd.py +++ b/examples/rest/crypto-technical_indicators_macd.py @@ -7,5 +7,13 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -macd = client.get_macd("X:BTCUSD") +macd = client.get_macd( + ticker="X:BTCUSD", + timespan="day", + short_window=12, + long_window=26, + signal_window=9, + series_type="close", +) + print(macd) diff --git a/examples/rest/crypto-technical_indicators_rsi.py b/examples/rest/crypto-technical_indicators_rsi.py index 38423590..1eb3c01f 100644 --- a/examples/rest/crypto-technical_indicators_rsi.py +++ b/examples/rest/crypto-technical_indicators_rsi.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -rsi = client.get_rsi("X:BTCUSD") +rsi = client.get_rsi( + ticker="X:BTCUSD", + timespan="day", + window=14, + series_type="close", +) + print(rsi) diff --git a/examples/rest/crypto-technical_indicators_sma.py b/examples/rest/crypto-technical_indicators_sma.py index f343ff7b..e8d503fc 100644 --- a/examples/rest/crypto-technical_indicators_sma.py +++ b/examples/rest/crypto-technical_indicators_sma.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -sma = client.get_sma("X:BTCUSD") +sma = client.get_sma( + ticker="X:BTCUSD", + timespan="day", + window=50, + series_type="close", +) + print(sma) diff --git a/examples/rest/forex-technical_indicators_ema.py b/examples/rest/forex-technical_indicators_ema.py index ab927dcb..ba67ee87 100644 --- a/examples/rest/forex-technical_indicators_ema.py +++ b/examples/rest/forex-technical_indicators_ema.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -ema = client.get_ema("C:EURUSD") +ema = client.get_ema( + ticker="C:EURUSD", + timespan="day", + window=50, + series_type="close", +) + print(ema) diff --git a/examples/rest/forex-technical_indicators_macd.py b/examples/rest/forex-technical_indicators_macd.py index 2613f61a..ee32c4b1 100644 --- a/examples/rest/forex-technical_indicators_macd.py +++ b/examples/rest/forex-technical_indicators_macd.py @@ -7,5 +7,13 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -macd = client.get_macd("C:EURUSD") +macd = client.get_macd( + ticker="C:EURUSD", + timespan="day", + short_window=12, + long_window=26, + signal_window=9, + series_type="close", +) + print(macd) diff --git a/examples/rest/forex-technical_indicators_rsi.py b/examples/rest/forex-technical_indicators_rsi.py index 0b3001ac..a63185d4 100644 --- a/examples/rest/forex-technical_indicators_rsi.py +++ b/examples/rest/forex-technical_indicators_rsi.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -rsi = client.get_rsi("C:EURUSD") +rsi = client.get_rsi( + ticker="C:EURUSD", + timespan="day", + window=14, + series_type="close", +) + print(rsi) diff --git a/examples/rest/forex-technical_indicators_sma.py b/examples/rest/forex-technical_indicators_sma.py index 22389b63..cd4aab2f 100644 --- a/examples/rest/forex-technical_indicators_sma.py +++ b/examples/rest/forex-technical_indicators_sma.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -sma = client.get_sma("C:EURUSD") +sma = client.get_sma( + ticker="C:EURUSD", + timespan="day", + window=50, + series_type="close", +) + print(sma) diff --git a/examples/rest/indices-technical_indicators_ema.py b/examples/rest/indices-technical_indicators_ema.py index bbf9bc39..bacf9e85 100644 --- a/examples/rest/indices-technical_indicators_ema.py +++ b/examples/rest/indices-technical_indicators_ema.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -ema = client.get_ema("I:SPX") +ema = client.get_ema( + ticker="I:SPX", + timespan="day", + window=50, + series_type="close", +) + print(ema) diff --git a/examples/rest/indices-technical_indicators_macd.py b/examples/rest/indices-technical_indicators_macd.py index 751258aa..bb3950d1 100644 --- a/examples/rest/indices-technical_indicators_macd.py +++ b/examples/rest/indices-technical_indicators_macd.py @@ -7,5 +7,13 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -macd = client.get_macd("I:SPX") +macd = client.get_macd( + ticker="I:SPX", + timespan="day", + short_window=12, + long_window=26, + signal_window=9, + series_type="close", +) + print(macd) diff --git a/examples/rest/indices-technical_indicators_rsi.py b/examples/rest/indices-technical_indicators_rsi.py index 93f1a16b..ec5ca4d6 100644 --- a/examples/rest/indices-technical_indicators_rsi.py +++ b/examples/rest/indices-technical_indicators_rsi.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -rsi = client.get_rsi("I:SPX") +rsi = client.get_rsi( + ticker="I:SPX", + timespan="day", + window=14, + series_type="close", +) + print(rsi) diff --git a/examples/rest/indices-technical_indicators_sma.py b/examples/rest/indices-technical_indicators_sma.py index 5343e54d..1dfa7b7f 100644 --- a/examples/rest/indices-technical_indicators_sma.py +++ b/examples/rest/indices-technical_indicators_sma.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -sma = client.get_sma("I:SPX") +sma = client.get_sma( + ticker="I:SPX", + timespan="day", + window=50, + series_type="close", +) + print(sma) diff --git a/examples/rest/stocks-technical_indicators_ema.py b/examples/rest/stocks-technical_indicators_ema.py index 0b87d48d..20092d7e 100644 --- a/examples/rest/stocks-technical_indicators_ema.py +++ b/examples/rest/stocks-technical_indicators_ema.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -ema = client.get_ema("AAPL") +ema = client.get_ema( + ticker="AAPL", + timespan="day", + window=50, + series_type="close", +) + print(ema) diff --git a/examples/rest/stocks-technical_indicators_macd.py b/examples/rest/stocks-technical_indicators_macd.py index 45221926..187e8ae6 100644 --- a/examples/rest/stocks-technical_indicators_macd.py +++ b/examples/rest/stocks-technical_indicators_macd.py @@ -7,5 +7,13 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -macd = client.get_macd("AAPL") +macd = client.get_macd( + ticker="AAPL", + timespan="day", + short_window=12, + long_window=26, + signal_window=9, + series_type="close", +) + print(macd) diff --git a/examples/rest/stocks-technical_indicators_rsi.py b/examples/rest/stocks-technical_indicators_rsi.py index 4fd62d29..a69d6ae3 100644 --- a/examples/rest/stocks-technical_indicators_rsi.py +++ b/examples/rest/stocks-technical_indicators_rsi.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -rsi = client.get_rsi("AAPL") +rsi = client.get_rsi( + ticker="AAPL", + timespan="day", + window=14, + series_type="close", +) + print(rsi) diff --git a/examples/rest/stocks-technical_indicators_sma.py b/examples/rest/stocks-technical_indicators_sma.py index bfc0796f..41a9c7c4 100644 --- a/examples/rest/stocks-technical_indicators_sma.py +++ b/examples/rest/stocks-technical_indicators_sma.py @@ -7,5 +7,11 @@ # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used -sma = client.get_sma("AAPL") +sma = client.get_sma( + ticker="AAPL", + timespan="day", + window=50, + series_type="close", +) + print(sma) From 582769bb1309766f7762701524b4a708f2629392 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 08:19:06 -0800 Subject: [PATCH 309/448] Bump black from 23.10.1 to 23.11.0 (#553) Bumps [black](https://github.com/psf/black) from 23.10.1 to 23.11.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.10.1...23.11.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 40 ++++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 416ba76e..f670775d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,29 +44,29 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "23.10.1" +version = "23.11.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.10.1-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:ec3f8e6234c4e46ff9e16d9ae96f4ef69fa328bb4ad08198c8cee45bb1f08c69"}, - {file = "black-23.10.1-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:1b917a2aa020ca600483a7b340c165970b26e9029067f019e3755b56e8dd5916"}, - {file = "black-23.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c74de4c77b849e6359c6f01987e94873c707098322b91490d24296f66d067dc"}, - {file = "black-23.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:7b4d10b0f016616a0d93d24a448100adf1699712fb7a4efd0e2c32bbb219b173"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b15b75fc53a2fbcac8a87d3e20f69874d161beef13954747e053bca7a1ce53a0"}, - {file = "black-23.10.1-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:e293e4c2f4a992b980032bbd62df07c1bcff82d6964d6c9496f2cd726e246ace"}, - {file = "black-23.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d56124b7a61d092cb52cce34182a5280e160e6aff3137172a68c2c2c4b76bcb"}, - {file = "black-23.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:3f157a8945a7b2d424da3335f7ace89c14a3b0625e6593d21139c2d8214d55ce"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:cfcce6f0a384d0da692119f2d72d79ed07c7159879d0bb1bb32d2e443382bf3a"}, - {file = "black-23.10.1-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:33d40f5b06be80c1bbce17b173cda17994fbad096ce60eb22054da021bf933d1"}, - {file = "black-23.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:840015166dbdfbc47992871325799fd2dc0dcf9395e401ada6d88fe11498abad"}, - {file = "black-23.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:037e9b4664cafda5f025a1728c50a9e9aedb99a759c89f760bd83730e76ba884"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:7cb5936e686e782fddb1c73f8aa6f459e1ad38a6a7b0e54b403f1f05a1507ee9"}, - {file = "black-23.10.1-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:7670242e90dc129c539e9ca17665e39a146a761e681805c54fbd86015c7c84f7"}, - {file = "black-23.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed45ac9a613fb52dad3b61c8dea2ec9510bf3108d4db88422bacc7d1ba1243d"}, - {file = "black-23.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:6d23d7822140e3fef190734216cefb262521789367fbdc0b3f22af6744058982"}, - {file = "black-23.10.1-py3-none-any.whl", hash = "sha256:d431e6739f727bb2e0495df64a6c7a5310758e87505f5f8cde9ff6c0f2d7e4fe"}, - {file = "black-23.10.1.tar.gz", hash = "sha256:1f8ce316753428ff68749c65a5f7844631aa18c8679dfd3ca9dc1a289979c258"}, + {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, + {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, + {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, + {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, + {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, + {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, + {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, + {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, + {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, + {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, + {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, + {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, + {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, + {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, + {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, + {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, + {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, + {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, ] [package.dependencies] @@ -956,4 +956,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "1e975c5e917bae78520eac2af6d6b452ca195cf5fb7ce6ab6c6510c7955ed422" +content-hash = "f1e8311d281ce591dceb5e4b7288e826166033b86880fba2576b5c8108124d1d" diff --git a/pyproject.toml b/pyproject.toml index a2fadcf1..f1570465 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<13.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] -black = "^23.10.1" +black = "^23.11.0" mypy = "^1.6" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From a05b9df55fee82a3bbbcb0cdc221385c25d67f7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 08:29:09 -0800 Subject: [PATCH 310/448] Bump types-setuptools from 68.2.0.0 to 68.2.0.1 (#556) Bumps [types-setuptools](https://github.com/python/typeshed) from 68.2.0.0 to 68.2.0.1. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index f670775d..cf782e0b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -799,13 +799,13 @@ files = [ [[package]] name = "types-setuptools" -version = "68.2.0.0" +version = "68.2.0.1" description = "Typing stubs for setuptools" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "types-setuptools-68.2.0.0.tar.gz", hash = "sha256:a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"}, - {file = "types_setuptools-68.2.0.0-py3-none-any.whl", hash = "sha256:77edcc843e53f8fc83bb1a840684841f3dc804ec94562623bfa2ea70d5a2ba1b"}, + {file = "types-setuptools-68.2.0.1.tar.gz", hash = "sha256:8f31e8201e7969789e0eb23463b53ebe5f67d92417df4b648a6ea3c357ca4f51"}, + {file = "types_setuptools-68.2.0.1-py3-none-any.whl", hash = "sha256:e9c649559743e9f98c924bec91eae97f3ba208a70686182c3658fd7e81778d37"}, ] [[package]] From e3d4d62450adb6dab0a0e305485e16b6cd595efb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 08:46:58 -0800 Subject: [PATCH 311/448] Bump sphinx-autodoc-typehints from 1.24.1 to 1.25.2 (#554) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.24.1 to 1.25.2. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.24.1...1.25.2) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index cf782e0b..1e577ae6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -636,13 +636,13 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.24.1" +version = "1.25.2" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false python-versions = ">=3.8" files = [ - {file = "sphinx_autodoc_typehints-1.24.1-py3-none-any.whl", hash = "sha256:4cc16c5545f2bf896ca52a854babefe3d8baeaaa033d13a7f179ac1d9feb02d5"}, - {file = "sphinx_autodoc_typehints-1.24.1.tar.gz", hash = "sha256:06683a2b76c3c7b1931b75e40e0211866fbb50ba4c4e802d0901d9b4e849add2"}, + {file = "sphinx_autodoc_typehints-1.25.2-py3-none-any.whl", hash = "sha256:5ed05017d23ad4b937eab3bee9fae9ab0dd63f0b42aa360031f1fad47e47f673"}, + {file = "sphinx_autodoc_typehints-1.25.2.tar.gz", hash = "sha256:3cabc2537e17989b2f92e64a399425c4c8bf561ed73f087bc7414a5003616a50"}, ] [package.dependencies] @@ -956,4 +956,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "f1e8311d281ce591dceb5e4b7288e826166033b86880fba2576b5c8108124d1d" +content-hash = "0ce26a22a125aa1039428c5a5d48acbb3c08edd2d2cb86d217151f503bb32bf0" diff --git a/pyproject.toml b/pyproject.toml index f1570465..272e263b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^1.3.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.24.1" +sphinx-autodoc-typehints = "^1.25.2" types-certifi = "^2021.10.8" types-setuptools = "^68.2.0" pook = "^1.1.1" From dde5fa509ea522dc412c27746d0c68cf64e49302 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 08:55:27 -0800 Subject: [PATCH 312/448] Bump mypy from 1.6.1 to 1.7.0 (#552) Bumps [mypy](https://github.com/python/mypy) from 1.6.1 to 1.7.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.6.1...v1.7.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 59 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1e577ae6..34411bf2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -308,38 +308,38 @@ files = [ [[package]] name = "mypy" -version = "1.6.1" +version = "1.7.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c"}, - {file = "mypy-1.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb"}, - {file = "mypy-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e"}, - {file = "mypy-1.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f"}, - {file = "mypy-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c"}, - {file = "mypy-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5"}, - {file = "mypy-1.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245"}, - {file = "mypy-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183"}, - {file = "mypy-1.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0"}, - {file = "mypy-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7"}, - {file = "mypy-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f"}, - {file = "mypy-1.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660"}, - {file = "mypy-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7"}, - {file = "mypy-1.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71"}, - {file = "mypy-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a"}, - {file = "mypy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169"}, - {file = "mypy-1.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143"}, - {file = "mypy-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46"}, - {file = "mypy-1.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85"}, - {file = "mypy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45"}, - {file = "mypy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208"}, - {file = "mypy-1.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd"}, - {file = "mypy-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332"}, - {file = "mypy-1.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f"}, - {file = "mypy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30"}, - {file = "mypy-1.6.1-py3-none-any.whl", hash = "sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1"}, - {file = "mypy-1.6.1.tar.gz", hash = "sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1"}, + {file = "mypy-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5da84d7bf257fd8f66b4f759a904fd2c5a765f70d8b52dde62b521972a0a2357"}, + {file = "mypy-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a3637c03f4025f6405737570d6cbfa4f1400eb3c649317634d273687a09ffc2f"}, + {file = "mypy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b633f188fc5ae1b6edca39dae566974d7ef4e9aaaae00bc36efe1f855e5173ac"}, + {file = "mypy-1.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d6ed9a3997b90c6f891138e3f83fb8f475c74db4ccaa942a1c7bf99e83a989a1"}, + {file = "mypy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fe46e96ae319df21359c8db77e1aecac8e5949da4773c0274c0ef3d8d1268a9"}, + {file = "mypy-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:df67fbeb666ee8828f675fee724cc2cbd2e4828cc3df56703e02fe6a421b7401"}, + {file = "mypy-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a79cdc12a02eb526d808a32a934c6fe6df07b05f3573d210e41808020aed8b5d"}, + {file = "mypy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f65f385a6f43211effe8c682e8ec3f55d79391f70a201575def73d08db68ead1"}, + {file = "mypy-1.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e81ffd120ee24959b449b647c4b2fbfcf8acf3465e082b8d58fd6c4c2b27e46"}, + {file = "mypy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:f29386804c3577c83d76520abf18cfcd7d68264c7e431c5907d250ab502658ee"}, + {file = "mypy-1.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:87c076c174e2c7ef8ab416c4e252d94c08cd4980a10967754f91571070bf5fbe"}, + {file = "mypy-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cb8d5f6d0fcd9e708bb190b224089e45902cacef6f6915481806b0c77f7786d"}, + {file = "mypy-1.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93e76c2256aa50d9c82a88e2f569232e9862c9982095f6d54e13509f01222fc"}, + {file = "mypy-1.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cddee95dea7990e2215576fae95f6b78a8c12f4c089d7e4367564704e99118d3"}, + {file = "mypy-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d01921dbd691c4061a3e2ecdbfbfad029410c5c2b1ee88946bf45c62c6c91210"}, + {file = "mypy-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:185cff9b9a7fec1f9f7d8352dff8a4c713b2e3eea9c6c4b5ff7f0edf46b91e41"}, + {file = "mypy-1.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7b1e399c47b18feb6f8ad4a3eef3813e28c1e871ea7d4ea5d444b2ac03c418"}, + {file = "mypy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9fe455ad58a20ec68599139ed1113b21f977b536a91b42bef3ffed5cce7391"}, + {file = "mypy-1.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d0fa29919d2e720c8dbaf07d5578f93d7b313c3e9954c8ec05b6d83da592e5d9"}, + {file = "mypy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b53655a295c1ed1af9e96b462a736bf083adba7b314ae775563e3fb4e6795f5"}, + {file = "mypy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1b06b4b109e342f7dccc9efda965fc3970a604db70f8560ddfdee7ef19afb05"}, + {file = "mypy-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf7a2f0a6907f231d5e41adba1a82d7d88cf1f61a70335889412dec99feeb0f8"}, + {file = "mypy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551d4a0cdcbd1d2cccdcc7cb516bb4ae888794929f5b040bb51aae1846062901"}, + {file = "mypy-1.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55d28d7963bef00c330cb6461db80b0b72afe2f3c4e2963c99517cf06454e665"}, + {file = "mypy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:870bd1ffc8a5862e593185a4c169804f2744112b4a7c55b93eb50f48e7a77010"}, + {file = "mypy-1.7.0-py3-none-any.whl", hash = "sha256:96650d9a4c651bc2a4991cf46f100973f656d69edc7faf91844e87fe627f7e96"}, + {file = "mypy-1.7.0.tar.gz", hash = "sha256:1e280b5697202efa698372d2f39e9a6713a0395a756b1c6bd48995f8d72690dc"}, ] [package.dependencies] @@ -350,6 +350,7 @@ typing-extensions = ">=4.1.0" [package.extras] dmypy = ["psutil (>=4.0)"] install-types = ["pip"] +mypyc = ["setuptools (>=50)"] reports = ["lxml"] [[package]] @@ -956,4 +957,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0ce26a22a125aa1039428c5a5d48acbb3c08edd2d2cb86d217151f503bb32bf0" +content-hash = "2188e24f85bd8e25567985ea7c64bb9661684e11c1cc191b3d491f2c8bb4a6b9" diff --git a/pyproject.toml b/pyproject.toml index 272e263b..f06c7aff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] black = "^23.11.0" -mypy = "^1.6" +mypy = "^1.7" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^1.3.0" From e65bf51954815f1c3d3283703e9b3b72ca90a1d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 08:28:55 -0800 Subject: [PATCH 313/448] Bump certifi from 2023.7.22 to 2023.11.17 (#560) Bumps [certifi](https://github.com/certifi/python-certifi) from 2023.7.22 to 2023.11.17. - [Commits](https://github.com/certifi/python-certifi/compare/2023.07.22...2023.11.17) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 34411bf2..cb1c33e3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -86,13 +86,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] From e3f0547998abafe86465fc39815cef3928bdb5f9 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 21 Nov 2023 13:54:25 -0800 Subject: [PATCH 314/448] Add crypto, forex and indices agg sec examples (#557) * Add Forex and Indices Agg Sec examples * Update crypto example * Fix lint --- examples/websocket/crypto.py | 34 ++++++++++++++++++++++++++++++++-- examples/websocket/forex.py | 31 +++++++++++++++++++++++++++++++ examples/websocket/indices.py | 11 +++++++++-- 3 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 examples/websocket/forex.py diff --git a/examples/websocket/crypto.py b/examples/websocket/crypto.py index 37160e81..4fcbc12e 100644 --- a/examples/websocket/crypto.py +++ b/examples/websocket/crypto.py @@ -2,7 +2,37 @@ from polygon.websocket.models import WebSocketMessage, Market from typing import List -c = WebSocketClient(market=Market.Crypto, subscriptions=["XA.*"]) +client = WebSocketClient(market=Market.Crypto) + +# Aggregates (per minute) +client.subscribe("XA.*") # all crypto pair +# client.subscribe("XA.BTC-USD") +# client.subscribe("XA.BTC-EUR") +# client.subscribe("XA.ETH-USD") + +# Aggregates (per second) +# client.subscribe("XAS.*") # all crypto pair +# client.subscribe("XAS.BTC-USD") +# client.subscribe("XAS.BTC-EUR") +# client.subscribe("XAS.ETH-USD") + +# Trades +# client.subscribe("XT.*") # all crypto pair +# client.subscribe("XT.BTC-USD") +# client.subscribe("XT.BTC-EUR") +# client.subscribe("XT.ETH-USD") + +# Quotes +# client.subscribe("XQ.*") # all crypto pair +# client.subscribe("XQ.BTC-USD") +# client.subscribe("XQ.BTC-EUR") +# client.subscribe("XQ.ETH-USD") + +# Level 2 Book +# client.subscribe("XL2.*") # all crypto pair +# client.subscribe("XL2.BTC-USD") +# client.subscribe("XL2.BTC-EUR") +# client.subscribe("XL2.ETH-USD") def handle_msg(msgs: List[WebSocketMessage]): @@ -10,4 +40,4 @@ def handle_msg(msgs: List[WebSocketMessage]): print(m) -c.run(handle_msg) +client.run(handle_msg) diff --git a/examples/websocket/forex.py b/examples/websocket/forex.py new file mode 100644 index 00000000..d775beab --- /dev/null +++ b/examples/websocket/forex.py @@ -0,0 +1,31 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, Market +from typing import List + +client = WebSocketClient(market=Market.Forex) + +# Aggregates (per minute) +# client.subscribe("CA.*") # all forex pair +client.subscribe("CA.USD/CAD") +client.subscribe("CA.USD/EUR") +client.subscribe("CA.USD/AUD") + +# Aggregates (per second) +# client.subscribe("CAS.*") # all forex pair +# client.subscribe("CAS.USD/CAD") +# client.subscribe("CAS.USD/EUR") +# client.subscribe("CAS.USD/AUD") + +# Quotes +# client.subscribe("C.*") # all forex pair +# client.subscribe("C.USD/CAD") +# client.subscribe("C.USD/EUR") +# client.subscribe("C.USD/AUD") + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + +client.run(handle_msg) diff --git a/examples/websocket/indices.py b/examples/websocket/indices.py index 83ecf27b..1ddcb466 100644 --- a/examples/websocket/indices.py +++ b/examples/websocket/indices.py @@ -4,14 +4,21 @@ client = WebSocketClient(market=Market.Indices) -# aggregates (per minute) +# Aggregates (per minute) # client.subscribe("AM.*") # all aggregates client.subscribe("AM.I:SPX") # Standard & Poor's 500 client.subscribe("AM.I:DJI") # Dow Jones Industrial Average client.subscribe("AM.I:NDX") # Nasdaq-100 client.subscribe("AM.I:VIX") # Volatility Index -# single index +# Aggregates (per second) +# client.subscribe("A.*") # all aggregates +# client.subscribe("A.I:SPX") # Standard & Poor's 500 +# client.subscribe("A.I:DJI") # Dow Jones Industrial Average +# client.subscribe("A.I:NDX") # Nasdaq-100 +# client.subscribe("A.I:VIX") # Volatility Index + +# Single index # client.subscribe("V.*") # all tickers # client.subscribe("V.I:SPX") # Standard & Poor's 500 # client.subscribe("V.I:DJI") # Dow Jones Industrial Average From 935dddbbab1798e91ecc7988116d8df2af625786 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 22 Nov 2023 08:44:39 -0800 Subject: [PATCH 315/448] Updated spec with taxonomies support (#562) --- .polygon/rest.json | 368 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 325 insertions(+), 43 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index a8bf65b0..198f02f7 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -12619,7 +12619,8 @@ }, "/v1/marketstatus/now": { "get": { - "description": "Get the current trading status of the exchanges and overall financial markets.\n", + "description": "Get the current trading status of the exchanges and overall financial markets.", + "operationId": "GetMarketStatus", "responses": { "200": { "content": { @@ -12637,13 +12638,16 @@ "otc": "closed" }, "market": "extended-hours", - "serverTime": "2020-11-10T22:37:37.000Z" + "serverTime": "2020-11-10T17:37:37-05:00" }, "schema": { "properties": { "afterHours": { "description": "Whether or not the market is in post-market hours.", - "type": "boolean" + "type": "boolean", + "x-polygon-go-type": { + "name": "*bool" + } }, "currencies": { "properties": { @@ -12656,11 +12660,17 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Currencies" + } }, "earlyHours": { "description": "Whether or not the market is in pre-market hours.", - "type": "boolean" + "type": "boolean", + "x-polygon-go-type": { + "name": "*bool" + } }, "exchanges": { "properties": { @@ -12677,15 +12687,60 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "Exchanges" + } + }, + "indicesGroups": { + "properties": { + "cccy": { + "description": "The status of Cboe Streaming Market Indices Cryptocurrency (\"CCCY\") indices trading hours.", + "type": "string" + }, + "dow_jones": { + "description": "The status of Dow Jones indices trading hours", + "type": "string" + }, + "ftse_russell": { + "description": "The status of Financial Times Stock Exchange Group (\"FTSE\") Russell indices trading hours.", + "type": "string" + }, + "msci": { + "description": "The status of Morgan Stanley Capital International (\"MSCI\") indices trading hours.", + "type": "string" + }, + "mstar": { + "description": "The status of Morningstar (\"MSTAR\") indices trading hours.", + "type": "string" + }, + "mstarc": { + "description": "The status of Morningstar Customer (\"MSTARC\") indices trading hours." + }, + "nasdaq": { + "description": "The status of National Association of Securities Dealers Automated Quotations (\"Nasdaq\") indices trading hours.", + "type": "string" + }, + "s_and_p": { + "description": "The status of Standard & Poors's (\"S&P\") indices trading hours.", + "type": "string" + }, + "societe_generale": { + "description": "The status of Societe Generale indices trading hours.", + "type": "string" + } + }, + "type": "object", + "x-polygon-go-type": { + "name": "IndicesGroups" + } }, "market": { "description": "The status of the market as a whole.", "type": "string" }, "serverTime": { - "description": "The current time of the server.", - "format": "date-time", + "description": "The current time of the server, returned as a date-time in RFC3339 format.", "type": "string" } }, @@ -12693,16 +12748,7 @@ } } }, - "description": "Status of the market and each exchange" - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" - }, - "404": { - "description": "The specified resource was not found" - }, - "409": { - "description": "Parameter is invalid or incorrect." + "description": "OK" } }, "summary": "Market Status", @@ -12717,33 +12763,34 @@ }, "/v1/marketstatus/upcoming": { "get": { - "description": "Get upcoming market holidays and their open/close times.\n", + "description": "Get upcoming market holidays and their open/close times.", + "operationId": "GetMarketHolidays", "responses": { "200": { "content": { "application/json": { "example": [ { - "date": "2020-11-26T00:00:00.000Z", + "date": "2020-11-26", "exchange": "NYSE", "name": "Thanksgiving", "status": "closed" }, { - "date": "2020-11-26T00:00:00.000Z", + "date": "2020-11-26", "exchange": "NASDAQ", "name": "Thanksgiving", "status": "closed" }, { - "date": "2020-11-26T00:00:00.000Z", + "date": "2020-11-26", "exchange": "OTC", "name": "Thanksgiving", "status": "closed" }, { "close": "2020-11-27T18:00:00.000Z", - "date": "2020-11-27T00:00:00.000Z", + "date": "2020-11-27", "exchange": "NASDAQ", "name": "Thanksgiving", "open": "2020-11-27T14:30:00.000Z", @@ -12751,7 +12798,7 @@ }, { "close": "2020-11-27T18:00:00.000Z", - "date": "2020-11-27T00:00:00.000Z", + "date": "2020-11-27", "exchange": "NYSE", "name": "Thanksgiving", "open": "2020-11-27T14:30:00.000Z", @@ -12763,12 +12810,10 @@ "properties": { "close": { "description": "The market close time on the holiday (if it's not closed).", - "format": "date-time", "type": "string" }, "date": { "description": "The date of the holiday.", - "format": "date", "type": "string" }, "exchange": { @@ -12781,7 +12826,6 @@ }, "open": { "description": "The market open time on the holiday (if it's not closed).", - "format": "date-time", "type": "string" }, "status": { @@ -12789,22 +12833,16 @@ "type": "string" } }, - "type": "object" + "type": "object", + "x-polygon-go-type": { + "name": "MarketHoliday" + } }, "type": "array" } } }, - "description": "Holidays for each market in the near future." - }, - "401": { - "description": "Unauthorized - Check our API Key and account status" - }, - "404": { - "description": "The specified resource was not found" - }, - "409": { - "description": "Parameter is invalid or incorrect." + "description": "OK" } }, "summary": "Market Holidays", @@ -26725,6 +26763,7 @@ "strike_price": 5, "underlying_ticker": "NCLH" }, + "fmv": 0.05, "greeks": { "delta": 0.5520187372272933, "gamma": 0.00706756515659829, @@ -26781,6 +26820,7 @@ } }, { + "fmv": 0.05, "last_quote": { "ask": 21.25, "ask_exchange": 300, @@ -26899,8 +26939,12 @@ "description": "The error while looking for this ticker.", "type": "string" }, + "fmv": { + "description": "Fair market value is only available on Business plans. It's it our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security.\nFor more information, contact us.", + "type": "number" + }, "greeks": { - "description": "The greeks for this contract. \nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", + "description": "The greeks for this contract.\nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", "properties": { "delta": { "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", @@ -27007,7 +27051,7 @@ } }, "last_trade": { - "description": "The most recent quote for this contract. This is only returned if your current plan includes quotes.", + "description": "The most recent quote for this contract. This is only returned if your current plan includes trades.", "properties": { "conditions": { "description": "A list of condition codes.", @@ -27189,7 +27233,8 @@ "stocks", "options", "fx", - "crypto" + "crypto", + "indices" ], "type": "string" }, @@ -27796,6 +27841,7 @@ "strike_price": 150, "ticker": "O:AAPL211022C000150000" }, + "fmv": 0.05, "greeks": { "delta": 1, "gamma": 0, @@ -27983,8 +28029,12 @@ "name": "Details" } }, + "fmv": { + "description": "Fair market value is only available on Business plans. It's it our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security.\nFor more information, contact us.", + "type": "number" + }, "greeks": { - "description": "The greeks for this contract. \nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", + "description": "The greeks for this contract.\nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", "properties": { "delta": { "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", @@ -28326,6 +28376,7 @@ "strike_price": 150, "ticker": "O:AAPL230616C00150000" }, + "fmv": 0.05, "greeks": { "delta": 0.5520187372272933, "gamma": 0.00706756515659829, @@ -28514,8 +28565,12 @@ "name": "Details" } }, + "fmv": { + "description": "Fair market value is only available on Business plans. It's it our proprietary algorithm to generate a real-time, accurate, fair market value of a tradable security.\nFor more information, contact us.", + "type": "number" + }, "greeks": { - "description": "The greeks for this contract. \nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", + "description": "The greeks for this contract.\nThere are certain circumstances where greeks will not be returned, such as options contracts that are deep in the money.\nSee this article for more information.", "properties": { "delta": { "description": "The change in the option's price per $0.01 increment in the price of the underlying asset.", @@ -30266,6 +30321,233 @@ } } }, + "/vX/reference/tickers/taxonomies": { + "get": { + "description": "Retrieve taxonomy classifications for one or more tickers.", + "operationId": "ListTickerTaxonomyClassifications", + "parameters": [ + { + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + }, + "x-polygon-filter-field": { + "anyOf": { + "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.\n", + "enabled": true, + "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD,I:SPX" + }, + "range": true, + "type": "string" + } + }, + { + "description": "Filter by taxonomy category.", + "in": "query", + "name": "category", + "schema": { + "type": "string" + } + }, + { + "description": "Filter by taxonomy tag. Each category has a set of associated tags.", + "in": "query", + "name": "tag", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.gte", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.gt", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.lte", + "schema": { + "type": "string" + } + }, + { + "description": "Range by ticker.", + "in": "query", + "name": "ticker.lt", + "schema": { + "type": "string" + } + }, + { + "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.\n", + "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD,I:SPX", + "in": "query", + "name": "ticker.any_of", + "schema": { + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 250.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 250, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "ticker", + "enum": [ + "ticker" + ], + "example": "ticker", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "results": [ + { + "category": "revenue_streams", + "reason": "Company recognizes revenue from the sales of consumer electronics such as the iPhone and iPad.", + "relevance": 0.99, + "tag": "physical_product_sales_electronics", + "ticker": "AAPL" + }, + { + "category": "revenue_streams", + "reason": "Company recognizes revenue from the sales of digital products such as digital storage and app store fees.", + "relevance": 0.99, + "tag": "digital_product_sales_software", + "ticker": "AAPL" + }, + { + "category": "cost_structure", + "relevance": 0.86, + "tag": "economies_of_scale", + "ticker": "AAPL" + } + ] + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "category": { + "description": "The classification category.", + "type": "string" + }, + "reason": { + "description": "The reason why the classification was given.", + "type": "string" + }, + "relevance": { + "description": "The relevance score for the tag. This is a measure of confidence in the tag classification.", + "format": "double", + "type": "number" + }, + "tag": { + "description": "The classification tag. Each category has a set of associated tags.", + "type": "string" + }, + "ticker": { + "description": "The ticker symbol for the asset.", + "type": "string" + } + }, + "x-polygon-go-type": { + "name": "TaxonomyClassificationResult" + } + }, + "type": "array" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "request_id" + ], + "type": "object" + } + } + }, + "description": "Taxonomy classification data." + } + }, + "summary": "Ticker Taxonomies", + "tags": [ + "Internal", + "Public" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-experimental": {}, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 250, + "min": 1 + }, + "sort": { + "default": "ticker", + "enum": [ + "ticker" + ] + } + } + }, + "x-polygon-draft": true + }, "/vX/reference/tickers/{id}/events": { "get": { "description": "Get a timeline of events for the entity associated with the given ticker, CUSIP, or Composite FIGI.", From 7356ab55d632ec3c22103f9ddc4fc3e4959d2851 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 22 Nov 2023 08:56:29 -0800 Subject: [PATCH 316/448] Retry on 499 status code (#563) * Update base.py * Fix lint --- polygon/rest/base.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 0f82191c..dcddb8a8 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -54,7 +54,15 @@ def __init__( # https://urllib3.readthedocs.io/en/stable/reference/urllib3.util.html#urllib3.util.Retry.RETRY_AFTER_STATUS_CODES retry_strategy = Retry( total=self.retries, - status_forcelist=[413, 429, 500, 502, 503, 504], # default 413, 429, 503 + status_forcelist=[ + 413, + 429, + 499, + 500, + 502, + 503, + 504, + ], # default 413, 429, 503 backoff_factor=0.1, # [0.0s, 0.2s, 0.4s, 0.8s, 1.6s, ...] ) From 7905faf49f1e0e63b0a66b176b94f3af11785388 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Nov 2023 08:31:43 -0800 Subject: [PATCH 317/448] Bump mypy from 1.7.0 to 1.7.1 (#564) Bumps [mypy](https://github.com/python/mypy) from 1.7.0 to 1.7.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.7.0...v1.7.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index cb1c33e3..26aa6f08 100644 --- a/poetry.lock +++ b/poetry.lock @@ -308,38 +308,38 @@ files = [ [[package]] name = "mypy" -version = "1.7.0" +version = "1.7.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5da84d7bf257fd8f66b4f759a904fd2c5a765f70d8b52dde62b521972a0a2357"}, - {file = "mypy-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a3637c03f4025f6405737570d6cbfa4f1400eb3c649317634d273687a09ffc2f"}, - {file = "mypy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b633f188fc5ae1b6edca39dae566974d7ef4e9aaaae00bc36efe1f855e5173ac"}, - {file = "mypy-1.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d6ed9a3997b90c6f891138e3f83fb8f475c74db4ccaa942a1c7bf99e83a989a1"}, - {file = "mypy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fe46e96ae319df21359c8db77e1aecac8e5949da4773c0274c0ef3d8d1268a9"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:df67fbeb666ee8828f675fee724cc2cbd2e4828cc3df56703e02fe6a421b7401"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a79cdc12a02eb526d808a32a934c6fe6df07b05f3573d210e41808020aed8b5d"}, - {file = "mypy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f65f385a6f43211effe8c682e8ec3f55d79391f70a201575def73d08db68ead1"}, - {file = "mypy-1.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e81ffd120ee24959b449b647c4b2fbfcf8acf3465e082b8d58fd6c4c2b27e46"}, - {file = "mypy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:f29386804c3577c83d76520abf18cfcd7d68264c7e431c5907d250ab502658ee"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:87c076c174e2c7ef8ab416c4e252d94c08cd4980a10967754f91571070bf5fbe"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cb8d5f6d0fcd9e708bb190b224089e45902cacef6f6915481806b0c77f7786d"}, - {file = "mypy-1.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93e76c2256aa50d9c82a88e2f569232e9862c9982095f6d54e13509f01222fc"}, - {file = "mypy-1.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cddee95dea7990e2215576fae95f6b78a8c12f4c089d7e4367564704e99118d3"}, - {file = "mypy-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d01921dbd691c4061a3e2ecdbfbfad029410c5c2b1ee88946bf45c62c6c91210"}, - {file = "mypy-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:185cff9b9a7fec1f9f7d8352dff8a4c713b2e3eea9c6c4b5ff7f0edf46b91e41"}, - {file = "mypy-1.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7b1e399c47b18feb6f8ad4a3eef3813e28c1e871ea7d4ea5d444b2ac03c418"}, - {file = "mypy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9fe455ad58a20ec68599139ed1113b21f977b536a91b42bef3ffed5cce7391"}, - {file = "mypy-1.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d0fa29919d2e720c8dbaf07d5578f93d7b313c3e9954c8ec05b6d83da592e5d9"}, - {file = "mypy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b53655a295c1ed1af9e96b462a736bf083adba7b314ae775563e3fb4e6795f5"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1b06b4b109e342f7dccc9efda965fc3970a604db70f8560ddfdee7ef19afb05"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf7a2f0a6907f231d5e41adba1a82d7d88cf1f61a70335889412dec99feeb0f8"}, - {file = "mypy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551d4a0cdcbd1d2cccdcc7cb516bb4ae888794929f5b040bb51aae1846062901"}, - {file = "mypy-1.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55d28d7963bef00c330cb6461db80b0b72afe2f3c4e2963c99517cf06454e665"}, - {file = "mypy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:870bd1ffc8a5862e593185a4c169804f2744112b4a7c55b93eb50f48e7a77010"}, - {file = "mypy-1.7.0-py3-none-any.whl", hash = "sha256:96650d9a4c651bc2a4991cf46f100973f656d69edc7faf91844e87fe627f7e96"}, - {file = "mypy-1.7.0.tar.gz", hash = "sha256:1e280b5697202efa698372d2f39e9a6713a0395a756b1c6bd48995f8d72690dc"}, + {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"}, + {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"}, + {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"}, + {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"}, + {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"}, + {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"}, + {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"}, + {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"}, + {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"}, + {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"}, + {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"}, + {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"}, + {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"}, + {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"}, + {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"}, + {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"}, + {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"}, + {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"}, + {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"}, + {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"}, + {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"}, + {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"}, + {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"}, ] [package.dependencies] From ae03944436d81f4f80282ea6cda20dbfacc7e9d1 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 27 Nov 2023 09:34:02 -0800 Subject: [PATCH 318/448] Fix FMV ws model and added example" (#566) * Fix FMV ws model and add example * Updated example with correct tickers --- examples/websocket/fmv.py | 19 +++++++++++++++++++ polygon/websocket/models/__init__.py | 2 ++ polygon/websocket/models/models.py | 3 ++- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 examples/websocket/fmv.py diff --git a/examples/websocket/fmv.py b/examples/websocket/fmv.py new file mode 100644 index 00000000..5bb75f2d --- /dev/null +++ b/examples/websocket/fmv.py @@ -0,0 +1,19 @@ +from polygon import WebSocketClient +from polygon.websocket.models import WebSocketMessage, Feed, Market +from typing import List + +client = WebSocketClient(feed=Feed.Business, market=Market.Stocks, verbose=True) + +# FMV +client.subscribe("FMV.*") # all ticker symbols +# client.subscribe("FMV.TSLA") +# client.subscribe("FMV.AAPL") +# client.subscribe("FMV.NVDA") + + +def handle_msg(msgs: List[WebSocketMessage]): + for m in msgs: + print(m) + + +client.run(handle_msg) diff --git a/polygon/websocket/models/__init__.py b/polygon/websocket/models/__init__.py index fb64b6dd..06cab55d 100644 --- a/polygon/websocket/models/__init__.py +++ b/polygon/websocket/models/__init__.py @@ -35,6 +35,8 @@ def parse_single(data: Dict[str, Any]): return IndexValue.from_dict(data) elif event_type == EventType.LaunchpadValue.value: return LaunchpadValue.from_dict(data) + elif event_type == EventType.BusinessFairMarketValue.value: + return FairMarketValue.from_dict(data) return None diff --git a/polygon/websocket/models/models.py b/polygon/websocket/models/models.py index 48061e16..d6fa0c29 100644 --- a/polygon/websocket/models/models.py +++ b/polygon/websocket/models/models.py @@ -351,7 +351,7 @@ class FairMarketValue: @staticmethod def from_dict(d): - return LaunchpadValue( + return FairMarketValue( event_type=d.get("ev", None), fmv=d.get("fmv", None), ticker=d.get("sym", None), @@ -375,6 +375,7 @@ def from_dict(d): Level2Book, IndexValue, LaunchpadValue, + FairMarketValue, ] ], ) From 388b6e7cf0116473069a3b366d90101ffa154680 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Nov 2023 09:37:52 -0800 Subject: [PATCH 319/448] Bump types-setuptools from 68.2.0.1 to 68.2.0.2 (#565) Bumps [types-setuptools](https://github.com/python/typeshed) from 68.2.0.1 to 68.2.0.2. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 26aa6f08..3a519a89 100644 --- a/poetry.lock +++ b/poetry.lock @@ -800,13 +800,13 @@ files = [ [[package]] name = "types-setuptools" -version = "68.2.0.1" +version = "68.2.0.2" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.7" files = [ - {file = "types-setuptools-68.2.0.1.tar.gz", hash = "sha256:8f31e8201e7969789e0eb23463b53ebe5f67d92417df4b648a6ea3c357ca4f51"}, - {file = "types_setuptools-68.2.0.1-py3-none-any.whl", hash = "sha256:e9c649559743e9f98c924bec91eae97f3ba208a70686182c3658fd7e81778d37"}, + {file = "types-setuptools-68.2.0.2.tar.gz", hash = "sha256:09efc380ad5c7f78e30bca1546f706469568cf26084cfab73ecf83dea1d28446"}, + {file = "types_setuptools-68.2.0.2-py3-none-any.whl", hash = "sha256:d5b5ff568ea2474eb573dcb783def7dadfd9b1ff638bb653b3c7051ce5aeb6d1"}, ] [[package]] From dae449fd955067af50f73c14534b107e5684f351 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 27 Nov 2023 14:19:55 -0800 Subject: [PATCH 320/448] Fix websocket parse of tickers with periods (#567) --- polygon/websocket/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index 4875a1ac..b9f45a2e 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -200,7 +200,7 @@ async def _unsubscribe(self, topics: Union[List[str], Set[str]]): @staticmethod def _parse_subscription(s: str): s = s.strip() - split = s.split(".") + split = s.split(".", 1) # Split at the first period if len(split) != 2: logger.warning("invalid subscription:", s) return [None, None] From b0c91620e00b68323f20a510fdc407ba0c8d1de3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:27:57 -0800 Subject: [PATCH 321/448] Bump types-setuptools from 68.2.0.2 to 69.0.0.0 (#568) Bumps [types-setuptools](https://github.com/python/typeshed) from 68.2.0.2 to 69.0.0.0. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3a519a89..17104f59 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "alabaster" @@ -800,13 +800,13 @@ files = [ [[package]] name = "types-setuptools" -version = "68.2.0.2" +version = "69.0.0.0" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.7" files = [ - {file = "types-setuptools-68.2.0.2.tar.gz", hash = "sha256:09efc380ad5c7f78e30bca1546f706469568cf26084cfab73ecf83dea1d28446"}, - {file = "types_setuptools-68.2.0.2-py3-none-any.whl", hash = "sha256:d5b5ff568ea2474eb573dcb783def7dadfd9b1ff638bb653b3c7051ce5aeb6d1"}, + {file = "types-setuptools-69.0.0.0.tar.gz", hash = "sha256:b0a06219f628c6527b2f8ce770a4f47550e00d3e8c3ad83e2dc31bc6e6eda95d"}, + {file = "types_setuptools-69.0.0.0-py3-none-any.whl", hash = "sha256:8c86195bae2ad81e6dea900a570fe9d64a59dbce2b11cc63c046b03246ea77bf"}, ] [[package]] @@ -957,4 +957,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "2188e24f85bd8e25567985ea7c64bb9661684e11c1cc191b3d491f2c8bb4a6b9" +content-hash = "334d48e6d57bed781ee5cb642b2940c6fcf346e6c94814bf2c588859dea9db33" diff --git a/pyproject.toml b/pyproject.toml index f06c7aff..c3a367a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^1.3.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.25.2" types-certifi = "^2021.10.8" -types-setuptools = "^68.2.0" +types-setuptools = "^69.0.0" pook = "^1.1.1" orjson = "^3.9.10" From 273f6409413a0a6e1703b0cf2ccb5b6cf3d2b2ff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:34:36 -0800 Subject: [PATCH 322/448] Bump sphinx-rtd-theme from 1.3.0 to 2.0.0 (#569) Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 1.3.0 to 2.0.0. - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/1.3.0...2.0.0) --- updated-dependencies: - dependency-name: sphinx-rtd-theme dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 14 +++++++------- pyproject.toml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/poetry.lock b/poetry.lock index 17104f59..a97dd053 100644 --- a/poetry.lock +++ b/poetry.lock @@ -656,18 +656,18 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pyt [[package]] name = "sphinx-rtd-theme" -version = "1.3.0" +version = "2.0.0" description = "Read the Docs theme for Sphinx" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, - {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, + {file = "sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586"}, + {file = "sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"}, ] [package.dependencies] -docutils = "<0.19" -sphinx = ">=1.6,<8" +docutils = "<0.21" +sphinx = ">=5,<8" sphinxcontrib-jquery = ">=4,<5" [package.extras] @@ -957,4 +957,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "334d48e6d57bed781ee5cb642b2940c6fcf346e6c94814bf2c588859dea9db33" +content-hash = "687907926ac5a55231a363611f7c0ccd688000dee9aa667df29b24e7f251b1fe" diff --git a/pyproject.toml b/pyproject.toml index c3a367a0..5a162fcf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ black = "^23.11.0" mypy = "^1.7" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" -sphinx-rtd-theme = "^1.3.0" +sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^1.25.2" types-certifi = "^2021.10.8" From 7c2b66c4b4fb475fed6dc204afafca7471cc2592 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 11 Dec 2023 07:59:13 -0800 Subject: [PATCH 323/448] Spelling and ws agg sec updates (#572) --- .polygon/rest.json | 22 +- .polygon/websocket.json | 511 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 520 insertions(+), 13 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 198f02f7..46df5987 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -220,7 +220,7 @@ } }, "StocksTickerPathParam": { - "description": "The ticker symbol of the stock/equity.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stocksTicker", @@ -230,7 +230,7 @@ } }, "TickersQueryParam": { - "description": "A comma separated list of tickers to get snapshots for.", + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, AAPL,TSLA,GOOG. Empty string defaults to querying all tickers.", "in": "query", "name": "tickers", "schema": { @@ -3602,7 +3602,7 @@ "type": "boolean" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The Unix Msec timestamp for the end of the aggregate window.", "type": "integer" }, "v": { @@ -13387,7 +13387,7 @@ "description": "Get the open, close and afterhours prices of a stock symbol on a certain date.\n", "parameters": [ { - "description": "The ticker symbol of the stock/equity.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stocksTicker", @@ -15381,7 +15381,7 @@ "type": "boolean" }, "t": { - "description": "The Unix Msec timestamp for the start of the aggregate window.", + "description": "The Unix Msec timestamp for the end of the aggregate window.", "type": "integer" }, "v": { @@ -17171,7 +17171,7 @@ "description": "Get the previous day's open, high, low, and close (OHLC) for the specified stock ticker.\n", "parameters": [ { - "description": "The ticker symbol of the stock/equity.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stocksTicker", @@ -17354,7 +17354,7 @@ "description": "Get aggregate bars for a stock over a given date range in custom time window sizes.\n
\n
\nFor example, if timespan = \u2018minute\u2019 and multiplier = \u20185\u2019 then 5-minute bars will be returned.\n", "parameters": [ { - "description": "The ticker symbol of the stock/equity.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stocksTicker", @@ -18573,7 +18573,7 @@ "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { - "description": "A comma separated list of tickers to get snapshots for.", + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, AAPL,TSLA,GOOG. Empty string defaults to querying all tickers.", "in": "query", "name": "tickers", "schema": { @@ -19834,7 +19834,7 @@ "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for all traded forex symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { - "description": "A comma separated list of tickers to get snapshots for.", + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, AAPL,TSLA,GOOG. Empty string defaults to querying all tickers.", "in": "query", "name": "tickers", "schema": { @@ -20783,7 +20783,7 @@ "description": "Get the most up-to-date market data for all traded stock symbols.\n
\n
\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { - "description": "A comma separated list of tickers to get snapshots for.", + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, AAPL,TSLA,GOOG. Empty string defaults to querying all tickers.", "in": "query", "name": "tickers", "schema": { @@ -21198,7 +21198,7 @@ "description": "Get the most up-to-date market data for a single traded stock ticker.\n
\n
\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { - "description": "The ticker symbol of the stock/equity.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stocksTicker", diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 0738b167..67db5785 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -115,6 +115,11 @@ "/forex/CA" ] }, + { + "paths": [ + "/forex/CAS" + ] + }, { "paths": [ "/forex/C" @@ -146,6 +151,11 @@ "/crypto/XA" ] }, + { + "paths": [ + "/crypto/XAS" + ] + }, { "paths": [ "/crypto/XT" @@ -187,6 +197,11 @@ "/indices/AM" ] }, + { + "paths": [ + "/indices/A" + ] + }, { "paths": [ "/indices/V" @@ -2171,6 +2186,106 @@ ] } }, + "/forex/CAS": { + "get": { + "summary": "Aggregates (Per Second)", + "description": "Stream real-time per-second forex aggregates for a given forex pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a forex pair in the format {from}/{to} or use * to subscribe to all forex pairs.\nYou can also use a comma separated list to subscribe to multiple forex pairs.\nYou can retrieve active forex tickers from our [Forex Tickers API](https://polygon.io/docs/forex/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]{3})\\/?([A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a forex per-second aggregate event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "CAS" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The currency pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + } + } + }, + "example": { + "ev": "CAS", + "pair": "USD/EUR", + "o": 0.8687, + "c": 0.86889, + "h": 0.86889, + "l": 0.8686, + "v": 20, + "s": 1539145740000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "fx", + "description": "Forex data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/business/forex/FMV": { "get": { "summary": "Fair Market Value", @@ -2885,6 +3000,118 @@ ] } }, + "/crypto/XAS": { + "get": { + "summary": "Aggregates (Per Second)", + "description": "Stream real-time per-second crypto aggregates for a given crypto pair.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify a crypto pair in the format {from}-{to} or use * to subscribe to all crypto pairs.\nYou can also use a comma separated list to subscribe to multiple crypto pairs.\nYou can retrieve active crypto tickers from our [Crypto Tickers API](https://polygon.io/docs/crypto/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(?([A-Z]*)-(?[A-Z]{3}))$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a crypto per-second aggregate event.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XAS" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + } + } + }, + "example": { + "ev": "XAS", + "pair": "BCD-USD", + "v": 951.6112, + "vw": 0.7756, + "z": 73, + "o": 0.772, + "c": 0.784, + "h": 0.784, + "l": 0.771, + "s": 1610463240000, + "e": 1610463300000 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "crypto", + "description": "Crypto data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/business/crypto/FMV": { "get": { "summary": "Fair Market Value", @@ -3160,6 +3387,122 @@ ] } }, + "/indices/A": { + "get": { + "summary": "Aggregates (Per Second)", + "description": "Stream real-time second aggregates for a given index ticker symbol.\n", + "parameters": [ + { + "name": "ticker", + "in": "query", + "description": "Specify an index ticker using \"I:\" prefix or use * to subscribe to all index tickers.\nYou can also use a comma separated list to subscribe to multiple index tickers.\nYou can retrieve available index tickers from our [Index Tickers API](https://polygon.io/docs/indices/get_v3_reference_tickers).\n", + "required": true, + "schema": { + "type": "string", + "pattern": "/^(I:[a-zA-Z0-9]+)$/" + }, + "example": "*" + } + ], + "responses": { + "200": { + "description": "The WebSocket message for a second aggregate event.", + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The symbol representing the given index." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening value." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening index value for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing index value for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest index value for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest index value for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "A" + ], + "description": "The event type." + } + } + } + ] + }, + "example": { + "ev": "A", + "sym": "I:SPX", + "op": 3985.67, + "o": 3985.67, + "c": 3985.67, + "h": 3985.67, + "l": 3985.67, + "s": 1678220675805, + "e": 1678220675805 + } + } + } + } + }, + "x-polygon-entitlement-data-type": { + "name": "aggregates", + "description": "Aggregate data" + }, + "x-polygon-entitlement-market-type": { + "name": "indices", + "description": "Indices data" + }, + "x-polygon-entitlement-allowed-timeframes": [ + { + "name": "delayed", + "description": "15 minute delayed data" + }, + { + "name": "realtime", + "description": "Real Time Data" + } + ] + } + }, "/indices/AM": { "get": { "summary": "Aggregates (Per Minute)", @@ -4454,7 +4797,7 @@ } ] }, - "ForexAggregateEvent": { + "ForexMinuteAggregateEvent": { "type": "object", "properties": { "ev": { @@ -4502,6 +4845,54 @@ } } }, + "ForexSecondAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "CAS" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The currency pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + } + } + }, "CryptoQuoteEvent": { "type": "object", "properties": { @@ -4600,7 +4991,7 @@ } } }, - "CryptoAggregateEvent": { + "CryptoMinuteAggregateEvent": { "type": "object", "properties": { "ev": { @@ -4657,6 +5048,63 @@ } } }, + "CryptoSecondAggregateEvent": { + "type": "object", + "properties": { + "ev": { + "type": "string", + "enum": [ + "XAS" + ], + "description": "The event type." + }, + "pair": { + "type": "string", + "description": "The crypto pair." + }, + "o": { + "type": "number", + "format": "double", + "description": "The open price for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The close price for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The high price for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The low price for this aggregate window." + }, + "v": { + "type": "integer", + "description": "The volume of trades during this aggregate window." + }, + "s": { + "type": "integer", + "description": "The start time for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The end time for this aggregate window in Unix Milliseconds." + }, + "vw": { + "type": "number", + "format": "double", + "description": "The volume weighted average price." + }, + "z": { + "type": "integer", + "description": "The average trade size for this aggregate window." + } + } + }, "CryptoL2BookEvent": { "type": "object", "properties": { @@ -4825,6 +5273,65 @@ } ] }, + "IndicesSecondAggregateEvent": { + "allOf": [ + { + "type": "object", + "properties": { + "ev": { + "description": "The event type." + }, + "sym": { + "type": "string", + "description": "The symbol representing the given index." + }, + "op": { + "type": "number", + "format": "double", + "description": "Today's official opening value." + }, + "o": { + "type": "number", + "format": "double", + "description": "The opening index value for this aggregate window." + }, + "c": { + "type": "number", + "format": "double", + "description": "The closing index value for this aggregate window." + }, + "h": { + "type": "number", + "format": "double", + "description": "The highest index value for this aggregate window." + }, + "l": { + "type": "number", + "format": "double", + "description": "The lowest index value for this aggregate window." + }, + "s": { + "type": "integer", + "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + }, + "e": { + "type": "integer", + "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + } + } + }, + { + "properties": { + "ev": { + "enum": [ + "A" + ], + "description": "The event type." + } + } + } + ] + }, "IndicesValueEvent": { "type": "object", "properties": { From 07ed37c6035e47d86a01f1375197b0344b23c955 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 08:37:35 -0800 Subject: [PATCH 324/448] Bump pook from 1.1.1 to 1.2.0 (#575) Bumps [pook](https://github.com/h2non/pook) from 1.1.1 to 1.2.0. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v1.1.1...v1.2.0) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index a97dd053..38ef5f61 100644 --- a/poetry.lock +++ b/poetry.lock @@ -487,13 +487,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.1.1" +version = "1.2.0" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = "*" files = [ - {file = "pook-1.1.1-py3-none-any.whl", hash = "sha256:0bf4f8b53739e165722263c894a27140cf7f3ae6e7a378e4cbf48fdca4abe037"}, - {file = "pook-1.1.1.tar.gz", hash = "sha256:53da04930616d94eeede77a39d6b5f0fac1f7bbd160d8f54bc468cd798b93956"}, + {file = "pook-1.2.0-py3-none-any.whl", hash = "sha256:53e83db3c0896f04c23a5f09c043bef04aaeb6164eceb8df2fd97a6987924710"}, + {file = "pook-1.2.0.tar.gz", hash = "sha256:4114a7727a2c4013b4a97b6f11b2919b989e44da0d4c1323d1ee77dc40b40585"}, ] [package.dependencies] @@ -957,4 +957,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "687907926ac5a55231a363611f7c0ccd688000dee9aa667df29b24e7f251b1fe" +content-hash = "22290b87741d978c81d3ee4ed7978a10c3ee9f89b317835b48a353316ca6dea9" diff --git a/pyproject.toml b/pyproject.toml index 5a162fcf..2b643b68 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^2.0.0" sphinx-autodoc-typehints = "^1.25.2" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" -pook = "^1.1.1" +pook = "^1.2.0" orjson = "^3.9.10" [build-system] From 2ddec5464407c8ba297c3a04b2725762224632ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 08:45:54 -0800 Subject: [PATCH 325/448] Bump black from 23.11.0 to 23.12.0 (#574) Bumps [black](https://github.com/psf/black) from 23.11.0 to 23.12.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.11.0...23.12.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 46 +++++++++++++++++++++++++--------------------- pyproject.toml | 2 +- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/poetry.lock b/poetry.lock index 38ef5f61..7e38d48a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,29 +44,33 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "23.11.0" +version = "23.12.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dbea0bb8575c6b6303cc65017b46351dc5953eea5c0a59d7b7e3a2d2f433a911"}, - {file = "black-23.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:412f56bab20ac85927f3a959230331de5614aecda1ede14b373083f62ec24e6f"}, - {file = "black-23.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d136ef5b418c81660ad847efe0e55c58c8208b77a57a28a503a5f345ccf01394"}, - {file = "black-23.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:6c1cac07e64433f646a9a838cdc00c9768b3c362805afc3fce341af0e6a9ae9f"}, - {file = "black-23.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cf57719e581cfd48c4efe28543fea3d139c6b6f1238b3f0102a9c73992cbb479"}, - {file = "black-23.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698c1e0d5c43354ec5d6f4d914d0d553a9ada56c85415700b81dc90125aac244"}, - {file = "black-23.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760415ccc20f9e8747084169110ef75d545f3b0932ee21368f63ac0fee86b221"}, - {file = "black-23.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:58e5f4d08a205b11800332920e285bd25e1a75c54953e05502052738fe16b3b5"}, - {file = "black-23.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:45aa1d4675964946e53ab81aeec7a37613c1cb71647b5394779e6efb79d6d187"}, - {file = "black-23.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c44b7211a3a0570cc097e81135faa5f261264f4dfaa22bd5ee2875a4e773bd6"}, - {file = "black-23.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9acad1451632021ee0d146c8765782a0c3846e0e0ea46659d7c4f89d9b212b"}, - {file = "black-23.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc7f6a44d52747e65a02558e1d807c82df1d66ffa80a601862040a43ec2e3142"}, - {file = "black-23.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f622b6822f02bfaf2a5cd31fdb7cd86fcf33dab6ced5185c35f5db98260b055"}, - {file = "black-23.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:250d7e60f323fcfc8ea6c800d5eba12f7967400eb6c2d21ae85ad31c204fb1f4"}, - {file = "black-23.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5133f5507007ba08d8b7b263c7aa0f931af5ba88a29beacc4b2dc23fcefe9c06"}, - {file = "black-23.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:421f3e44aa67138ab1b9bfbc22ee3780b22fa5b291e4db8ab7eee95200726b07"}, - {file = "black-23.11.0-py3-none-any.whl", hash = "sha256:54caaa703227c6e0c87b76326d0862184729a69b73d3b7305b6288e1d830067e"}, - {file = "black-23.11.0.tar.gz", hash = "sha256:4c68855825ff432d197229846f971bc4d6666ce90492e5b02013bcaca4d9ab05"}, + {file = "black-23.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67f19562d367468ab59bd6c36a72b2c84bc2f16b59788690e02bbcb140a77175"}, + {file = "black-23.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbd75d9f28a7283b7426160ca21c5bd640ca7cd8ef6630b4754b6df9e2da8462"}, + {file = "black-23.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:593596f699ca2dcbbbdfa59fcda7d8ad6604370c10228223cd6cf6ce1ce7ed7e"}, + {file = "black-23.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:12d5f10cce8dc27202e9a252acd1c9a426c83f95496c959406c96b785a92bb7d"}, + {file = "black-23.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e73c5e3d37e5a3513d16b33305713237a234396ae56769b839d7c40759b8a41c"}, + {file = "black-23.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba09cae1657c4f8a8c9ff6cfd4a6baaf915bb4ef7d03acffe6a2f6585fa1bd01"}, + {file = "black-23.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace64c1a349c162d6da3cef91e3b0e78c4fc596ffde9413efa0525456148873d"}, + {file = "black-23.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:72db37a2266b16d256b3ea88b9affcdd5c41a74db551ec3dd4609a59c17d25bf"}, + {file = "black-23.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fdf6f23c83078a6c8da2442f4d4eeb19c28ac2a6416da7671b72f0295c4a697b"}, + {file = "black-23.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39dda060b9b395a6b7bf9c5db28ac87b3c3f48d4fdff470fa8a94ab8271da47e"}, + {file = "black-23.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7231670266ca5191a76cb838185d9be59cfa4f5dd401b7c1c70b993c58f6b1b5"}, + {file = "black-23.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:193946e634e80bfb3aec41830f5d7431f8dd5b20d11d89be14b84a97c6b8bc75"}, + {file = "black-23.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcf91b01ddd91a2fed9a8006d7baa94ccefe7e518556470cf40213bd3d44bbbc"}, + {file = "black-23.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:996650a89fe5892714ea4ea87bc45e41a59a1e01675c42c433a35b490e5aa3f0"}, + {file = "black-23.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdbff34c487239a63d86db0c9385b27cdd68b1bfa4e706aa74bb94a435403672"}, + {file = "black-23.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:97af22278043a6a1272daca10a6f4d36c04dfa77e61cbaaf4482e08f3640e9f0"}, + {file = "black-23.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ead25c273adfad1095a8ad32afdb8304933efba56e3c1d31b0fee4143a1e424a"}, + {file = "black-23.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c71048345bdbced456cddf1622832276d98a710196b842407840ae8055ade6ee"}, + {file = "black-23.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a832b6e00eef2c13b3239d514ea3b7d5cc3eaa03d0474eedcbbda59441ba5d"}, + {file = "black-23.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:6a82a711d13e61840fb11a6dfecc7287f2424f1ca34765e70c909a35ffa7fb95"}, + {file = "black-23.12.0-py3-none-any.whl", hash = "sha256:a7c07db8200b5315dc07e331dda4d889a56f6bf4db6a9c2a526fa3166a81614f"}, + {file = "black-23.12.0.tar.gz", hash = "sha256:330a327b422aca0634ecd115985c1c7fd7bdb5b5a2ef8aa9888a82e2ebe9437a"}, ] [package.dependencies] @@ -80,7 +84,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -957,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "22290b87741d978c81d3ee4ed7978a10c3ee9f89b317835b48a353316ca6dea9" +content-hash = "acd467a759f9d0a4c673bdd82cc59f06ca808e663c832f78a64f1bf1d98cbf1f" diff --git a/pyproject.toml b/pyproject.toml index 2b643b68..8f352757 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<13.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] -black = "^23.11.0" +black = "^23.12.0" mypy = "^1.7" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From dabdfae8ce72f501b4284d0b441a40f9015bd003 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 09:00:56 -0800 Subject: [PATCH 326/448] Bump pook from 1.2.0 to 1.3.0 (#578) Bumps [pook](https://github.com/h2non/pook) from 1.2.0 to 1.3.0. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v1.2.0...v1.3.0) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7e38d48a..f7af8716 100644 --- a/poetry.lock +++ b/poetry.lock @@ -491,13 +491,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.2.0" +version = "1.3.0" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = "*" files = [ - {file = "pook-1.2.0-py3-none-any.whl", hash = "sha256:53e83db3c0896f04c23a5f09c043bef04aaeb6164eceb8df2fd97a6987924710"}, - {file = "pook-1.2.0.tar.gz", hash = "sha256:4114a7727a2c4013b4a97b6f11b2919b989e44da0d4c1323d1ee77dc40b40585"}, + {file = "pook-1.3.0-py2.py3-none-any.whl", hash = "sha256:0d057a60a4dff0d4d813e3397e187d169da894151bbbbbb2b679cd6559c85df9"}, + {file = "pook-1.3.0.tar.gz", hash = "sha256:24a6ae2abd79eef147d483da8060d41d025a9a6d676e98b7370547c09ad0e0e4"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "acd467a759f9d0a4c673bdd82cc59f06ca808e663c832f78a64f1bf1d98cbf1f" +content-hash = "0efb18eeb77b204b16815c86e684ae7fac778190ae6d8d4a7f195ceb1d7a7a42" diff --git a/pyproject.toml b/pyproject.toml index 8f352757..b575d8d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^2.0.0" sphinx-autodoc-typehints = "^1.25.2" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" -pook = "^1.2.0" +pook = "^1.3.0" orjson = "^3.9.10" [build-system] From f4be43751c088b41ae7fd95c865e6a9cdf3ee532 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 09:13:22 -0800 Subject: [PATCH 327/448] Bump mypy from 1.7.1 to 1.8.0 (#579) Bumps [mypy](https://github.com/python/mypy) from 1.7.1 to 1.8.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.7.1...v1.8.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 58 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index f7af8716..37581567 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.7.1" +version = "1.8.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"}, - {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"}, - {file = "mypy-1.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5"}, - {file = "mypy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d"}, - {file = "mypy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a"}, - {file = "mypy-1.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7"}, - {file = "mypy-1.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51"}, - {file = "mypy-1.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a"}, - {file = "mypy-1.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28"}, - {file = "mypy-1.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42"}, - {file = "mypy-1.7.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1"}, - {file = "mypy-1.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33"}, - {file = "mypy-1.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb"}, - {file = "mypy-1.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea"}, - {file = "mypy-1.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82"}, - {file = "mypy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200"}, - {file = "mypy-1.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7"}, - {file = "mypy-1.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e"}, - {file = "mypy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9"}, - {file = "mypy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7"}, - {file = "mypy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe"}, - {file = "mypy-1.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce"}, - {file = "mypy-1.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a"}, - {file = "mypy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120"}, - {file = "mypy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6"}, - {file = "mypy-1.7.1-py3-none-any.whl", hash = "sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea"}, - {file = "mypy-1.7.1.tar.gz", hash = "sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, + {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, + {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, + {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, + {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, + {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, + {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, + {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, + {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, + {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, + {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, + {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, + {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, + {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, + {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, + {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, + {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, + {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, + {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, + {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, + {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, + {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, + {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0efb18eeb77b204b16815c86e684ae7fac778190ae6d8d4a7f195ceb1d7a7a42" +content-hash = "ebd79209de4094bdd0aec18cd0290bbbc516931199aa6364402daaf9fde3d769" diff --git a/pyproject.toml b/pyproject.toml index b575d8d9..413544f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] black = "^23.12.0" -mypy = "^1.7" +mypy = "^1.8" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^2.0.0" From f698f6bf29909ff8a36992c467bbacc66cb65a8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 09:16:56 -0800 Subject: [PATCH 328/448] Bump black from 23.12.0 to 23.12.1 (#580) Bumps [black](https://github.com/psf/black) from 23.12.0 to 23.12.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.12.0...23.12.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 48 ++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index 37581567..e93cddb3 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,33 +44,33 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "23.12.0" +version = "23.12.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67f19562d367468ab59bd6c36a72b2c84bc2f16b59788690e02bbcb140a77175"}, - {file = "black-23.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbd75d9f28a7283b7426160ca21c5bd640ca7cd8ef6630b4754b6df9e2da8462"}, - {file = "black-23.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:593596f699ca2dcbbbdfa59fcda7d8ad6604370c10228223cd6cf6ce1ce7ed7e"}, - {file = "black-23.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:12d5f10cce8dc27202e9a252acd1c9a426c83f95496c959406c96b785a92bb7d"}, - {file = "black-23.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e73c5e3d37e5a3513d16b33305713237a234396ae56769b839d7c40759b8a41c"}, - {file = "black-23.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ba09cae1657c4f8a8c9ff6cfd4a6baaf915bb4ef7d03acffe6a2f6585fa1bd01"}, - {file = "black-23.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace64c1a349c162d6da3cef91e3b0e78c4fc596ffde9413efa0525456148873d"}, - {file = "black-23.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:72db37a2266b16d256b3ea88b9affcdd5c41a74db551ec3dd4609a59c17d25bf"}, - {file = "black-23.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fdf6f23c83078a6c8da2442f4d4eeb19c28ac2a6416da7671b72f0295c4a697b"}, - {file = "black-23.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39dda060b9b395a6b7bf9c5db28ac87b3c3f48d4fdff470fa8a94ab8271da47e"}, - {file = "black-23.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7231670266ca5191a76cb838185d9be59cfa4f5dd401b7c1c70b993c58f6b1b5"}, - {file = "black-23.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:193946e634e80bfb3aec41830f5d7431f8dd5b20d11d89be14b84a97c6b8bc75"}, - {file = "black-23.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcf91b01ddd91a2fed9a8006d7baa94ccefe7e518556470cf40213bd3d44bbbc"}, - {file = "black-23.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:996650a89fe5892714ea4ea87bc45e41a59a1e01675c42c433a35b490e5aa3f0"}, - {file = "black-23.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdbff34c487239a63d86db0c9385b27cdd68b1bfa4e706aa74bb94a435403672"}, - {file = "black-23.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:97af22278043a6a1272daca10a6f4d36c04dfa77e61cbaaf4482e08f3640e9f0"}, - {file = "black-23.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ead25c273adfad1095a8ad32afdb8304933efba56e3c1d31b0fee4143a1e424a"}, - {file = "black-23.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c71048345bdbced456cddf1622832276d98a710196b842407840ae8055ade6ee"}, - {file = "black-23.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a832b6e00eef2c13b3239d514ea3b7d5cc3eaa03d0474eedcbbda59441ba5d"}, - {file = "black-23.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:6a82a711d13e61840fb11a6dfecc7287f2424f1ca34765e70c909a35ffa7fb95"}, - {file = "black-23.12.0-py3-none-any.whl", hash = "sha256:a7c07db8200b5315dc07e331dda4d889a56f6bf4db6a9c2a526fa3166a81614f"}, - {file = "black-23.12.0.tar.gz", hash = "sha256:330a327b422aca0634ecd115985c1c7fd7bdb5b5a2ef8aa9888a82e2ebe9437a"}, + {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, + {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, + {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, + {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, + {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, + {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, + {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, + {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, + {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, + {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, + {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, + {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, + {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, + {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, + {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, + {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, + {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, + {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, + {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, + {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, + {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, + {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "ebd79209de4094bdd0aec18cd0290bbbc516931199aa6364402daaf9fde3d769" +content-hash = "f1bb64f793d8d6fec93a7c05036f527812b17ef5ad0fe0f0dd8afd6640969b2c" diff --git a/pyproject.toml b/pyproject.toml index 413544f6..0a79a33f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<13.0" certifi = ">=2022.5.18,<2024.0.0" [tool.poetry.dev-dependencies] -black = "^23.12.0" +black = "^23.12.1" mypy = "^1.8" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From 89dd0d5e834034fa485e6f33231b1e80aa08ea2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 08:37:35 -0800 Subject: [PATCH 329/448] Bump pook from 1.3.0 to 1.4.0 (#583) Bumps [pook](https://github.com/h2non/pook) from 1.3.0 to 1.4.0. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v1.3.0...v1.4.0) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index e93cddb3..994c656c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -491,13 +491,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.3.0" +version = "1.4.0" description = "HTTP traffic mocking and expectations made easy" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "pook-1.3.0-py2.py3-none-any.whl", hash = "sha256:0d057a60a4dff0d4d813e3397e187d169da894151bbbbbb2b679cd6559c85df9"}, - {file = "pook-1.3.0.tar.gz", hash = "sha256:24a6ae2abd79eef147d483da8060d41d025a9a6d676e98b7370547c09ad0e0e4"}, + {file = "pook-1.4.0-py3-none-any.whl", hash = "sha256:1b47fcc75a8a063fc977ee55c7360a0f70bcf3ac0de9be584c8ec09cb127da49"}, + {file = "pook-1.4.0.tar.gz", hash = "sha256:9261e576e7fe9e9df22f77ffe630560dc6297945382cb4ab9d9c1bb33ddfc62b"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "f1bb64f793d8d6fec93a7c05036f527812b17ef5ad0fe0f0dd8afd6640969b2c" +content-hash = "a365fadab022b55a06bc1fe6b7ef8a6253066ae7cb4fa0a458bf63ea9a5c9d6d" diff --git a/pyproject.toml b/pyproject.toml index 0a79a33f..ecc9b5e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^2.0.0" sphinx-autodoc-typehints = "^1.25.2" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" -pook = "^1.3.0" +pook = "^1.4.0" orjson = "^3.9.10" [build-system] From 434eb35a71f989599cbfa10df667598cb94898de Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 2 Jan 2024 09:13:04 -0800 Subject: [PATCH 330/448] Updated rest spec with compfigi (#584) --- .polygon/rest.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 46df5987..f4e5fcb9 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -26031,7 +26031,7 @@ "type": "string" }, "composite_figi": { - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/about/figi)", "type": "string" }, "currency_name": { @@ -26076,7 +26076,7 @@ "type": "string" }, "share_class_figi": { - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/about/figi)", "type": "string" }, "ticker": { @@ -26477,7 +26477,7 @@ "type": "string" }, "composite_figi": { - "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "description": "The composite OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/about/figi)", "type": "string" }, "currency_name": { @@ -26543,7 +26543,7 @@ "type": "number" }, "share_class_figi": { - "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/assets/content/Open_Symbology_Fields-2a61f8aa4d.pdf)", + "description": "The share Class OpenFIGI number for this ticker. Find more information [here](https://www.openfigi.com/about/figi)", "type": "string" }, "share_class_shares_outstanding": { From 62f6064df73b8063eb41555855c7d9cab9500c10 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Fri, 5 Jan 2024 09:13:42 -0800 Subject: [PATCH 331/448] Updated ws spec with start and end timestamp desc (#576) --- .polygon/websocket.json | 124 ++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 67db5785..85245e63 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -539,11 +539,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "otc": { "type": "boolean", @@ -686,11 +686,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "otc": { "type": "boolean", @@ -1104,11 +1104,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -1513,11 +1513,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -1656,11 +1656,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -1870,11 +1870,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -2148,11 +2148,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -2248,11 +2248,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -2440,11 +2440,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -2805,7 +2805,7 @@ }, "b": { "type": "array", - "description": "An array of bid prices with a maximum depth of 100.", + "description": "An array of bid prices, where each entry contains two elements: the first is the bid price, and the second is the size, with a maximum depth of 100.", "items": { "type": "array", "description": "An array where the first item is bid price and the second item is size.", @@ -2817,7 +2817,7 @@ }, "a": { "type": "array", - "description": "An array of ask prices with a maximum depth of 100.", + "description": "An array of ask prices, where each entry contains two elements: the first is the ask price, and the second is the size, with a maximum depth of 100.", "items": { "type": "array", "description": "An array where the first item is ask price and the second item is size.", @@ -2950,11 +2950,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "vw": { "type": "number", @@ -3062,11 +3062,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "vw": { "type": "number", @@ -3266,11 +3266,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -3448,11 +3448,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -3564,11 +3564,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -3919,11 +3919,11 @@ }, "AggsStartTime": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "AggsEndTime": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "StockTradeEvent": { "type": "object", @@ -4109,11 +4109,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "otc": { "type": "boolean", @@ -4182,11 +4182,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "otc": { "type": "boolean", @@ -4267,11 +4267,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "otc": { "type": "boolean", @@ -4547,11 +4547,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -4616,11 +4616,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -4697,11 +4697,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -4837,11 +4837,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -4885,11 +4885,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -5031,11 +5031,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "vw": { "type": "number", @@ -5088,11 +5088,11 @@ }, "s": { "type": "integer", - "description": "The start time for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The end time for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." }, "vw": { "type": "number", @@ -5121,7 +5121,7 @@ }, "b": { "type": "array", - "description": "An array of bid prices with a maximum depth of 100.", + "description": "An array of bid prices, where each entry contains two elements: the first is the bid price, and the second is the size, with a maximum depth of 100.", "items": { "type": "array", "description": "An array where the first item is bid price and the second item is size.", @@ -5133,7 +5133,7 @@ }, "a": { "type": "array", - "description": "An array of ask prices with a maximum depth of 100.", + "description": "An array of ask prices, where each entry contains two elements: the first is the ask price, and the second is the size, with a maximum depth of 100.", "items": { "type": "array", "description": "An array where the first item is ask price and the second item is size.", @@ -5206,11 +5206,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -5253,11 +5253,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -5312,11 +5312,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting index for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending index for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, @@ -5412,11 +5412,11 @@ }, "s": { "type": "integer", - "description": "The timestamp of the starting tick for this aggregate window in Unix Milliseconds." + "description": "The start timestamp of this aggregate window in Unix Milliseconds." }, "e": { "type": "integer", - "description": "The timestamp of the ending tick for this aggregate window in Unix Milliseconds." + "description": "The end timestamp of this aggregate window in Unix Milliseconds." } } }, From 4fc38e0db762cfbaf56c333b9ce05ec3fe657f68 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 10:21:49 -0800 Subject: [PATCH 332/448] Bump types-setuptools from 69.0.0.0 to 69.0.0.20240106 (#586) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.0.0.0 to 69.0.0.20240106. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 994c656c..3f903c20 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.0.0.0" +version = "69.0.0.20240106" description = "Typing stubs for setuptools" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.0.0.0.tar.gz", hash = "sha256:b0a06219f628c6527b2f8ce770a4f47550e00d3e8c3ad83e2dc31bc6e6eda95d"}, - {file = "types_setuptools-69.0.0.0-py3-none-any.whl", hash = "sha256:8c86195bae2ad81e6dea900a570fe9d64a59dbce2b11cc63c046b03246ea77bf"}, + {file = "types-setuptools-69.0.0.20240106.tar.gz", hash = "sha256:e077f9089578df3c9938f6e4aa1633f182ba6740a6fdb1333f162bae5dfcbadc"}, + {file = "types_setuptools-69.0.0.20240106-py3-none-any.whl", hash = "sha256:b1da8981425723a674fd459c43dfa4402abeaee3f9cf682723ee9cf226125cc3"}, ] [[package]] From 55aa195f4bc0ae64bec32dec83db460fbe168922 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 11:52:15 -0800 Subject: [PATCH 333/448] Bump jinja2 from 3.1.2 to 3.1.3 (#588) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.2 to 3.1.3. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.2...3.1.3) --- updated-dependencies: - dependency-name: jinja2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3f903c20..c219e086 100644 --- a/poetry.lock +++ b/poetry.lock @@ -224,14 +224,14 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] [[package]] -name = "Jinja2" -version = "3.1.2" +name = "jinja2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] From 2f9d031ae31133e00374c1e2c1054c041931d82e Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:08:14 -0800 Subject: [PATCH 334/448] Added example for async websocket and rest calls (#589) * Added example for async websocket and rest calls * Fix lint * Fix wording * Added comments via TODO where user changes needed --- .../async_websocket_rest_handler.py | 109 ++++++++++++++++++ .../async_websocket_rest_handler/readme.md | 16 +++ 2 files changed, 125 insertions(+) create mode 100644 examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py create mode 100644 examples/tools/async_websocket_rest_handler/readme.md diff --git a/examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py b/examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py new file mode 100644 index 00000000..30753269 --- /dev/null +++ b/examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py @@ -0,0 +1,109 @@ +import asyncio +import logging +import os +import re +from concurrent.futures import ThreadPoolExecutor +from typing import Optional, Union +from polygon import RESTClient, WebSocketClient +from polygon.websocket.models import Market, Feed + + +class ApiCallHandler: + def __init__(self): + self.api_call_queue = asyncio.Queue() + self.executor = ThreadPoolExecutor() # Thread pool for running synchronous code + + async def enqueue_api_call(self, options_ticker): + await self.api_call_queue.put(options_ticker) + + async def start_processing_api_calls(self): + while True: + options_ticker = await self.api_call_queue.get() + try: + # TODO: + # Here, you can process the rest api requets as needed + # Example: Get the options contract for this + contract = await asyncio.get_running_loop().run_in_executor( + self.executor, self.get_options_contract, options_ticker + ) + print(contract) # Or process the contract data as needed + except Exception as e: + logging.error(f"Error processing API call for {options_ticker}: {e}") + finally: + self.api_call_queue.task_done() + + def get_options_contract(self, options_ticker): + client = RESTClient() # Assumes POLYGON_API_KEY is set in the environment + return client.get_options_contract(options_ticker) + + +class MessageHandler: + def __init__(self, api_call_handler): + self.handler_queue = asyncio.Queue() + self.api_call_handler = api_call_handler + + async def add(self, message_response: Optional[Union[str, bytes]]) -> None: + await self.handler_queue.put(message_response) + + async def start_handling(self) -> None: + while True: + message_response = await self.handler_queue.get() + logging.info(f"Received message: {message_response}") + try: + # TODO: + # Here, you can process the websocket messages as needed + # Example: Extract ticker symbol and enqueue REST API call + # to get the options contract for this trade (non-blocking) + for trade in message_response: + ticker = self.extract_symbol(trade.symbol) + if ticker == "NVDA": + asyncio.create_task( + self.api_call_handler.enqueue_api_call(trade.symbol) + ) + except Exception as e: + logging.error(f"Error handling message: {e}") + finally: + self.handler_queue.task_done() + + def extract_symbol(self, input_string): + match = re.search(r"O:([A-Z]+)", input_string) + if match: + return match.group(1) + else: + return None + + +class MyClient: + def __init__(self, feed, market, subscriptions): + api_key = os.getenv("POLYGON_API_KEY") + self.polygon_websocket_client = WebSocketClient( + api_key=api_key, + feed=feed, + market=market, + verbose=True, + subscriptions=subscriptions, + ) + self.api_call_handler = ApiCallHandler() + self.message_handler = MessageHandler(self.api_call_handler) + + async def start_event_stream(self): + try: + await asyncio.gather( + self.polygon_websocket_client.connect(self.message_handler.add), + self.message_handler.start_handling(), + self.api_call_handler.start_processing_api_calls(), + ) + except Exception as e: + logging.error(f"Error in event stream: {e}") + + +async def main(): + logging.basicConfig(level=logging.INFO) + my_client = MyClient( + feed=Feed.RealTime, market=Market.Options, subscriptions=["T.*"] + ) + await my_client.start_event_stream() + + +# Entry point for the asyncio program +asyncio.run(main()) diff --git a/examples/tools/async_websocket_rest_handler/readme.md b/examples/tools/async_websocket_rest_handler/readme.md new file mode 100644 index 00000000..a4482ff3 --- /dev/null +++ b/examples/tools/async_websocket_rest_handler/readme.md @@ -0,0 +1,16 @@ +# Pattern for Non-Blocking WebSocket and REST Calls in Python + +This script demonstrates a non-blocking pattern for handling WebSocket streams and REST API calls in Python using asyncio. It focuses on efficient, concurrent processing of real-time financial data and asynchronous fetching of additional information, ensuring that real-time data streams are managed without delays or blockages. The tutorial provides both theoretical insights and a practical, adaptable example, ideal for applications in financial data processing and similar real-time data handling scenarios. + +Please see the [tutorial](https://polygon.io/blog/pattern-for-non-blocking-websocket-and-rest-calls-in-python) for more details. + +### Prerequisites + +- Python 3.x +- Polygon.io account and Options API key + +### Running the Example + +``` +python3 async_websocket_rest_handler.py +``` \ No newline at end of file From 35bf7af7f1a050e1eae05b9cba8151377babf743 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 09:21:56 -0800 Subject: [PATCH 335/448] Bump types-setuptools from 69.0.0.20240106 to 69.0.0.20240115 (#592) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.0.0.20240106 to 69.0.0.20240115. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c219e086..a8ad2a66 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.0.0.20240106" +version = "69.0.0.20240115" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.0.0.20240106.tar.gz", hash = "sha256:e077f9089578df3c9938f6e4aa1633f182ba6740a6fdb1333f162bae5dfcbadc"}, - {file = "types_setuptools-69.0.0.20240106-py3-none-any.whl", hash = "sha256:b1da8981425723a674fd459c43dfa4402abeaee3f9cf682723ee9cf226125cc3"}, + {file = "types-setuptools-69.0.0.20240115.tar.gz", hash = "sha256:1a9c863899f40cbe2053d0cd1d00ddef0330b492335467d018f73c1fec9462a3"}, + {file = "types_setuptools-69.0.0.20240115-py3-none-any.whl", hash = "sha256:7409e774c69e1810cb45052dbaed839fc30302e86a3ff945172ef2a2e7ab46f8"}, ] [[package]] From 7b793a7b5e2fdb7b2c3f0dc574539b01e74ce89c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 09:36:29 -0800 Subject: [PATCH 336/448] Bump orjson from 3.9.10 to 3.9.12 (#595) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.10 to 3.9.12. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.10...3.9.12) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 104 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/poetry.lock b/poetry.lock index a8ad2a66..a177840b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,61 +384,61 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.10" +version = "3.9.12" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c18a4da2f50050a03d1da5317388ef84a16013302a5281d6f64e4a3f406aabc4"}, - {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5148bab4d71f58948c7c39d12b14a9005b6ab35a0bdf317a8ade9a9e4d9d0bd5"}, - {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4cf7837c3b11a2dfb589f8530b3cff2bd0307ace4c301e8997e95c7468c1378e"}, - {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c62b6fa2961a1dcc51ebe88771be5319a93fd89bd247c9ddf732bc250507bc2b"}, - {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deeb3922a7a804755bbe6b5be9b312e746137a03600f488290318936c1a2d4dc"}, - {file = "orjson-3.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1234dc92d011d3554d929b6cf058ac4a24d188d97be5e04355f1b9223e98bbe9"}, - {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:06ad5543217e0e46fd7ab7ea45d506c76f878b87b1b4e369006bdb01acc05a83"}, - {file = "orjson-3.9.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fd72fab7bddce46c6826994ce1e7de145ae1e9e106ebb8eb9ce1393ca01444d"}, - {file = "orjson-3.9.10-cp310-none-win32.whl", hash = "sha256:b5b7d4a44cc0e6ff98da5d56cde794385bdd212a86563ac321ca64d7f80c80d1"}, - {file = "orjson-3.9.10-cp310-none-win_amd64.whl", hash = "sha256:61804231099214e2f84998316f3238c4c2c4aaec302df12b21a64d72e2a135c7"}, - {file = "orjson-3.9.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cff7570d492bcf4b64cc862a6e2fb77edd5e5748ad715f487628f102815165e9"}, - {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed8bc367f725dfc5cabeed1ae079d00369900231fbb5a5280cf0736c30e2adf7"}, - {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c812312847867b6335cfb264772f2a7e85b3b502d3a6b0586aa35e1858528ab1"}, - {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9edd2856611e5050004f4722922b7b1cd6268da34102667bd49d2a2b18bafb81"}, - {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:674eb520f02422546c40401f4efaf8207b5e29e420c17051cddf6c02783ff5ca"}, - {file = "orjson-3.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0dc4310da8b5f6415949bd5ef937e60aeb0eb6b16f95041b5e43e6200821fb"}, - {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e99c625b8c95d7741fe057585176b1b8783d46ed4b8932cf98ee145c4facf499"}, - {file = "orjson-3.9.10-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec6f18f96b47299c11203edfbdc34e1b69085070d9a3d1f302810cc23ad36bf3"}, - {file = "orjson-3.9.10-cp311-none-win32.whl", hash = "sha256:ce0a29c28dfb8eccd0f16219360530bc3cfdf6bf70ca384dacd36e6c650ef8e8"}, - {file = "orjson-3.9.10-cp311-none-win_amd64.whl", hash = "sha256:cf80b550092cc480a0cbd0750e8189247ff45457e5a023305f7ef1bcec811616"}, - {file = "orjson-3.9.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:602a8001bdf60e1a7d544be29c82560a7b49319a0b31d62586548835bbe2c862"}, - {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f295efcd47b6124b01255d1491f9e46f17ef40d3d7eabf7364099e463fb45f0f"}, - {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92af0d00091e744587221e79f68d617b432425a7e59328ca4c496f774a356071"}, - {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5a02360e73e7208a872bf65a7554c9f15df5fe063dc047f79738998b0506a14"}, - {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858379cbb08d84fe7583231077d9a36a1a20eb72f8c9076a45df8b083724ad1d"}, - {file = "orjson-3.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666c6fdcaac1f13eb982b649e1c311c08d7097cbda24f32612dae43648d8db8d"}, - {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3fb205ab52a2e30354640780ce4587157a9563a68c9beaf52153e1cea9aa0921"}, - {file = "orjson-3.9.10-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7ec960b1b942ee3c69323b8721df2a3ce28ff40e7ca47873ae35bfafeb4555ca"}, - {file = "orjson-3.9.10-cp312-none-win_amd64.whl", hash = "sha256:3e892621434392199efb54e69edfff9f699f6cc36dd9553c5bf796058b14b20d"}, - {file = "orjson-3.9.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8b9ba0ccd5a7f4219e67fbbe25e6b4a46ceef783c42af7dbc1da548eb28b6531"}, - {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e2ecd1d349e62e3960695214f40939bbfdcaeaaa62ccc638f8e651cf0970e5f"}, - {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f433be3b3f4c66016d5a20e5b4444ef833a1f802ced13a2d852c637f69729c1"}, - {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4689270c35d4bb3102e103ac43c3f0b76b169760aff8bcf2d401a3e0e58cdb7f"}, - {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd176f528a8151a6efc5359b853ba3cc0e82d4cd1fab9c1300c5d957dc8f48c"}, - {file = "orjson-3.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2ce5ea4f71681623f04e2b7dadede3c7435dfb5e5e2d1d0ec25b35530e277b"}, - {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:49f8ad582da6e8d2cf663c4ba5bf9f83cc052570a3a767487fec6af839b0e777"}, - {file = "orjson-3.9.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2a11b4b1a8415f105d989876a19b173f6cdc89ca13855ccc67c18efbd7cbd1f8"}, - {file = "orjson-3.9.10-cp38-none-win32.whl", hash = "sha256:a353bf1f565ed27ba71a419b2cd3db9d6151da426b61b289b6ba1422a702e643"}, - {file = "orjson-3.9.10-cp38-none-win_amd64.whl", hash = "sha256:e28a50b5be854e18d54f75ef1bb13e1abf4bc650ab9d635e4258c58e71eb6ad5"}, - {file = "orjson-3.9.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ee5926746232f627a3be1cc175b2cfad24d0170d520361f4ce3fa2fd83f09e1d"}, - {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a73160e823151f33cdc05fe2cea557c5ef12fdf276ce29bb4f1c571c8368a60"}, - {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c338ed69ad0b8f8f8920c13f529889fe0771abbb46550013e3c3d01e5174deef"}, - {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5869e8e130e99687d9e4be835116c4ebd83ca92e52e55810962446d841aba8de"}, - {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2c1e559d96a7f94a4f581e2a32d6d610df5840881a8cba8f25e446f4d792df3"}, - {file = "orjson-3.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a3a3a72c9811b56adf8bcc829b010163bb2fc308877e50e9910c9357e78521"}, - {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f8fb7f5ecf4f6355683ac6881fd64b5bb2b8a60e3ccde6ff799e48791d8f864"}, - {file = "orjson-3.9.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c943b35ecdf7123b2d81d225397efddf0bce2e81db2f3ae633ead38e85cd5ade"}, - {file = "orjson-3.9.10-cp39-none-win32.whl", hash = "sha256:fb0b361d73f6b8eeceba47cd37070b5e6c9de5beaeaa63a1cb35c7e1a73ef088"}, - {file = "orjson-3.9.10-cp39-none-win_amd64.whl", hash = "sha256:b90f340cb6397ec7a854157fac03f0c82b744abdd1c0941a024c3c29d1340aff"}, - {file = "orjson-3.9.10.tar.gz", hash = "sha256:9ebbdbd6a046c304b1845e96fbcc5559cd296b4dfd3ad2509e33c4d9ce07d6a1"}, + {file = "orjson-3.9.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6b4e2bed7d00753c438e83b613923afdd067564ff7ed696bfe3a7b073a236e07"}, + {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd1b8ec63f0bf54a50b498eedeccdca23bd7b658f81c524d18e410c203189365"}, + {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab8add018a53665042a5ae68200f1ad14c7953fa12110d12d41166f111724656"}, + {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12756a108875526b76e505afe6d6ba34960ac6b8c5ec2f35faf73ef161e97e07"}, + {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:890e7519c0c70296253660455f77e3a194554a3c45e42aa193cdebc76a02d82b"}, + {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d664880d7f016efbae97c725b243b33c2cbb4851ddc77f683fd1eec4a7894146"}, + {file = "orjson-3.9.12-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cfdaede0fa5b500314ec7b1249c7e30e871504a57004acd116be6acdda3b8ab3"}, + {file = "orjson-3.9.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6492ff5953011e1ba9ed1bf086835fd574bd0a3cbe252db8e15ed72a30479081"}, + {file = "orjson-3.9.12-cp310-none-win32.whl", hash = "sha256:29bf08e2eadb2c480fdc2e2daae58f2f013dff5d3b506edd1e02963b9ce9f8a9"}, + {file = "orjson-3.9.12-cp310-none-win_amd64.whl", hash = "sha256:0fc156fba60d6b50743337ba09f052d8afc8b64595112996d22f5fce01ab57da"}, + {file = "orjson-3.9.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2849f88a0a12b8d94579b67486cbd8f3a49e36a4cb3d3f0ab352c596078c730c"}, + {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3186b18754befa660b31c649a108a915493ea69b4fc33f624ed854ad3563ac65"}, + {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbbf313c9fb9d4f6cf9c22ced4b6682230457741daeb3d7060c5d06c2e73884a"}, + {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e8cd005b3926c3db9b63d264bd05e1bf4451787cc79a048f27f5190a9a0311"}, + {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59feb148392d9155f3bfed0a2a3209268e000c2c3c834fb8fe1a6af9392efcbf"}, + {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4ae815a172a1f073b05b9e04273e3b23e608a0858c4e76f606d2d75fcabde0c"}, + {file = "orjson-3.9.12-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed398f9a9d5a1bf55b6e362ffc80ac846af2122d14a8243a1e6510a4eabcb71e"}, + {file = "orjson-3.9.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d3cfb76600c5a1e6be91326b8f3b83035a370e727854a96d801c1ea08b708073"}, + {file = "orjson-3.9.12-cp311-none-win32.whl", hash = "sha256:a2b6f5252c92bcab3b742ddb3ac195c0fa74bed4319acd74f5d54d79ef4715dc"}, + {file = "orjson-3.9.12-cp311-none-win_amd64.whl", hash = "sha256:c95488e4aa1d078ff5776b58f66bd29d628fa59adcb2047f4efd3ecb2bd41a71"}, + {file = "orjson-3.9.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d6ce2062c4af43b92b0221ed4f445632c6bf4213f8a7da5396a122931377acd9"}, + {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:950951799967558c214cd6cceb7ceceed6f81d2c3c4135ee4a2c9c69f58aa225"}, + {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2dfaf71499d6fd4153f5c86eebb68e3ec1bf95851b030a4b55c7637a37bbdee4"}, + {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:659a8d7279e46c97661839035a1a218b61957316bf0202674e944ac5cfe7ed83"}, + {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af17fa87bccad0b7f6fd8ac8f9cbc9ee656b4552783b10b97a071337616db3e4"}, + {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd52dec9eddf4c8c74392f3fd52fa137b5f2e2bed1d9ae958d879de5f7d7cded"}, + {file = "orjson-3.9.12-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:640e2b5d8e36b970202cfd0799d11a9a4ab46cf9212332cd642101ec952df7c8"}, + {file = "orjson-3.9.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:daa438bd8024e03bcea2c5a92cd719a663a58e223fba967296b6ab9992259dbf"}, + {file = "orjson-3.9.12-cp312-none-win_amd64.whl", hash = "sha256:1bb8f657c39ecdb924d02e809f992c9aafeb1ad70127d53fb573a6a6ab59d549"}, + {file = "orjson-3.9.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f4098c7674901402c86ba6045a551a2ee345f9f7ed54eeffc7d86d155c8427e5"}, + {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5586a533998267458fad3a457d6f3cdbddbcce696c916599fa8e2a10a89b24d3"}, + {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54071b7398cd3f90e4bb61df46705ee96cb5e33e53fc0b2f47dbd9b000e238e1"}, + {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:67426651faa671b40443ea6f03065f9c8e22272b62fa23238b3efdacd301df31"}, + {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a0cd56e8ee56b203abae7d482ac0d233dbfb436bb2e2d5cbcb539fe1200a312"}, + {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a84a0c3d4841a42e2571b1c1ead20a83e2792644c5827a606c50fc8af7ca4bee"}, + {file = "orjson-3.9.12-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:09d60450cda3fa6c8ed17770c3a88473a16460cd0ff2ba74ef0df663b6fd3bb8"}, + {file = "orjson-3.9.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bc82a4db9934a78ade211cf2e07161e4f068a461c1796465d10069cb50b32a80"}, + {file = "orjson-3.9.12-cp38-none-win32.whl", hash = "sha256:61563d5d3b0019804d782137a4f32c72dc44c84e7d078b89d2d2a1adbaa47b52"}, + {file = "orjson-3.9.12-cp38-none-win_amd64.whl", hash = "sha256:410f24309fbbaa2fab776e3212a81b96a1ec6037259359a32ea79fbccfcf76aa"}, + {file = "orjson-3.9.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e773f251258dd82795fd5daeac081d00b97bacf1548e44e71245543374874bcf"}, + {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b159baecfda51c840a619948c25817d37733a4d9877fea96590ef8606468b362"}, + {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:975e72e81a249174840d5a8df977d067b0183ef1560a32998be340f7e195c730"}, + {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06e42e899dde61eb1851a9fad7f1a21b8e4be063438399b63c07839b57668f6c"}, + {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c157e999e5694475a5515942aebeed6e43f7a1ed52267c1c93dcfde7d78d421"}, + {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dde1bc7c035f2d03aa49dc8642d9c6c9b1a81f2470e02055e76ed8853cfae0c3"}, + {file = "orjson-3.9.12-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0e9d73cdbdad76a53a48f563447e0e1ce34bcecef4614eb4b146383e6e7d8c9"}, + {file = "orjson-3.9.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:96e44b21fe407b8ed48afbb3721f3c8c8ce17e345fbe232bd4651ace7317782d"}, + {file = "orjson-3.9.12-cp39-none-win32.whl", hash = "sha256:cbd0f3555205bf2a60f8812133f2452d498dbefa14423ba90fe89f32276f7abf"}, + {file = "orjson-3.9.12-cp39-none-win_amd64.whl", hash = "sha256:03ea7ee7e992532c2f4a06edd7ee1553f0644790553a118e003e3c405add41fa"}, + {file = "orjson-3.9.12.tar.gz", hash = "sha256:da908d23a3b3243632b523344403b128722a5f45e278a8343c2bb67538dff0e4"}, ] [[package]] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "a365fadab022b55a06bc1fe6b7ef8a6253066ae7cb4fa0a458bf63ea9a5c9d6d" +content-hash = "64ce1735ef92bbcd0e8b4d3ea9e68e092261932098465ceccbfd8c7d706c56c1" diff --git a/pyproject.toml b/pyproject.toml index ecc9b5e9..e404050c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.25.2" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" pook = "^1.4.0" -orjson = "^3.9.10" +orjson = "^3.9.12" [build-system] requires = ["poetry-core>=1.0.0"] From 3d371dc543cd250633fbdeef51fccffaa071692d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 13:50:05 -0800 Subject: [PATCH 337/448] Bump sphinx-autodoc-typehints from 1.25.2 to 1.25.3 (#596) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.25.2 to 1.25.3. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.25.2...1.25.3) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index a177840b..2b7d8fb0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -641,22 +641,22 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.25.2" +version = "1.25.3" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false python-versions = ">=3.8" files = [ - {file = "sphinx_autodoc_typehints-1.25.2-py3-none-any.whl", hash = "sha256:5ed05017d23ad4b937eab3bee9fae9ab0dd63f0b42aa360031f1fad47e47f673"}, - {file = "sphinx_autodoc_typehints-1.25.2.tar.gz", hash = "sha256:3cabc2537e17989b2f92e64a399425c4c8bf561ed73f087bc7414a5003616a50"}, + {file = "sphinx_autodoc_typehints-1.25.3-py3-none-any.whl", hash = "sha256:d3da7fa9a9761eff6ff09f8b1956ae3090a2d4f4ad54aebcade8e458d6340835"}, + {file = "sphinx_autodoc_typehints-1.25.3.tar.gz", hash = "sha256:70db10b391acf4e772019765991d2de0ff30ec0899b9ba137706dc0b3c4835e0"}, ] [package.dependencies] sphinx = ">=7.1.2" [package.extras] -docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)"] +docs = ["furo (>=2023.9.10)"] numpy = ["nptyping (>=2.5)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.7.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.8)"] [[package]] name = "sphinx-rtd-theme" @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "64ce1735ef92bbcd0e8b4d3ea9e68e092261932098465ceccbfd8c7d706c56c1" +content-hash = "710eb48e10f06b9c199fe2e830d49b66766b5f10810bfcdd270f7bb8c14061f7" diff --git a/pyproject.toml b/pyproject.toml index e404050c..f1d1a78c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.25.2" +sphinx-autodoc-typehints = "^1.25.3" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" pook = "^1.4.0" From 4375c8c3f3d81ef019119b00947762b850a6d52f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 13:08:56 -0800 Subject: [PATCH 338/448] Bump types-setuptools from 69.0.0.20240115 to 69.0.0.20240125 (#597) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.0.0.20240115 to 69.0.0.20240125. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2b7d8fb0..f146697d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.0.0.20240115" +version = "69.0.0.20240125" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.0.0.20240115.tar.gz", hash = "sha256:1a9c863899f40cbe2053d0cd1d00ddef0330b492335467d018f73c1fec9462a3"}, - {file = "types_setuptools-69.0.0.20240115-py3-none-any.whl", hash = "sha256:7409e774c69e1810cb45052dbaed839fc30302e86a3ff945172ef2a2e7ab46f8"}, + {file = "types-setuptools-69.0.0.20240125.tar.gz", hash = "sha256:22ad498cb585b22ce8c97ada1fccdf294a2e0dd7dc984a28535a84ea82f45b3f"}, + {file = "types_setuptools-69.0.0.20240125-py3-none-any.whl", hash = "sha256:00835f959ff24ebc32c55da8df9d46e8df25e3c4bfacb43e98b61fde51a4bc41"}, ] [[package]] From c486b06580e5e6b716fa412a32483caadd461fe2 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:17:38 -0800 Subject: [PATCH 339/448] Update README.md with setuptools (#599) --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ae63afb0..89716551 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,20 @@ Welcome to the official Python client library for the [Polygon](https://polygon.io/) REST and WebSocket API. To get started, please see the [Getting Started](https://polygon.io/docs/stocks/getting-started) section in our documentation, view the [examples](./examples/) directory for code snippets, or the [blog post](https://polygon.io/blog/polygon-io-with-python-for-stock-market-data/) with video tutorials to learn more. +## Prerequisites + +Before installing the Polygon Python client, ensure your environment has Python 3.8 or higher. While most Python environments come with setuptools installed, it is a dependency for this library. In the rare case it's not already present, you can install setuptools using pip: + +``` +pip install setuptools +``` + ## Install Please use pip to install or update to the latest stable version. ``` pip install -U polygon-api-client ``` -Requires Python >= 3.8. ## Getting started From e44ff30430cf078dbb42800f21cfdd12b46bb098 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 1 Feb 2024 11:35:41 -0800 Subject: [PATCH 340/448] Update async_websocket_rest_handler.py (#591) --- .../async_websocket_rest_handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py b/examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py index 30753269..d60a257c 100644 --- a/examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py +++ b/examples/tools/async_websocket_rest_handler/async_websocket_rest_handler.py @@ -12,6 +12,7 @@ class ApiCallHandler: def __init__(self): self.api_call_queue = asyncio.Queue() self.executor = ThreadPoolExecutor() # Thread pool for running synchronous code + self.client = RESTClient() # Assumes POLYGON_API_KEY is set in the environment async def enqueue_api_call(self, options_ticker): await self.api_call_queue.put(options_ticker) @@ -33,8 +34,7 @@ async def start_processing_api_calls(self): self.api_call_queue.task_done() def get_options_contract(self, options_ticker): - client = RESTClient() # Assumes POLYGON_API_KEY is set in the environment - return client.get_options_contract(options_ticker) + return self.client.get_options_contract(options_ticker) class MessageHandler: From 2a975fe1a726eebe8071d6b522d85410f1f9ddb1 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 1 Feb 2024 11:47:27 -0800 Subject: [PATCH 341/448] Add Docker support for polygon-api-client usage example (#600) * Add Docker support for polygon-api-client usage example * Added note re: rebuild on python script changes --- examples/tools/docker/Dockerfile | 19 +++++++++++++++ examples/tools/docker/app.py | 20 ++++++++++++++++ examples/tools/docker/readme.md | 41 ++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 examples/tools/docker/Dockerfile create mode 100644 examples/tools/docker/app.py create mode 100644 examples/tools/docker/readme.md diff --git a/examples/tools/docker/Dockerfile b/examples/tools/docker/Dockerfile new file mode 100644 index 00000000..253c1fc1 --- /dev/null +++ b/examples/tools/docker/Dockerfile @@ -0,0 +1,19 @@ +# Use an official Python runtime as a parent image +FROM python:3.8-slim + +# Set the working directory in the container +WORKDIR /usr/src/app + +# Copy the current directory contents into the container at /usr/src/app +COPY . . + +# Install any needed packages specified in requirements.txt +RUN pip install --no-cache-dir polygon-api-client + +# Set the environment variable for the Polygon API key +# Note: Replace "" with your actual API key or use Docker's --env flag when running the container to set it dynamically +# Warning: Not recommended for production or shared environments +ENV POLYGON_API_KEY= + +# Run the script when the container launches +CMD ["python", "./app.py"] diff --git a/examples/tools/docker/app.py b/examples/tools/docker/app.py new file mode 100644 index 00000000..8e5c0223 --- /dev/null +++ b/examples/tools/docker/app.py @@ -0,0 +1,20 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v2_aggs_ticker__stocksticker__range__multiplier___timespan___from___to +# https://polygon-api-client.readthedocs.io/en/latest/Aggs.html#polygon.RESTClient.list_aggs + +client = RESTClient() # POLYGON_API_KEY environment variable is used + +aggs = [] +for a in client.list_aggs( + "AAPL", + 1, + "hour", + "2024-01-30", + "2024-01-30", + limit=50000, +): + aggs.append(a) + +print(aggs) diff --git a/examples/tools/docker/readme.md b/examples/tools/docker/readme.md new file mode 100644 index 00000000..776fd70c --- /dev/null +++ b/examples/tools/docker/readme.md @@ -0,0 +1,41 @@ +# Dockerized Python Application with Polygon API Client + +This Docker setup provides a ready-to-use environment for running Python scripts that utilize the `polygon-api-client` for financial data processing. It encapsulates the Python environment and the `polygon-api-client` library in a Docker container, making it easy to deploy and run the application consistently across any system with Docker installed. This approach is particularly useful for developers looking to integrate Polygon's financial data APIs into their applications without worrying about environment inconsistencies. + +### Prerequisites + +- [Docker](https://www.docker.com/) installed on your machine +- [Polygon.io](https://polygon.io/) account and API key + +### Setup and Configuration + +1. Clone the repository or download the Dockerfile and your Python script into a directory. +2. Use Docker's `--env` flag when running the container to set the `POLYGON_API_KEY` environment variable dynamically, or replace `` in the Dockerfile with your Polygon API key (not recommended for production or shared environments). +3. Ensure your Python script (e.g., `app.py`) is in the same directory as the Dockerfile. + +### Building the Docker Image + +Any modifications to the Python script will require rebuilding the Docker image to reflect the changes in the containerized environment. Use the docker build command each time your script is updated to ensure the latest version is used in your Docker container. + +Navigate to the directory containing your Dockerfile and execute the following command to build your Docker image: + +``` +docker build -t polygon-client-app . +``` + +This command creates a Docker image named `polygon-client-app` based on the instructions in your Dockerfile. + +### Running the Docker Container + +Run your Docker container using the following command: + +``` +docker run --env POLYGON_API_KEY="" polygon-client-app +``` + +Replace `` with your actual Polygon API key. This command starts a Docker container based on the `polygon-client-app` image, sets the `POLYGON_API_KEY` environment variable to your provided API key, and runs your Python script inside the container. + +### Additional Notes + +- The Docker setup provided here is a very basic example. Depending on your specific requirements, you might need to customize the Dockerfile, such as adding volume mounts for persistent data or exposing ports for network communication. +- For more details on using the Polygon API and the `polygon-api-client` library, please refer to the [Polygon documentation](https://polygon.io/docs), the [polygon-io/client-python](https://github.com/polygon-io/client-python) repo, or the [polygon-api-client documentation](https://polygon-api-client.readthedocs.io/en/latest/). \ No newline at end of file From 61cc3ffeefadf16830912fda99a6e1ecf5b0bab3 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 1 Feb 2024 12:20:54 -0800 Subject: [PATCH 342/448] Add API key usage note to Getting Started section (#601) * Add API key usage note to Getting Started section * Update free vs paid tier wording --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 89716551..81494a78 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ pip install -U polygon-api-client To get started, please see the [Getting Started](https://polygon-api-client.readthedocs.io/en/latest/Getting-Started.html) section in our docs, view the [examples](./examples) directory for code snippets, or view the [blog post with videos](https://polygon.io/blog/polygon-io-with-python-for-stock-market-data/) to learn more. +The free tier of our API comes with usage limitations, potentially leading to rate limit errors if these are exceeded. For uninterrupted access and to support larger data requirements, we recommend reviewing our [subscription plans](https://polygon.io/pricing), which are tailored for a wide range of needs from development to high-demand applications. Refer to our pricing page for detailed information on limits and features to ensure a seamless experience, especially for real-time data processing. + ## REST API Client Import the RESTClient. ```python From 609fd4f102f65781303bea59ae401d4cf66b12e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 08:18:18 -0800 Subject: [PATCH 343/448] Bump certifi from 2023.11.17 to 2024.2.2 (#604) Bumps [certifi](https://github.com/certifi/python-certifi) from 2023.11.17 to 2024.2.2. - [Commits](https://github.com/certifi/python-certifi/compare/2023.11.17...2024.02.02) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index f146697d..20c5e1ab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -90,13 +90,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "710eb48e10f06b9c199fe2e830d49b66766b5f10810bfcdd270f7bb8c14061f7" +content-hash = "2aedc1f9bcdd5fdc19a53dc7b3b62dc34d231052e62b0e8dd1440e48613199e4" diff --git a/pyproject.toml b/pyproject.toml index f1d1a78c..8cf1a612 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ packages = [ python = "^3.8" urllib3 = "^1.26.9,<2.0" websockets = ">=10.3,<13.0" -certifi = ">=2022.5.18,<2024.0.0" +certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] black = "^23.12.1" From 01b7c71f7c46c1a994c28b21645b4c68ebd2240f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 08:23:47 -0800 Subject: [PATCH 344/448] Bump orjson from 3.9.12 to 3.9.13 (#602) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.12 to 3.9.13. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.12...3.9.13) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 104 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/poetry.lock b/poetry.lock index 20c5e1ab..45ea71ec 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,61 +384,61 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.12" +version = "3.9.13" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6b4e2bed7d00753c438e83b613923afdd067564ff7ed696bfe3a7b073a236e07"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd1b8ec63f0bf54a50b498eedeccdca23bd7b658f81c524d18e410c203189365"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab8add018a53665042a5ae68200f1ad14c7953fa12110d12d41166f111724656"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12756a108875526b76e505afe6d6ba34960ac6b8c5ec2f35faf73ef161e97e07"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:890e7519c0c70296253660455f77e3a194554a3c45e42aa193cdebc76a02d82b"}, - {file = "orjson-3.9.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d664880d7f016efbae97c725b243b33c2cbb4851ddc77f683fd1eec4a7894146"}, - {file = "orjson-3.9.12-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cfdaede0fa5b500314ec7b1249c7e30e871504a57004acd116be6acdda3b8ab3"}, - {file = "orjson-3.9.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6492ff5953011e1ba9ed1bf086835fd574bd0a3cbe252db8e15ed72a30479081"}, - {file = "orjson-3.9.12-cp310-none-win32.whl", hash = "sha256:29bf08e2eadb2c480fdc2e2daae58f2f013dff5d3b506edd1e02963b9ce9f8a9"}, - {file = "orjson-3.9.12-cp310-none-win_amd64.whl", hash = "sha256:0fc156fba60d6b50743337ba09f052d8afc8b64595112996d22f5fce01ab57da"}, - {file = "orjson-3.9.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2849f88a0a12b8d94579b67486cbd8f3a49e36a4cb3d3f0ab352c596078c730c"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3186b18754befa660b31c649a108a915493ea69b4fc33f624ed854ad3563ac65"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbbf313c9fb9d4f6cf9c22ced4b6682230457741daeb3d7060c5d06c2e73884a"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e8cd005b3926c3db9b63d264bd05e1bf4451787cc79a048f27f5190a9a0311"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59feb148392d9155f3bfed0a2a3209268e000c2c3c834fb8fe1a6af9392efcbf"}, - {file = "orjson-3.9.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4ae815a172a1f073b05b9e04273e3b23e608a0858c4e76f606d2d75fcabde0c"}, - {file = "orjson-3.9.12-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed398f9a9d5a1bf55b6e362ffc80ac846af2122d14a8243a1e6510a4eabcb71e"}, - {file = "orjson-3.9.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d3cfb76600c5a1e6be91326b8f3b83035a370e727854a96d801c1ea08b708073"}, - {file = "orjson-3.9.12-cp311-none-win32.whl", hash = "sha256:a2b6f5252c92bcab3b742ddb3ac195c0fa74bed4319acd74f5d54d79ef4715dc"}, - {file = "orjson-3.9.12-cp311-none-win_amd64.whl", hash = "sha256:c95488e4aa1d078ff5776b58f66bd29d628fa59adcb2047f4efd3ecb2bd41a71"}, - {file = "orjson-3.9.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d6ce2062c4af43b92b0221ed4f445632c6bf4213f8a7da5396a122931377acd9"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:950951799967558c214cd6cceb7ceceed6f81d2c3c4135ee4a2c9c69f58aa225"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2dfaf71499d6fd4153f5c86eebb68e3ec1bf95851b030a4b55c7637a37bbdee4"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:659a8d7279e46c97661839035a1a218b61957316bf0202674e944ac5cfe7ed83"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af17fa87bccad0b7f6fd8ac8f9cbc9ee656b4552783b10b97a071337616db3e4"}, - {file = "orjson-3.9.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd52dec9eddf4c8c74392f3fd52fa137b5f2e2bed1d9ae958d879de5f7d7cded"}, - {file = "orjson-3.9.12-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:640e2b5d8e36b970202cfd0799d11a9a4ab46cf9212332cd642101ec952df7c8"}, - {file = "orjson-3.9.12-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:daa438bd8024e03bcea2c5a92cd719a663a58e223fba967296b6ab9992259dbf"}, - {file = "orjson-3.9.12-cp312-none-win_amd64.whl", hash = "sha256:1bb8f657c39ecdb924d02e809f992c9aafeb1ad70127d53fb573a6a6ab59d549"}, - {file = "orjson-3.9.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f4098c7674901402c86ba6045a551a2ee345f9f7ed54eeffc7d86d155c8427e5"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5586a533998267458fad3a457d6f3cdbddbcce696c916599fa8e2a10a89b24d3"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54071b7398cd3f90e4bb61df46705ee96cb5e33e53fc0b2f47dbd9b000e238e1"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:67426651faa671b40443ea6f03065f9c8e22272b62fa23238b3efdacd301df31"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4a0cd56e8ee56b203abae7d482ac0d233dbfb436bb2e2d5cbcb539fe1200a312"}, - {file = "orjson-3.9.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a84a0c3d4841a42e2571b1c1ead20a83e2792644c5827a606c50fc8af7ca4bee"}, - {file = "orjson-3.9.12-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:09d60450cda3fa6c8ed17770c3a88473a16460cd0ff2ba74ef0df663b6fd3bb8"}, - {file = "orjson-3.9.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bc82a4db9934a78ade211cf2e07161e4f068a461c1796465d10069cb50b32a80"}, - {file = "orjson-3.9.12-cp38-none-win32.whl", hash = "sha256:61563d5d3b0019804d782137a4f32c72dc44c84e7d078b89d2d2a1adbaa47b52"}, - {file = "orjson-3.9.12-cp38-none-win_amd64.whl", hash = "sha256:410f24309fbbaa2fab776e3212a81b96a1ec6037259359a32ea79fbccfcf76aa"}, - {file = "orjson-3.9.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e773f251258dd82795fd5daeac081d00b97bacf1548e44e71245543374874bcf"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b159baecfda51c840a619948c25817d37733a4d9877fea96590ef8606468b362"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:975e72e81a249174840d5a8df977d067b0183ef1560a32998be340f7e195c730"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06e42e899dde61eb1851a9fad7f1a21b8e4be063438399b63c07839b57668f6c"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c157e999e5694475a5515942aebeed6e43f7a1ed52267c1c93dcfde7d78d421"}, - {file = "orjson-3.9.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dde1bc7c035f2d03aa49dc8642d9c6c9b1a81f2470e02055e76ed8853cfae0c3"}, - {file = "orjson-3.9.12-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0e9d73cdbdad76a53a48f563447e0e1ce34bcecef4614eb4b146383e6e7d8c9"}, - {file = "orjson-3.9.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:96e44b21fe407b8ed48afbb3721f3c8c8ce17e345fbe232bd4651ace7317782d"}, - {file = "orjson-3.9.12-cp39-none-win32.whl", hash = "sha256:cbd0f3555205bf2a60f8812133f2452d498dbefa14423ba90fe89f32276f7abf"}, - {file = "orjson-3.9.12-cp39-none-win_amd64.whl", hash = "sha256:03ea7ee7e992532c2f4a06edd7ee1553f0644790553a118e003e3c405add41fa"}, - {file = "orjson-3.9.12.tar.gz", hash = "sha256:da908d23a3b3243632b523344403b128722a5f45e278a8343c2bb67538dff0e4"}, + {file = "orjson-3.9.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fa6b67f8bef277c2a4aadd548d58796854e7d760964126c3209b19bccc6a74f1"}, + {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b812417199eeb169c25f67815cfb66fd8de7ff098bf57d065e8c1943a7ba5c8f"}, + {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ccd5bd222e5041069ad9d9868ab59e6dbc53ecde8d8c82b919954fbba43b46b"}, + {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaaf80957c38e9d3f796f355a80fad945e72cd745e6b64c210e635b7043b673e"}, + {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60da7316131185d0110a1848e9ad15311e6c8938ee0b5be8cbd7261e1d80ee8f"}, + {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b98cd948372f0eb219bc309dee4633db1278687161e3280d9e693b6076951d2"}, + {file = "orjson-3.9.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3869d65561f10071d3e7f35ae58fd377056f67d7aaed5222f318390c3ad30339"}, + {file = "orjson-3.9.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43fd6036b16bb6742d03dae62f7bdf8214d06dea47e4353cde7e2bd1358d186f"}, + {file = "orjson-3.9.13-cp310-none-win32.whl", hash = "sha256:0d3ba9d88e20765335260d7b25547d7c571eee2b698200f97afa7d8c7cd668fc"}, + {file = "orjson-3.9.13-cp310-none-win_amd64.whl", hash = "sha256:6e47153db080f5e87e8ba638f1a8b18995eede6b0abb93964d58cf11bcea362f"}, + {file = "orjson-3.9.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4584e8eb727bc431baaf1bf97e35a1d8a0109c924ec847395673dfd5f4ef6d6f"}, + {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f37f0cdd026ef777a4336e599d8194c8357fc14760c2a5ddcfdf1965d45504b"}, + {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d714595d81efab11b42bccd119977d94b25d12d3a806851ff6bfd286a4bce960"}, + {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9171e8e1a1f221953e38e84ae0abffe8759002fd8968106ee379febbb5358b33"}, + {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ab9dbdec3f13f3ea6f937564ce21651844cfbf2725099f2f490426acf683c23"}, + {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:811ac076855e33e931549340288e0761873baf29276ad00f221709933c644330"}, + {file = "orjson-3.9.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:860d0f5b42d0c0afd73fa4177709f6e1b966ba691fcd72175affa902052a81d6"}, + {file = "orjson-3.9.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:838b898e8c1f26eb6b8d81b180981273f6f5110c76c22c384979aca854194f1b"}, + {file = "orjson-3.9.13-cp311-none-win32.whl", hash = "sha256:d3222db9df629ef3c3673124f2e05fb72bc4a320c117e953fec0d69dde82e36d"}, + {file = "orjson-3.9.13-cp311-none-win_amd64.whl", hash = "sha256:978117122ca4cc59b28af5322253017f6c5fc03dbdda78c7f4b94ae984c8dd43"}, + {file = "orjson-3.9.13-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:031df1026c7ea8303332d78711f180231e3ae8b564271fb748a03926587c5546"}, + {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fd9a2101d04e85086ea6198786a3f016e45475f800712e6833e14bf9ce2832f"}, + {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:446d9ad04204e79229ae19502daeea56479e55cbc32634655d886f5a39e91b44"}, + {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b57c0954a9fdd2b05b9cec0f5a12a0bdce5bf021a5b3b09323041613972481ab"}, + {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:266e55c83f81248f63cc93d11c5e3a53df49a5d2598fa9e9db5f99837a802d5d"}, + {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31372ba3a9fe8ad118e7d22fba46bbc18e89039e3bfa89db7bc8c18ee722dca8"}, + {file = "orjson-3.9.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3b0c4da61f39899561e08e571f54472a09fa71717d9797928af558175ae5243"}, + {file = "orjson-3.9.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cc03a35bfc71c8ebf96ce49b82c2a7be6af4b3cd3ac34166fdb42ac510bbfff"}, + {file = "orjson-3.9.13-cp312-none-win_amd64.whl", hash = "sha256:49b7e3fe861cb246361825d1a238f2584ed8ea21e714bf6bb17cebb86772e61c"}, + {file = "orjson-3.9.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:62e9a99879c4d5a04926ac2518a992134bfa00d546ea5a4cae4b9be454d35a22"}, + {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d92a3e835a5100f1d5b566fff79217eab92223ca31900dba733902a182a35ab0"}, + {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23f21faf072ed3b60b5954686f98157e073f6a8068eaa58dbde83e87212eda84"}, + {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:828c502bb261588f7de897e06cb23c4b122997cb039d2014cb78e7dabe92ef0c"}, + {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16946d095212a3dec552572c5d9bca7afa40f3116ad49695a397be07d529f1fa"}, + {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3deadd8dc0e9ff844b5b656fa30a48dbee1c3b332d8278302dd9637f6b09f627"}, + {file = "orjson-3.9.13-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9b1b5adc5adf596c59dca57156b71ad301d73956f5bab4039b0e34dbf50b9fa0"}, + {file = "orjson-3.9.13-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ddc089315d030c54f0f03fb38286e2667c05009a78d659f108a8efcfbdf2e585"}, + {file = "orjson-3.9.13-cp38-none-win32.whl", hash = "sha256:ae77275a28667d9c82d4522b681504642055efa0368d73108511647c6499b31c"}, + {file = "orjson-3.9.13-cp38-none-win_amd64.whl", hash = "sha256:730385fdb99a21fce9bb84bb7fcbda72c88626facd74956bda712834b480729d"}, + {file = "orjson-3.9.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7e8e4a571d958910272af8d53a9cbe6599f9f5fd496a1bc51211183bb2072cbd"}, + {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfad553a36548262e7da0f3a7464270e13900b898800fb571a5d4b298c3f8356"}, + {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0d691c44604941945b00e0a13b19a7d9c1a19511abadf0080f373e98fdeb6b31"}, + {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8c83718346de08d68b3cb1105c5d91e5fc39885d8610fdda16613d4e3941459"}, + {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ef57a53bfc2091a7cd50a640d9ae866bd7d92a5225a1bab6baa60ef62583f2"}, + {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9156b96afa38db71344522f5517077eaedf62fcd2c9148392ff93d801128809c"}, + {file = "orjson-3.9.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31fb66b41fb2c4c817d9610f0bc7d31345728d7b5295ac78b63603407432a2b2"}, + {file = "orjson-3.9.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8a730bf07feacb0863974e67b206b7c503a62199de1cece2eb0d4c233ec29c11"}, + {file = "orjson-3.9.13-cp39-none-win32.whl", hash = "sha256:5ef58869f3399acbbe013518d8b374ee9558659eef14bca0984f67cb1fbd3c37"}, + {file = "orjson-3.9.13-cp39-none-win_amd64.whl", hash = "sha256:9bcf56efdb83244cde070e82a69c0f03c47c235f0a5cb6c81d9da23af7fbaae4"}, + {file = "orjson-3.9.13.tar.gz", hash = "sha256:fc6bc65b0cf524ee042e0bc2912b9206ef242edfba7426cf95763e4af01f527a"}, ] [[package]] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "2aedc1f9bcdd5fdc19a53dc7b3b62dc34d231052e62b0e8dd1440e48613199e4" +content-hash = "53b17f952d05b15b988cb2af878bf9c8f9f6877df6831d3cfd4df61b7d0a82c1" diff --git a/pyproject.toml b/pyproject.toml index 8cf1a612..80e0d8fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^1.25.3" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" pook = "^1.4.0" -orjson = "^3.9.12" +orjson = "^3.9.13" [build-system] requires = ["poetry-core>=1.0.0"] From 07a243781168c90e8aa8d33cccae64670378b233 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 07:52:38 -0800 Subject: [PATCH 345/448] Bump pook from 1.4.0 to 1.4.1 (#607) Bumps [pook](https://github.com/h2non/pook) from 1.4.0 to 1.4.1. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v1.4.0...v1.4.1) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 45ea71ec..ba60aebb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -491,13 +491,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.4.0" +version = "1.4.1" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = ">=3.8" files = [ - {file = "pook-1.4.0-py3-none-any.whl", hash = "sha256:1b47fcc75a8a063fc977ee55c7360a0f70bcf3ac0de9be584c8ec09cb127da49"}, - {file = "pook-1.4.0.tar.gz", hash = "sha256:9261e576e7fe9e9df22f77ffe630560dc6297945382cb4ab9d9c1bb33ddfc62b"}, + {file = "pook-1.4.1-py3-none-any.whl", hash = "sha256:429ae72d2e808db2e5ea9f80d25783139222d9c27b5145ea210f1b5a14f41c92"}, + {file = "pook-1.4.1.tar.gz", hash = "sha256:00081a1987428f99e79a44ef0c6afc6c1c6cee8895043f586528b51a4043b0c5"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "53b17f952d05b15b988cb2af878bf9c8f9f6877df6831d3cfd4df61b7d0a82c1" +content-hash = "2c67897dbf7a62bba2beb41885d6534e7595c7f320e209d556760b4b11ea165d" diff --git a/pyproject.toml b/pyproject.toml index 80e0d8fe..e4f720e7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^2.0.0" sphinx-autodoc-typehints = "^1.25.3" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" -pook = "^1.4.0" +pook = "^1.4.1" orjson = "^3.9.13" [build-system] From 3dbb0b3cf013a3a79d73aa1cece0072babd29456 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 08:50:37 -0800 Subject: [PATCH 346/448] Bump sphinx-autodoc-typehints from 1.25.3 to 2.0.0 (#606) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 1.25.3 to 2.0.0. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/1.25.3...2.0.0) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index ba60aebb..510708cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -641,13 +641,13 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" -version = "1.25.3" +version = "2.0.0" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false python-versions = ">=3.8" files = [ - {file = "sphinx_autodoc_typehints-1.25.3-py3-none-any.whl", hash = "sha256:d3da7fa9a9761eff6ff09f8b1956ae3090a2d4f4ad54aebcade8e458d6340835"}, - {file = "sphinx_autodoc_typehints-1.25.3.tar.gz", hash = "sha256:70db10b391acf4e772019765991d2de0ff30ec0899b9ba137706dc0b3c4835e0"}, + {file = "sphinx_autodoc_typehints-2.0.0-py3-none-any.whl", hash = "sha256:12c0e161f6fe191c2cdfd8fa3caea271f5387d9fbc67ebcd6f4f1f24ce880993"}, + {file = "sphinx_autodoc_typehints-2.0.0.tar.gz", hash = "sha256:7f2cdac2e70fd9787926b6e9e541cd4ded1e838d2b46fda2a1bb0a75ec5b7f3a"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "2c67897dbf7a62bba2beb41885d6534e7595c7f320e209d556760b4b11ea165d" +content-hash = "a68b886d2197a0de0ffe85fa60e3c3524b81e4e8e8f632fd84a8b5a0b4681998" diff --git a/pyproject.toml b/pyproject.toml index e4f720e7..cc998158 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^1.25.3" +sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" pook = "^1.4.1" From b58ff8ad0c4d9e2f91b56fc453a65dfc7b838fda Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Feb 2024 08:19:29 -0800 Subject: [PATCH 347/448] Bump orjson from 3.9.13 to 3.9.14 (#612) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.13 to 3.9.14. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.13...3.9.14) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 104 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/poetry.lock b/poetry.lock index 510708cc..eb0f5c34 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,61 +384,61 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.13" +version = "3.9.14" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fa6b67f8bef277c2a4aadd548d58796854e7d760964126c3209b19bccc6a74f1"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b812417199eeb169c25f67815cfb66fd8de7ff098bf57d065e8c1943a7ba5c8f"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ccd5bd222e5041069ad9d9868ab59e6dbc53ecde8d8c82b919954fbba43b46b"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaaf80957c38e9d3f796f355a80fad945e72cd745e6b64c210e635b7043b673e"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60da7316131185d0110a1848e9ad15311e6c8938ee0b5be8cbd7261e1d80ee8f"}, - {file = "orjson-3.9.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b98cd948372f0eb219bc309dee4633db1278687161e3280d9e693b6076951d2"}, - {file = "orjson-3.9.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3869d65561f10071d3e7f35ae58fd377056f67d7aaed5222f318390c3ad30339"}, - {file = "orjson-3.9.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43fd6036b16bb6742d03dae62f7bdf8214d06dea47e4353cde7e2bd1358d186f"}, - {file = "orjson-3.9.13-cp310-none-win32.whl", hash = "sha256:0d3ba9d88e20765335260d7b25547d7c571eee2b698200f97afa7d8c7cd668fc"}, - {file = "orjson-3.9.13-cp310-none-win_amd64.whl", hash = "sha256:6e47153db080f5e87e8ba638f1a8b18995eede6b0abb93964d58cf11bcea362f"}, - {file = "orjson-3.9.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4584e8eb727bc431baaf1bf97e35a1d8a0109c924ec847395673dfd5f4ef6d6f"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f37f0cdd026ef777a4336e599d8194c8357fc14760c2a5ddcfdf1965d45504b"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d714595d81efab11b42bccd119977d94b25d12d3a806851ff6bfd286a4bce960"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9171e8e1a1f221953e38e84ae0abffe8759002fd8968106ee379febbb5358b33"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ab9dbdec3f13f3ea6f937564ce21651844cfbf2725099f2f490426acf683c23"}, - {file = "orjson-3.9.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:811ac076855e33e931549340288e0761873baf29276ad00f221709933c644330"}, - {file = "orjson-3.9.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:860d0f5b42d0c0afd73fa4177709f6e1b966ba691fcd72175affa902052a81d6"}, - {file = "orjson-3.9.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:838b898e8c1f26eb6b8d81b180981273f6f5110c76c22c384979aca854194f1b"}, - {file = "orjson-3.9.13-cp311-none-win32.whl", hash = "sha256:d3222db9df629ef3c3673124f2e05fb72bc4a320c117e953fec0d69dde82e36d"}, - {file = "orjson-3.9.13-cp311-none-win_amd64.whl", hash = "sha256:978117122ca4cc59b28af5322253017f6c5fc03dbdda78c7f4b94ae984c8dd43"}, - {file = "orjson-3.9.13-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:031df1026c7ea8303332d78711f180231e3ae8b564271fb748a03926587c5546"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fd9a2101d04e85086ea6198786a3f016e45475f800712e6833e14bf9ce2832f"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:446d9ad04204e79229ae19502daeea56479e55cbc32634655d886f5a39e91b44"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b57c0954a9fdd2b05b9cec0f5a12a0bdce5bf021a5b3b09323041613972481ab"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:266e55c83f81248f63cc93d11c5e3a53df49a5d2598fa9e9db5f99837a802d5d"}, - {file = "orjson-3.9.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31372ba3a9fe8ad118e7d22fba46bbc18e89039e3bfa89db7bc8c18ee722dca8"}, - {file = "orjson-3.9.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3b0c4da61f39899561e08e571f54472a09fa71717d9797928af558175ae5243"}, - {file = "orjson-3.9.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cc03a35bfc71c8ebf96ce49b82c2a7be6af4b3cd3ac34166fdb42ac510bbfff"}, - {file = "orjson-3.9.13-cp312-none-win_amd64.whl", hash = "sha256:49b7e3fe861cb246361825d1a238f2584ed8ea21e714bf6bb17cebb86772e61c"}, - {file = "orjson-3.9.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:62e9a99879c4d5a04926ac2518a992134bfa00d546ea5a4cae4b9be454d35a22"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d92a3e835a5100f1d5b566fff79217eab92223ca31900dba733902a182a35ab0"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23f21faf072ed3b60b5954686f98157e073f6a8068eaa58dbde83e87212eda84"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:828c502bb261588f7de897e06cb23c4b122997cb039d2014cb78e7dabe92ef0c"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16946d095212a3dec552572c5d9bca7afa40f3116ad49695a397be07d529f1fa"}, - {file = "orjson-3.9.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3deadd8dc0e9ff844b5b656fa30a48dbee1c3b332d8278302dd9637f6b09f627"}, - {file = "orjson-3.9.13-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9b1b5adc5adf596c59dca57156b71ad301d73956f5bab4039b0e34dbf50b9fa0"}, - {file = "orjson-3.9.13-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ddc089315d030c54f0f03fb38286e2667c05009a78d659f108a8efcfbdf2e585"}, - {file = "orjson-3.9.13-cp38-none-win32.whl", hash = "sha256:ae77275a28667d9c82d4522b681504642055efa0368d73108511647c6499b31c"}, - {file = "orjson-3.9.13-cp38-none-win_amd64.whl", hash = "sha256:730385fdb99a21fce9bb84bb7fcbda72c88626facd74956bda712834b480729d"}, - {file = "orjson-3.9.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7e8e4a571d958910272af8d53a9cbe6599f9f5fd496a1bc51211183bb2072cbd"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfad553a36548262e7da0f3a7464270e13900b898800fb571a5d4b298c3f8356"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0d691c44604941945b00e0a13b19a7d9c1a19511abadf0080f373e98fdeb6b31"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8c83718346de08d68b3cb1105c5d91e5fc39885d8610fdda16613d4e3941459"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ef57a53bfc2091a7cd50a640d9ae866bd7d92a5225a1bab6baa60ef62583f2"}, - {file = "orjson-3.9.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9156b96afa38db71344522f5517077eaedf62fcd2c9148392ff93d801128809c"}, - {file = "orjson-3.9.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31fb66b41fb2c4c817d9610f0bc7d31345728d7b5295ac78b63603407432a2b2"}, - {file = "orjson-3.9.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8a730bf07feacb0863974e67b206b7c503a62199de1cece2eb0d4c233ec29c11"}, - {file = "orjson-3.9.13-cp39-none-win32.whl", hash = "sha256:5ef58869f3399acbbe013518d8b374ee9558659eef14bca0984f67cb1fbd3c37"}, - {file = "orjson-3.9.13-cp39-none-win_amd64.whl", hash = "sha256:9bcf56efdb83244cde070e82a69c0f03c47c235f0a5cb6c81d9da23af7fbaae4"}, - {file = "orjson-3.9.13.tar.gz", hash = "sha256:fc6bc65b0cf524ee042e0bc2912b9206ef242edfba7426cf95763e4af01f527a"}, + {file = "orjson-3.9.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:793f6c9448ab6eb7d4974b4dde3f230345c08ca6c7995330fbceeb43a5c8aa5e"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bc7928d161840096adc956703494b5c0193ede887346f028216cac0af87500"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58b36f54da759602d8e2f7dad958752d453dfe2c7122767bc7f765e17dc59959"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:abcda41ecdc950399c05eff761c3de91485d9a70d8227cb599ad3a66afe93bcc"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df76ecd17b1b3627bddfd689faaf206380a1a38cc9f6c4075bd884eaedcf46c2"}, + {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d450a8e0656efb5d0fcb062157b918ab02dcca73278975b4ee9ea49e2fcf5bd5"}, + {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:95c03137b0cf66517c8baa65770507a756d3a89489d8ecf864ea92348e1beabe"}, + {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20837e10835c98973673406d6798e10f821e7744520633811a5a3d809762d8cc"}, + {file = "orjson-3.9.14-cp310-none-win32.whl", hash = "sha256:1f7b6f3ef10ae8e3558abb729873d033dbb5843507c66b1c0767e32502ba96bb"}, + {file = "orjson-3.9.14-cp310-none-win_amd64.whl", hash = "sha256:ea890e6dc1711aeec0a33b8520e395c2f3d59ead5b4351a788e06bf95fc7ba81"}, + {file = "orjson-3.9.14-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c19009ff37f033c70acd04b636380379499dac2cba27ae7dfc24f304deabbc81"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19cdea0664aec0b7f385be84986d4defd3334e9c3c799407686ee1c26f7b8251"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:135d518f73787ce323b1a5e21fb854fe22258d7a8ae562b81a49d6c7f826f2a3"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2cf1d0557c61c75e18cf7d69fb689b77896e95553e212c0cc64cf2087944b84"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7c11667421df2d8b18b021223505dcc3ee51be518d54e4dc49161ac88ac2b87"}, + {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eefc41ba42e75ed88bc396d8fe997beb20477f3e7efa000cd7a47eda452fbb2"}, + {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:917311d6a64d1c327c0dfda1e41f3966a7fb72b11ca7aa2e7a68fcccc7db35d9"}, + {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4dc1c132259b38d12c6587d190cd09cd76e3b5273ce71fe1372437b4cbc65f6f"}, + {file = "orjson-3.9.14-cp311-none-win32.whl", hash = "sha256:6f39a10408478f4c05736a74da63727a1ae0e83e3533d07b19443400fe8591ca"}, + {file = "orjson-3.9.14-cp311-none-win_amd64.whl", hash = "sha256:26280a7fcb62d8257f634c16acebc3bec626454f9ab13558bbf7883b9140760e"}, + {file = "orjson-3.9.14-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:08e722a8d06b13b67a51f247a24938d1a94b4b3862e40e0eef3b2e98c99cd04c"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2591faa0c031cf3f57e5bce1461cfbd6160f3f66b5a72609a130924917cb07d"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2450d87dd7b4f277f4c5598faa8b49a0c197b91186c47a2c0b88e15531e4e3e"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90903d2908158a2c9077a06f11e27545de610af690fb178fd3ba6b32492d4d1c"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce6f095eef0026eae76fc212f20f786011ecf482fc7df2f4c272a8ae6dd7b1ef"}, + {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:751250a31fef2bac05a2da2449aae7142075ea26139271f169af60456d8ad27a"}, + {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9a1af21160a38ee8be3f4fcf24ee4b99e6184cadc7f915d599f073f478a94d2c"}, + {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:449bf090b2aa4e019371d7511a6ea8a5a248139205c27d1834bb4b1e3c44d936"}, + {file = "orjson-3.9.14-cp312-none-win_amd64.whl", hash = "sha256:a603161318ff699784943e71f53899983b7dee571b4dd07c336437c9c5a272b0"}, + {file = "orjson-3.9.14-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:814f288c011efdf8f115c5ebcc1ab94b11da64b207722917e0ceb42f52ef30a3"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88cafb100af68af3b9b29b5ccd09fdf7a48c63327916c8c923a94c336d38dd3"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba3518b999f88882ade6686f1b71e207b52e23546e180499be5bbb63a2f9c6e6"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978f416bbff9da8d2091e3cf011c92da68b13f2c453dcc2e8109099b2a19d234"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75fc593cf836f631153d0e21beaeb8d26e144445c73645889335c2247fcd71a0"}, + {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d1528db3c7554f9d6eeb09df23cb80dd5177ec56eeb55cc5318826928de506"}, + {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7183cc68ee2113b19b0b8714221e5e3b07b3ba10ca2bb108d78fd49cefaae101"}, + {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df3266d54246cb56b8bb17fa908660d2a0f2e3f63fbc32451ffc1b1505051d07"}, + {file = "orjson-3.9.14-cp38-none-win32.whl", hash = "sha256:7913079b029e1b3501854c9a78ad938ed40d61fe09bebab3c93e60ff1301b189"}, + {file = "orjson-3.9.14-cp38-none-win_amd64.whl", hash = "sha256:29512eb925b620e5da2fd7585814485c67cc6ba4fe739a0a700c50467a8a8065"}, + {file = "orjson-3.9.14-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5bf597530544db27a8d76aced49cfc817ee9503e0a4ebf0109cd70331e7bbe0c"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac650d49366fa41fe702e054cb560171a8634e2865537e91f09a8d05ea5b1d37"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:236230433a9a4968ab895140514c308fdf9f607cb8bee178a04372b771123860"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3014ccbda9be0b1b5f8ea895121df7e6524496b3908f4397ff02e923bcd8f6dd"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac0c7eae7ad3a223bde690565442f8a3d620056bd01196f191af8be58a5248e1"}, + {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca33fdd0b38839b01912c57546d4f412ba7bfa0faf9bf7453432219aec2df07"}, + {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f75823cc1674a840a151e999a7dfa0d86c911150dd6f951d0736ee9d383bf415"}, + {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f52ac2eb49e99e7373f62e2a68428c6946cda52ce89aa8fe9f890c7278e2d3a"}, + {file = "orjson-3.9.14-cp39-none-win32.whl", hash = "sha256:0572f174f50b673b7df78680fb52cd0087a8585a6d06d295a5f790568e1064c6"}, + {file = "orjson-3.9.14-cp39-none-win_amd64.whl", hash = "sha256:ab90c02cb264250b8a58cedcc72ed78a4a257d956c8d3c8bebe9751b818dfad8"}, + {file = "orjson-3.9.14.tar.gz", hash = "sha256:06fb40f8e49088ecaa02f1162581d39e2cf3fd9dbbfe411eb2284147c99bad79"}, ] [[package]] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "a68b886d2197a0de0ffe85fa60e3c3524b81e4e8e8f632fd84a8b5a0b4681998" +content-hash = "e921f26781dd2301f9437cb799f0ed58b8aef48a20976888928ae4cc88e038d2" diff --git a/pyproject.toml b/pyproject.toml index cc998158..a6bb6fff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" types-setuptools = "^69.0.0" pook = "^1.4.1" -orjson = "^3.9.13" +orjson = "^3.9.14" [build-system] requires = ["poetry-core>=1.0.0"] From 1f96037cabf50394b14cce510637897e2716531b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Feb 2024 08:26:24 -0800 Subject: [PATCH 348/448] Bump types-setuptools from 69.0.0.20240125 to 69.1.0.20240217 (#610) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.0.0.20240125 to 69.1.0.20240217. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index eb0f5c34..238b65dc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.0.0.20240125" +version = "69.1.0.20240217" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.0.0.20240125.tar.gz", hash = "sha256:22ad498cb585b22ce8c97ada1fccdf294a2e0dd7dc984a28535a84ea82f45b3f"}, - {file = "types_setuptools-69.0.0.20240125-py3-none-any.whl", hash = "sha256:00835f959ff24ebc32c55da8df9d46e8df25e3c4bfacb43e98b61fde51a4bc41"}, + {file = "types-setuptools-69.1.0.20240217.tar.gz", hash = "sha256:243fecc8850b6f7fbfa84bab18ec93407046a4e91130056fd5a7caef971aaff9"}, + {file = "types_setuptools-69.1.0.20240217-py3-none-any.whl", hash = "sha256:8b60e14a652b48bda292801c5a0c1251c190ad587c295f7839e901634913bb96"}, ] [[package]] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e921f26781dd2301f9437cb799f0ed58b8aef48a20976888928ae4cc88e038d2" +content-hash = "415256e6067f8ea8ebc57c1ed9defdd40c8345c06d1a1ffc0d0862159072304e" diff --git a/pyproject.toml b/pyproject.toml index a6bb6fff..7334cac3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" -types-setuptools = "^69.0.0" +types-setuptools = "^69.1.0" pook = "^1.4.1" orjson = "^3.9.14" From b0824026cd57686d2ac870badfbf14ceffc69ce2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Feb 2024 08:46:37 -0800 Subject: [PATCH 349/448] Bump pook from 1.4.1 to 1.4.2 (#611) Bumps [pook](https://github.com/h2non/pook) from 1.4.1 to 1.4.2. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v1.4.1...v1.4.2) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 238b65dc..ea30479f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -491,13 +491,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.4.1" +version = "1.4.2" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = ">=3.8" files = [ - {file = "pook-1.4.1-py3-none-any.whl", hash = "sha256:429ae72d2e808db2e5ea9f80d25783139222d9c27b5145ea210f1b5a14f41c92"}, - {file = "pook-1.4.1.tar.gz", hash = "sha256:00081a1987428f99e79a44ef0c6afc6c1c6cee8895043f586528b51a4043b0c5"}, + {file = "pook-1.4.2-py3-none-any.whl", hash = "sha256:a9be6a29931f2fa77347ae74d5d42758f26497dccb4f9f811fb07a4f196ec772"}, + {file = "pook-1.4.2.tar.gz", hash = "sha256:0d8fa419f86fd258cb3c38779b72ff2e382421b060c9ee1beaddf2ea050d969b"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "415256e6067f8ea8ebc57c1ed9defdd40c8345c06d1a1ffc0d0862159072304e" +content-hash = "e76ec445ed66ee57d8addb2bcf33162e21d0d3537f24588942f5c17fe8778c47" diff --git a/pyproject.toml b/pyproject.toml index 7334cac3..e4663ac3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^2.0.0" sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" types-setuptools = "^69.1.0" -pook = "^1.4.1" +pook = "^1.4.2" orjson = "^3.9.14" [build-system] From f5c7acc024ce99ef8d2918cc3b6e135d8d51955d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 09:46:03 -0800 Subject: [PATCH 350/448] Bump orjson from 3.9.14 to 3.9.15 (#615) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.14 to 3.9.15. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.14...3.9.15) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 104 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/poetry.lock b/poetry.lock index ea30479f..11488b06 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,61 +384,61 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.14" +version = "3.9.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:793f6c9448ab6eb7d4974b4dde3f230345c08ca6c7995330fbceeb43a5c8aa5e"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bc7928d161840096adc956703494b5c0193ede887346f028216cac0af87500"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58b36f54da759602d8e2f7dad958752d453dfe2c7122767bc7f765e17dc59959"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:abcda41ecdc950399c05eff761c3de91485d9a70d8227cb599ad3a66afe93bcc"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df76ecd17b1b3627bddfd689faaf206380a1a38cc9f6c4075bd884eaedcf46c2"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d450a8e0656efb5d0fcb062157b918ab02dcca73278975b4ee9ea49e2fcf5bd5"}, - {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:95c03137b0cf66517c8baa65770507a756d3a89489d8ecf864ea92348e1beabe"}, - {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20837e10835c98973673406d6798e10f821e7744520633811a5a3d809762d8cc"}, - {file = "orjson-3.9.14-cp310-none-win32.whl", hash = "sha256:1f7b6f3ef10ae8e3558abb729873d033dbb5843507c66b1c0767e32502ba96bb"}, - {file = "orjson-3.9.14-cp310-none-win_amd64.whl", hash = "sha256:ea890e6dc1711aeec0a33b8520e395c2f3d59ead5b4351a788e06bf95fc7ba81"}, - {file = "orjson-3.9.14-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c19009ff37f033c70acd04b636380379499dac2cba27ae7dfc24f304deabbc81"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19cdea0664aec0b7f385be84986d4defd3334e9c3c799407686ee1c26f7b8251"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:135d518f73787ce323b1a5e21fb854fe22258d7a8ae562b81a49d6c7f826f2a3"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2cf1d0557c61c75e18cf7d69fb689b77896e95553e212c0cc64cf2087944b84"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7c11667421df2d8b18b021223505dcc3ee51be518d54e4dc49161ac88ac2b87"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eefc41ba42e75ed88bc396d8fe997beb20477f3e7efa000cd7a47eda452fbb2"}, - {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:917311d6a64d1c327c0dfda1e41f3966a7fb72b11ca7aa2e7a68fcccc7db35d9"}, - {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4dc1c132259b38d12c6587d190cd09cd76e3b5273ce71fe1372437b4cbc65f6f"}, - {file = "orjson-3.9.14-cp311-none-win32.whl", hash = "sha256:6f39a10408478f4c05736a74da63727a1ae0e83e3533d07b19443400fe8591ca"}, - {file = "orjson-3.9.14-cp311-none-win_amd64.whl", hash = "sha256:26280a7fcb62d8257f634c16acebc3bec626454f9ab13558bbf7883b9140760e"}, - {file = "orjson-3.9.14-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:08e722a8d06b13b67a51f247a24938d1a94b4b3862e40e0eef3b2e98c99cd04c"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2591faa0c031cf3f57e5bce1461cfbd6160f3f66b5a72609a130924917cb07d"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2450d87dd7b4f277f4c5598faa8b49a0c197b91186c47a2c0b88e15531e4e3e"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90903d2908158a2c9077a06f11e27545de610af690fb178fd3ba6b32492d4d1c"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce6f095eef0026eae76fc212f20f786011ecf482fc7df2f4c272a8ae6dd7b1ef"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:751250a31fef2bac05a2da2449aae7142075ea26139271f169af60456d8ad27a"}, - {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9a1af21160a38ee8be3f4fcf24ee4b99e6184cadc7f915d599f073f478a94d2c"}, - {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:449bf090b2aa4e019371d7511a6ea8a5a248139205c27d1834bb4b1e3c44d936"}, - {file = "orjson-3.9.14-cp312-none-win_amd64.whl", hash = "sha256:a603161318ff699784943e71f53899983b7dee571b4dd07c336437c9c5a272b0"}, - {file = "orjson-3.9.14-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:814f288c011efdf8f115c5ebcc1ab94b11da64b207722917e0ceb42f52ef30a3"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88cafb100af68af3b9b29b5ccd09fdf7a48c63327916c8c923a94c336d38dd3"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba3518b999f88882ade6686f1b71e207b52e23546e180499be5bbb63a2f9c6e6"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978f416bbff9da8d2091e3cf011c92da68b13f2c453dcc2e8109099b2a19d234"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75fc593cf836f631153d0e21beaeb8d26e144445c73645889335c2247fcd71a0"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d1528db3c7554f9d6eeb09df23cb80dd5177ec56eeb55cc5318826928de506"}, - {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7183cc68ee2113b19b0b8714221e5e3b07b3ba10ca2bb108d78fd49cefaae101"}, - {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df3266d54246cb56b8bb17fa908660d2a0f2e3f63fbc32451ffc1b1505051d07"}, - {file = "orjson-3.9.14-cp38-none-win32.whl", hash = "sha256:7913079b029e1b3501854c9a78ad938ed40d61fe09bebab3c93e60ff1301b189"}, - {file = "orjson-3.9.14-cp38-none-win_amd64.whl", hash = "sha256:29512eb925b620e5da2fd7585814485c67cc6ba4fe739a0a700c50467a8a8065"}, - {file = "orjson-3.9.14-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5bf597530544db27a8d76aced49cfc817ee9503e0a4ebf0109cd70331e7bbe0c"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac650d49366fa41fe702e054cb560171a8634e2865537e91f09a8d05ea5b1d37"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:236230433a9a4968ab895140514c308fdf9f607cb8bee178a04372b771123860"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3014ccbda9be0b1b5f8ea895121df7e6524496b3908f4397ff02e923bcd8f6dd"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac0c7eae7ad3a223bde690565442f8a3d620056bd01196f191af8be58a5248e1"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca33fdd0b38839b01912c57546d4f412ba7bfa0faf9bf7453432219aec2df07"}, - {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f75823cc1674a840a151e999a7dfa0d86c911150dd6f951d0736ee9d383bf415"}, - {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f52ac2eb49e99e7373f62e2a68428c6946cda52ce89aa8fe9f890c7278e2d3a"}, - {file = "orjson-3.9.14-cp39-none-win32.whl", hash = "sha256:0572f174f50b673b7df78680fb52cd0087a8585a6d06d295a5f790568e1064c6"}, - {file = "orjson-3.9.14-cp39-none-win_amd64.whl", hash = "sha256:ab90c02cb264250b8a58cedcc72ed78a4a257d956c8d3c8bebe9751b818dfad8"}, - {file = "orjson-3.9.14.tar.gz", hash = "sha256:06fb40f8e49088ecaa02f1162581d39e2cf3fd9dbbfe411eb2284147c99bad79"}, + {file = "orjson-3.9.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fbbeb3c9b2edb5fd044b2a070f127a0ac456ffd079cb82746fc84af01ef021a4"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b66bcc5670e8a6b78f0313bcb74774c8291f6f8aeef10fe70e910b8040f3ab75"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2973474811db7b35c30248d1129c64fd2bdf40d57d84beed2a9a379a6f57d0ab"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fe41b6f72f52d3da4db524c8653e46243c8c92df826ab5ffaece2dba9cccd58"}, + {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4228aace81781cc9d05a3ec3a6d2673a1ad0d8725b4e915f1089803e9efd2b99"}, + {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f7b65bfaf69493c73423ce9db66cfe9138b2f9ef62897486417a8fcb0a92bfe"}, + {file = "orjson-3.9.15-cp310-none-win32.whl", hash = "sha256:2d99e3c4c13a7b0fb3792cc04c2829c9db07838fb6973e578b85c1745e7d0ce7"}, + {file = "orjson-3.9.15-cp310-none-win_amd64.whl", hash = "sha256:b725da33e6e58e4a5d27958568484aa766e825e93aa20c26c91168be58e08cbb"}, + {file = "orjson-3.9.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c8e8fe01e435005d4421f183038fc70ca85d2c1e490f51fb972db92af6e047c2"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87f1097acb569dde17f246faa268759a71a2cb8c96dd392cd25c668b104cad2f"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff0f9913d82e1d1fadbd976424c316fbc4d9c525c81d047bbdd16bd27dd98cfc"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8055ec598605b0077e29652ccfe9372247474375e0e3f5775c91d9434e12d6b1"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6768a327ea1ba44c9114dba5fdda4a214bdb70129065cd0807eb5f010bfcbb5"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12365576039b1a5a47df01aadb353b68223da413e2e7f98c02403061aad34bde"}, + {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:71c6b009d431b3839d7c14c3af86788b3cfac41e969e3e1c22f8a6ea13139404"}, + {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e18668f1bd39e69b7fed19fa7cd1cd110a121ec25439328b5c89934e6d30d357"}, + {file = "orjson-3.9.15-cp311-none-win32.whl", hash = "sha256:62482873e0289cf7313461009bf62ac8b2e54bc6f00c6fabcde785709231a5d7"}, + {file = "orjson-3.9.15-cp311-none-win_amd64.whl", hash = "sha256:b3d336ed75d17c7b1af233a6561cf421dee41d9204aa3cfcc6c9c65cd5bb69a8"}, + {file = "orjson-3.9.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:82425dd5c7bd3adfe4e94c78e27e2fa02971750c2b7ffba648b0f5d5cc016a73"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c51378d4a8255b2e7c1e5cc430644f0939539deddfa77f6fac7b56a9784160a"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ae4e06be04dc00618247c4ae3f7c3e561d5bc19ab6941427f6d3722a0875ef7"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcef128f970bb63ecf9a65f7beafd9b55e3aaf0efc271a4154050fc15cdb386e"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b72758f3ffc36ca566ba98a8e7f4f373b6c17c646ff8ad9b21ad10c29186f00d"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c57bc7b946cf2efa67ac55766e41764b66d40cbd9489041e637c1304400494"}, + {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:946c3a1ef25338e78107fba746f299f926db408d34553b4754e90a7de1d44068"}, + {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2f256d03957075fcb5923410058982aea85455d035607486ccb847f095442bda"}, + {file = "orjson-3.9.15-cp312-none-win_amd64.whl", hash = "sha256:5bb399e1b49db120653a31463b4a7b27cf2fbfe60469546baf681d1b39f4edf2"}, + {file = "orjson-3.9.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b17f0f14a9c0ba55ff6279a922d1932e24b13fc218a3e968ecdbf791b3682b25"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f6cbd8e6e446fb7e4ed5bac4661a29e43f38aeecbf60c4b900b825a353276a1"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76bc6356d07c1d9f4b782813094d0caf1703b729d876ab6a676f3aaa9a47e37c"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdfa97090e2d6f73dced247a2f2d8004ac6449df6568f30e7fa1a045767c69a6"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7413070a3e927e4207d00bd65f42d1b780fb0d32d7b1d951f6dc6ade318e1b5a"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cf1596680ac1f01839dba32d496136bdd5d8ffb858c280fa82bbfeb173bdd40"}, + {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:809d653c155e2cc4fd39ad69c08fdff7f4016c355ae4b88905219d3579e31eb7"}, + {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:920fa5a0c5175ab14b9c78f6f820b75804fb4984423ee4c4f1e6d748f8b22bc1"}, + {file = "orjson-3.9.15-cp38-none-win32.whl", hash = "sha256:2b5c0f532905e60cf22a511120e3719b85d9c25d0e1c2a8abb20c4dede3b05a5"}, + {file = "orjson-3.9.15-cp38-none-win_amd64.whl", hash = "sha256:67384f588f7f8daf040114337d34a5188346e3fae6c38b6a19a2fe8c663a2f9b"}, + {file = "orjson-3.9.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6fc2fe4647927070df3d93f561d7e588a38865ea0040027662e3e541d592811e"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34cbcd216e7af5270f2ffa63a963346845eb71e174ea530867b7443892d77180"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f541587f5c558abd93cb0de491ce99a9ef8d1ae29dd6ab4dbb5a13281ae04cbd"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92255879280ef9c3c0bcb327c5a1b8ed694c290d61a6a532458264f887f052cb"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a1f57fb601c426635fcae9ddbe90dfc1ed42245eb4c75e4960440cac667262"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede0bde16cc6e9b96633df1631fbcd66491d1063667f260a4f2386a098393790"}, + {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e88b97ef13910e5f87bcbc4dd7979a7de9ba8702b54d3204ac587e83639c0c2b"}, + {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57d5d8cf9c27f7ef6bc56a5925c7fbc76b61288ab674eb352c26ac780caa5b10"}, + {file = "orjson-3.9.15-cp39-none-win32.whl", hash = "sha256:001f4eb0ecd8e9ebd295722d0cbedf0748680fb9998d3993abaed2f40587257a"}, + {file = "orjson-3.9.15-cp39-none-win_amd64.whl", hash = "sha256:ea0b183a5fe6b2b45f3b854b0d19c4e932d6f5934ae1f723b07cf9560edd4ec7"}, + {file = "orjson-3.9.15.tar.gz", hash = "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061"}, ] [[package]] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e76ec445ed66ee57d8addb2bcf33162e21d0d3537f24588942f5c17fe8778c47" +content-hash = "19b1df1bc5be066df9c2dd7116a9ae6f7c388d04b6b64e3a95660a6a838c4ea6" diff --git a/pyproject.toml b/pyproject.toml index e4663ac3..0f14d44b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" types-setuptools = "^69.1.0" pook = "^1.4.2" -orjson = "^3.9.14" +orjson = "^3.9.15" [build-system] requires = ["poetry-core>=1.0.0"] From 24dddef4c25f361da4e9b222d442d258029db147 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 09:49:42 -0800 Subject: [PATCH 351/448] Bump pook from 1.4.2 to 1.4.3 (#614) Bumps [pook](https://github.com/h2non/pook) from 1.4.2 to 1.4.3. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v1.4.2...v1.4.3) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 11488b06..02f7f75b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -491,13 +491,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.4.2" +version = "1.4.3" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = ">=3.8" files = [ - {file = "pook-1.4.2-py3-none-any.whl", hash = "sha256:a9be6a29931f2fa77347ae74d5d42758f26497dccb4f9f811fb07a4f196ec772"}, - {file = "pook-1.4.2.tar.gz", hash = "sha256:0d8fa419f86fd258cb3c38779b72ff2e382421b060c9ee1beaddf2ea050d969b"}, + {file = "pook-1.4.3-py3-none-any.whl", hash = "sha256:4683a8a9d11fb56901ae15001a5bfb76a1bb960b1a841de1f0ca11c8c2d9eef8"}, + {file = "pook-1.4.3.tar.gz", hash = "sha256:61dbd9f6f9bf4d0bbab4abdf382bf7e8fbaae8561c5de3cd444e7c4be67df651"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "19b1df1bc5be066df9c2dd7116a9ae6f7c388d04b6b64e3a95660a6a838c4ea6" +content-hash = "adabc755495b0973eb59a7d170c21fa3b95e38e40af5801f69ec07fc610c1b27" diff --git a/pyproject.toml b/pyproject.toml index 0f14d44b..621fa958 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^2.0.0" sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" types-setuptools = "^69.1.0" -pook = "^1.4.2" +pook = "^1.4.3" orjson = "^3.9.15" [build-system] From 75887ccd4d68f01b17f24a2bef8d0786b4c287f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 09:55:52 -0800 Subject: [PATCH 352/448] Bump types-setuptools from 69.1.0.20240217 to 69.1.0.20240223 (#616) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.1.0.20240217 to 69.1.0.20240223. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 02f7f75b..c9f4da60 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.1.0.20240217" +version = "69.1.0.20240223" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.1.0.20240217.tar.gz", hash = "sha256:243fecc8850b6f7fbfa84bab18ec93407046a4e91130056fd5a7caef971aaff9"}, - {file = "types_setuptools-69.1.0.20240217-py3-none-any.whl", hash = "sha256:8b60e14a652b48bda292801c5a0c1251c190ad587c295f7839e901634913bb96"}, + {file = "types-setuptools-69.1.0.20240223.tar.gz", hash = "sha256:8a886a1fd06b668782dfbdaded4fd8a4e8c9f3d8d4c02acdd1240df098f50bf7"}, + {file = "types_setuptools-69.1.0.20240223-py3-none-any.whl", hash = "sha256:30a0d9903a81a424bd0f979534552a016a4543760aaffd499b9a2fe85bae0bfd"}, ] [[package]] From 47b703f54d0b32a5ac82f9b26d211114d684fa7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Mar 2024 08:28:20 -0800 Subject: [PATCH 353/448] Bump types-setuptools from 69.1.0.20240223 to 69.1.0.20240302 (#619) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.1.0.20240223 to 69.1.0.20240302. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c9f4da60..6ffc28b5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.1.0.20240223" +version = "69.1.0.20240302" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.1.0.20240223.tar.gz", hash = "sha256:8a886a1fd06b668782dfbdaded4fd8a4e8c9f3d8d4c02acdd1240df098f50bf7"}, - {file = "types_setuptools-69.1.0.20240223-py3-none-any.whl", hash = "sha256:30a0d9903a81a424bd0f979534552a016a4543760aaffd499b9a2fe85bae0bfd"}, + {file = "types-setuptools-69.1.0.20240302.tar.gz", hash = "sha256:ed5462cf8470831d1bdbf300e1eeea876040643bfc40b785109a5857fa7d3c3f"}, + {file = "types_setuptools-69.1.0.20240302-py3-none-any.whl", hash = "sha256:99c1053920a6fa542b734c9ad61849c3993062f80963a4034771626528e192a0"}, ] [[package]] From 701401f4d2f6cd269058ca45e0c5bfa3e1cd0632 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 06:58:59 -0700 Subject: [PATCH 354/448] Bump types-setuptools from 69.1.0.20240302 to 69.1.0.20240310 (#622) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.1.0.20240302 to 69.1.0.20240310. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6ffc28b5..ae478201 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.1.0.20240302" +version = "69.1.0.20240310" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.1.0.20240302.tar.gz", hash = "sha256:ed5462cf8470831d1bdbf300e1eeea876040643bfc40b785109a5857fa7d3c3f"}, - {file = "types_setuptools-69.1.0.20240302-py3-none-any.whl", hash = "sha256:99c1053920a6fa542b734c9ad61849c3993062f80963a4034771626528e192a0"}, + {file = "types-setuptools-69.1.0.20240310.tar.gz", hash = "sha256:fc0e1082f55c974611bce844b1e5beb2d1a895501f4a464e48305592a4268100"}, + {file = "types_setuptools-69.1.0.20240310-py3-none-any.whl", hash = "sha256:7801245ecaf371d24f1154924c8f1f0efdc53977339bf79886b5b10890af6478"}, ] [[package]] From 9fbc5156c623ba7671b1c8f0d01ee05c202d40b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 07:05:07 -0700 Subject: [PATCH 355/448] Bump mypy from 1.8.0 to 1.9.0 (#623) Bumps [mypy](https://github.com/python/mypy) from 1.8.0 to 1.9.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.8.0...1.9.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 58 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index ae478201..38d717df 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.8.0" +version = "1.9.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485a8942f671120f76afffff70f259e1cd0f0cfe08f81c05d8816d958d4577d3"}, - {file = "mypy-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:df9824ac11deaf007443e7ed2a4a26bebff98d2bc43c6da21b2b64185da011c4"}, - {file = "mypy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afecd6354bbfb6e0160f4e4ad9ba6e4e003b767dd80d85516e71f2e955ab50d"}, - {file = "mypy-1.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8963b83d53ee733a6e4196954502b33567ad07dfd74851f32be18eb932fb1cb9"}, - {file = "mypy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:e46f44b54ebddbeedbd3d5b289a893219065ef805d95094d16a0af6630f5d410"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:855fe27b80375e5c5878492f0729540db47b186509c98dae341254c8f45f42ae"}, - {file = "mypy-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c886c6cce2d070bd7df4ec4a05a13ee20c0aa60cb587e8d1265b6c03cf91da3"}, - {file = "mypy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d19c413b3c07cbecf1f991e2221746b0d2a9410b59cb3f4fb9557f0365a1a817"}, - {file = "mypy-1.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9261ed810972061388918c83c3f5cd46079d875026ba97380f3e3978a72f503d"}, - {file = "mypy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:51720c776d148bad2372ca21ca29256ed483aa9a4cdefefcef49006dff2a6835"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:52825b01f5c4c1c4eb0db253ec09c7aa17e1a7304d247c48b6f3599ef40db8bd"}, - {file = "mypy-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5ac9a4eeb1ec0f1ccdc6f326bcdb464de5f80eb07fb38b5ddd7b0de6bc61e55"}, - {file = "mypy-1.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afe3fe972c645b4632c563d3f3eff1cdca2fa058f730df2b93a35e3b0c538218"}, - {file = "mypy-1.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:42c6680d256ab35637ef88891c6bd02514ccb7e1122133ac96055ff458f93fc3"}, - {file = "mypy-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:720a5ca70e136b675af3af63db533c1c8c9181314d207568bbe79051f122669e"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:028cf9f2cae89e202d7b6593cd98db6759379f17a319b5faf4f9978d7084cdc6"}, - {file = "mypy-1.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4e6d97288757e1ddba10dd9549ac27982e3e74a49d8d0179fc14d4365c7add66"}, - {file = "mypy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f1478736fcebb90f97e40aff11a5f253af890c845ee0c850fe80aa060a267c6"}, - {file = "mypy-1.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42419861b43e6962a649068a61f4a4839205a3ef525b858377a960b9e2de6e0d"}, - {file = "mypy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:2b5b6c721bd4aabaadead3a5e6fa85c11c6c795e0c81a7215776ef8afc66de02"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5c1538c38584029352878a0466f03a8ee7547d7bd9f641f57a0f3017a7c905b8"}, - {file = "mypy-1.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ef4be7baf08a203170f29e89d79064463b7fc7a0908b9d0d5114e8009c3a259"}, - {file = "mypy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178def594014aa6c35a8ff411cf37d682f428b3b5617ca79029d8ae72f5402b"}, - {file = "mypy-1.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab3c84fa13c04aeeeabb2a7f67a25ef5d77ac9d6486ff33ded762ef353aa5592"}, - {file = "mypy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:99b00bc72855812a60d253420d8a2eae839b0afa4938f09f4d2aa9bb4654263a"}, - {file = "mypy-1.8.0-py3-none-any.whl", hash = "sha256:538fd81bb5e430cc1381a443971c0475582ff9f434c16cd46d2c66763ce85d9d"}, - {file = "mypy-1.8.0.tar.gz", hash = "sha256:6ff8b244d7085a0b425b56d327b480c3b29cafbd2eff27316a004f9a7391ae07"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, + {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, + {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, + {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, + {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, + {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, + {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, + {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, + {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, + {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, + {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, + {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, + {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, + {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, + {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, + {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, + {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, + {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, + {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, + {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, + {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, + {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, + {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, ] [package.dependencies] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "adabc755495b0973eb59a7d170c21fa3b95e38e40af5801f69ec07fc610c1b27" +content-hash = "bf0a9f886be376c8c922a52d85d9ede444460f56f78d75f1e56365df38b96cbb" diff --git a/pyproject.toml b/pyproject.toml index 621fa958..08961e7b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] black = "^23.12.1" -mypy = "^1.8" +mypy = "^1.9" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^2.0.0" From 0b5fa9bf59bf72eb9f534868e1ba322638c41bab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 09:16:14 -0700 Subject: [PATCH 356/448] Bump types-setuptools from 69.1.0.20240310 to 69.2.0.20240317 (#629) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.1.0.20240310 to 69.2.0.20240317. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 38d717df..c4d4dd8f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -804,13 +804,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.1.0.20240310" +version = "69.2.0.20240317" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.1.0.20240310.tar.gz", hash = "sha256:fc0e1082f55c974611bce844b1e5beb2d1a895501f4a464e48305592a4268100"}, - {file = "types_setuptools-69.1.0.20240310-py3-none-any.whl", hash = "sha256:7801245ecaf371d24f1154924c8f1f0efdc53977339bf79886b5b10890af6478"}, + {file = "types-setuptools-69.2.0.20240317.tar.gz", hash = "sha256:b607c4c48842ef3ee49dc0c7fe9c1bad75700b071e1018bb4d7e3ac492d47048"}, + {file = "types_setuptools-69.2.0.20240317-py3-none-any.whl", hash = "sha256:cf91ff7c87ab7bf0625c3f0d4d90427c9da68561f3b0feab77977aaf0bbf7531"}, ] [[package]] @@ -961,4 +961,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "bf0a9f886be376c8c922a52d85d9ede444460f56f78d75f1e56365df38b96cbb" +content-hash = "4411fb69fca534e61c7af60386dc101effb9666f13f3b85a0f148414e0c4cf79" diff --git a/pyproject.toml b/pyproject.toml index 08961e7b..b69d67ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" -types-setuptools = "^69.1.0" +types-setuptools = "^69.2.0" pook = "^1.4.3" orjson = "^3.9.15" From 7cb520843437dea4804e10dcb5457ab21c40f847 Mon Sep 17 00:00:00 2001 From: Sergio Gonzalez Date: Thu, 28 Mar 2024 11:24:44 -0700 Subject: [PATCH 357/448] Use ssl_context for HTTPS requests to avoid reading certificate files on every request (#632) * Use ssl_context for HTTPS requests to avoid reading certificate files on every request * Update base.py Added comment to explain logic --------- Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- polygon/rest/base.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index dcddb8a8..3e65c06c 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -1,5 +1,6 @@ import certifi import json +import ssl import urllib3 import inspect from urllib3.util.retry import Retry @@ -66,13 +67,16 @@ def __init__( backoff_factor=0.1, # [0.0s, 0.2s, 0.4s, 0.8s, 1.6s, ...] ) + # global cache ssl context and use (vs on each init of pool manager) + ssl_context = ssl.create_default_context() + ssl_context.load_verify_locations(certifi.where()) + # https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool self.client = urllib3.PoolManager( num_pools=num_pools, headers=self.headers, # default headers sent with each request. - ca_certs=certifi.where(), - cert_reqs="CERT_REQUIRED", + ssl_context=ssl_context, retries=retry_strategy, # use the customized Retry instance ) From fc56f2333e3bd45da385768d62723123800f78bd Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:35:41 -0700 Subject: [PATCH 358/448] Fixed rest spec (#635) --- .polygon/rest.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index f4e5fcb9..fe330dce 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -7007,7 +7007,7 @@ "operationId": "EMA", "parameters": [ { - "description": "The ticker symbol for which to get exponential moving average (EMA) data.", + "description": "Specify a case-sensitive ticker symbol for which to get exponential moving average (EMA) data. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stockTicker", @@ -8757,7 +8757,7 @@ "operationId": "MACD", "parameters": [ { - "description": "The ticker symbol for which to get MACD data.", + "description": "Specify a case-sensitive ticker symbol for which to get moving average convergence/divergence (MACD) data. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stockTicker", @@ -10375,7 +10375,7 @@ "operationId": "RSI", "parameters": [ { - "description": "The ticker symbol for which to get relative strength index (RSI) data.", + "description": "Specify a case-sensitive ticker symbol for which to get relative strength index (RSI) data. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stockTicker", @@ -12015,7 +12015,7 @@ "operationId": "SMA", "parameters": [ { - "description": "The ticker symbol for which to get simple moving average (SMA) data.", + "description": "Specify a case-sensitive ticker symbol for which to get simple moving average (SMA) data. For example, AAPL represents Apple Inc.", "example": "AAPL", "in": "path", "name": "stockTicker", @@ -24822,7 +24822,7 @@ "type": "string" }, "mic": { - "description": "The Market Identifer Code of this exchange (see ISO 10383).", + "description": "The Market Identifier Code of this exchange (see ISO 10383).", "example": "XASE", "type": "string" }, @@ -25536,7 +25536,7 @@ "operationId": "ListStockSplits", "parameters": [ { - "description": "Return the stock splits that contain this ticker.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "in": "query", "name": "ticker", "schema": { @@ -25570,7 +25570,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.gte", "schema": { @@ -25578,7 +25578,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.gt", "schema": { @@ -25586,7 +25586,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.lte", "schema": { @@ -25594,7 +25594,7 @@ } }, { - "description": "Search by ticker.", + "description": "Range by ticker.", "in": "query", "name": "ticker.lt", "schema": { @@ -25602,7 +25602,7 @@ } }, { - "description": "Search by execution_date.", + "description": "Range by execution_date.", "in": "query", "name": "execution_date.gte", "schema": { @@ -25611,7 +25611,7 @@ } }, { - "description": "Search by execution_date.", + "description": "Range by execution_date.", "in": "query", "name": "execution_date.gt", "schema": { @@ -25620,7 +25620,7 @@ } }, { - "description": "Search by execution_date.", + "description": "Range by execution_date.", "in": "query", "name": "execution_date.lte", "schema": { @@ -25629,7 +25629,7 @@ } }, { - "description": "Search by execution_date.", + "description": "Range by execution_date.", "in": "query", "name": "execution_date.lt", "schema": { @@ -28339,7 +28339,7 @@ }, { "description": "The option contract identifier.", - "example": "O:EVRI240119C00002500", + "example": "O:EVRI240920P00012500", "in": "path", "name": "optionContract", "required": true, From 4774aa142f0c7205101ab81d73ec309bc5b1d6b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 09:33:36 -0700 Subject: [PATCH 359/448] Bump orjson from 3.9.15 to 3.10.0 (#636) Bumps [orjson](https://github.com/ijl/orjson) from 3.9.15 to 3.10.0. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.9.15...3.10.0) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 107 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 55 insertions(+), 54 deletions(-) diff --git a/poetry.lock b/poetry.lock index c4d4dd8f..72cdb162 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "alabaster" @@ -384,61 +384,62 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.9.15" +version = "3.10.0" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fbbeb3c9b2edb5fd044b2a070f127a0ac456ffd079cb82746fc84af01ef021a4"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b66bcc5670e8a6b78f0313bcb74774c8291f6f8aeef10fe70e910b8040f3ab75"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2973474811db7b35c30248d1129c64fd2bdf40d57d84beed2a9a379a6f57d0ab"}, - {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fe41b6f72f52d3da4db524c8653e46243c8c92df826ab5ffaece2dba9cccd58"}, - {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4228aace81781cc9d05a3ec3a6d2673a1ad0d8725b4e915f1089803e9efd2b99"}, - {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f7b65bfaf69493c73423ce9db66cfe9138b2f9ef62897486417a8fcb0a92bfe"}, - {file = "orjson-3.9.15-cp310-none-win32.whl", hash = "sha256:2d99e3c4c13a7b0fb3792cc04c2829c9db07838fb6973e578b85c1745e7d0ce7"}, - {file = "orjson-3.9.15-cp310-none-win_amd64.whl", hash = "sha256:b725da33e6e58e4a5d27958568484aa766e825e93aa20c26c91168be58e08cbb"}, - {file = "orjson-3.9.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c8e8fe01e435005d4421f183038fc70ca85d2c1e490f51fb972db92af6e047c2"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87f1097acb569dde17f246faa268759a71a2cb8c96dd392cd25c668b104cad2f"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff0f9913d82e1d1fadbd976424c316fbc4d9c525c81d047bbdd16bd27dd98cfc"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8055ec598605b0077e29652ccfe9372247474375e0e3f5775c91d9434e12d6b1"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6768a327ea1ba44c9114dba5fdda4a214bdb70129065cd0807eb5f010bfcbb5"}, - {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12365576039b1a5a47df01aadb353b68223da413e2e7f98c02403061aad34bde"}, - {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:71c6b009d431b3839d7c14c3af86788b3cfac41e969e3e1c22f8a6ea13139404"}, - {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e18668f1bd39e69b7fed19fa7cd1cd110a121ec25439328b5c89934e6d30d357"}, - {file = "orjson-3.9.15-cp311-none-win32.whl", hash = "sha256:62482873e0289cf7313461009bf62ac8b2e54bc6f00c6fabcde785709231a5d7"}, - {file = "orjson-3.9.15-cp311-none-win_amd64.whl", hash = "sha256:b3d336ed75d17c7b1af233a6561cf421dee41d9204aa3cfcc6c9c65cd5bb69a8"}, - {file = "orjson-3.9.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:82425dd5c7bd3adfe4e94c78e27e2fa02971750c2b7ffba648b0f5d5cc016a73"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c51378d4a8255b2e7c1e5cc430644f0939539deddfa77f6fac7b56a9784160a"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ae4e06be04dc00618247c4ae3f7c3e561d5bc19ab6941427f6d3722a0875ef7"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcef128f970bb63ecf9a65f7beafd9b55e3aaf0efc271a4154050fc15cdb386e"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b72758f3ffc36ca566ba98a8e7f4f373b6c17c646ff8ad9b21ad10c29186f00d"}, - {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c57bc7b946cf2efa67ac55766e41764b66d40cbd9489041e637c1304400494"}, - {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:946c3a1ef25338e78107fba746f299f926db408d34553b4754e90a7de1d44068"}, - {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2f256d03957075fcb5923410058982aea85455d035607486ccb847f095442bda"}, - {file = "orjson-3.9.15-cp312-none-win_amd64.whl", hash = "sha256:5bb399e1b49db120653a31463b4a7b27cf2fbfe60469546baf681d1b39f4edf2"}, - {file = "orjson-3.9.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b17f0f14a9c0ba55ff6279a922d1932e24b13fc218a3e968ecdbf791b3682b25"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f6cbd8e6e446fb7e4ed5bac4661a29e43f38aeecbf60c4b900b825a353276a1"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76bc6356d07c1d9f4b782813094d0caf1703b729d876ab6a676f3aaa9a47e37c"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdfa97090e2d6f73dced247a2f2d8004ac6449df6568f30e7fa1a045767c69a6"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7413070a3e927e4207d00bd65f42d1b780fb0d32d7b1d951f6dc6ade318e1b5a"}, - {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cf1596680ac1f01839dba32d496136bdd5d8ffb858c280fa82bbfeb173bdd40"}, - {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:809d653c155e2cc4fd39ad69c08fdff7f4016c355ae4b88905219d3579e31eb7"}, - {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:920fa5a0c5175ab14b9c78f6f820b75804fb4984423ee4c4f1e6d748f8b22bc1"}, - {file = "orjson-3.9.15-cp38-none-win32.whl", hash = "sha256:2b5c0f532905e60cf22a511120e3719b85d9c25d0e1c2a8abb20c4dede3b05a5"}, - {file = "orjson-3.9.15-cp38-none-win_amd64.whl", hash = "sha256:67384f588f7f8daf040114337d34a5188346e3fae6c38b6a19a2fe8c663a2f9b"}, - {file = "orjson-3.9.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6fc2fe4647927070df3d93f561d7e588a38865ea0040027662e3e541d592811e"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34cbcd216e7af5270f2ffa63a963346845eb71e174ea530867b7443892d77180"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f541587f5c558abd93cb0de491ce99a9ef8d1ae29dd6ab4dbb5a13281ae04cbd"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92255879280ef9c3c0bcb327c5a1b8ed694c290d61a6a532458264f887f052cb"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a1f57fb601c426635fcae9ddbe90dfc1ed42245eb4c75e4960440cac667262"}, - {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede0bde16cc6e9b96633df1631fbcd66491d1063667f260a4f2386a098393790"}, - {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e88b97ef13910e5f87bcbc4dd7979a7de9ba8702b54d3204ac587e83639c0c2b"}, - {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57d5d8cf9c27f7ef6bc56a5925c7fbc76b61288ab674eb352c26ac780caa5b10"}, - {file = "orjson-3.9.15-cp39-none-win32.whl", hash = "sha256:001f4eb0ecd8e9ebd295722d0cbedf0748680fb9998d3993abaed2f40587257a"}, - {file = "orjson-3.9.15-cp39-none-win_amd64.whl", hash = "sha256:ea0b183a5fe6b2b45f3b854b0d19c4e932d6f5934ae1f723b07cf9560edd4ec7"}, - {file = "orjson-3.9.15.tar.gz", hash = "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061"}, + {file = "orjson-3.10.0-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47af5d4b850a2d1328660661f0881b67fdbe712aea905dadd413bdea6f792c33"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c90681333619d78360d13840c7235fdaf01b2b129cb3a4f1647783b1971542b6"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:400c5b7c4222cb27b5059adf1fb12302eebcabf1978f33d0824aa5277ca899bd"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5dcb32e949eae80fb335e63b90e5808b4b0f64e31476b3777707416b41682db5"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7d507c7493252c0a0264b5cc7e20fa2f8622b8a83b04d819b5ce32c97cf57b"}, + {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e286a51def6626f1e0cc134ba2067dcf14f7f4b9550f6dd4535fd9d79000040b"}, + {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8acd4b82a5f3a3ec8b1dc83452941d22b4711964c34727eb1e65449eead353ca"}, + {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:30707e646080dd3c791f22ce7e4a2fc2438765408547c10510f1f690bd336217"}, + {file = "orjson-3.10.0-cp310-none-win32.whl", hash = "sha256:115498c4ad34188dcb73464e8dc80e490a3e5e88a925907b6fedcf20e545001a"}, + {file = "orjson-3.10.0-cp310-none-win_amd64.whl", hash = "sha256:6735dd4a5a7b6df00a87d1d7a02b84b54d215fb7adac50dd24da5997ffb4798d"}, + {file = "orjson-3.10.0-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9587053e0cefc284e4d1cd113c34468b7d3f17666d22b185ea654f0775316a26"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bef1050b1bdc9ea6c0d08468e3e61c9386723633b397e50b82fda37b3563d72"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d16c6963ddf3b28c0d461641517cd312ad6b3cf303d8b87d5ef3fa59d6844337"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4251964db47ef090c462a2d909f16c7c7d5fe68e341dabce6702879ec26d1134"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73bbbdc43d520204d9ef0817ac03fa49c103c7f9ea94f410d2950755be2c349c"}, + {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:414e5293b82373606acf0d66313aecb52d9c8c2404b1900683eb32c3d042dbd7"}, + {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:feaed5bb09877dc27ed0d37f037ddef6cb76d19aa34b108db270d27d3d2ef747"}, + {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5127478260db640323cea131ee88541cb1a9fbce051f0b22fa2f0892f44da302"}, + {file = "orjson-3.10.0-cp311-none-win32.whl", hash = "sha256:b98345529bafe3c06c09996b303fc0a21961820d634409b8639bc16bd4f21b63"}, + {file = "orjson-3.10.0-cp311-none-win_amd64.whl", hash = "sha256:658ca5cee3379dd3d37dbacd43d42c1b4feee99a29d847ef27a1cb18abdfb23f"}, + {file = "orjson-3.10.0-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4329c1d24fd130ee377e32a72dc54a3c251e6706fccd9a2ecb91b3606fddd998"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef0f19fdfb6553342b1882f438afd53c7cb7aea57894c4490c43e4431739c700"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4f60db24161534764277f798ef53b9d3063092f6d23f8f962b4a97edfa997a0"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1de3fd5c7b208d836f8ecb4526995f0d5877153a4f6f12f3e9bf11e49357de98"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f93e33f67729d460a177ba285002035d3f11425ed3cebac5f6ded4ef36b28344"}, + {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:237ba922aef472761acd697eef77fef4831ab769a42e83c04ac91e9f9e08fa0e"}, + {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98c1bfc6a9bec52bc8f0ab9b86cc0874b0299fccef3562b793c1576cf3abb570"}, + {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:30d795a24be16c03dca0c35ca8f9c8eaaa51e3342f2c162d327bd0225118794a"}, + {file = "orjson-3.10.0-cp312-none-win32.whl", hash = "sha256:6a3f53dc650bc860eb26ec293dfb489b2f6ae1cbfc409a127b01229980e372f7"}, + {file = "orjson-3.10.0-cp312-none-win_amd64.whl", hash = "sha256:983db1f87c371dc6ffc52931eb75f9fe17dc621273e43ce67bee407d3e5476e9"}, + {file = "orjson-3.10.0-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9a667769a96a72ca67237224a36faf57db0c82ab07d09c3aafc6f956196cfa1b"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade1e21dfde1d37feee8cf6464c20a2f41fa46c8bcd5251e761903e46102dc6b"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23c12bb4ced1c3308eff7ba5c63ef8f0edb3e4c43c026440247dd6c1c61cea4b"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2d014cf8d4dc9f03fc9f870de191a49a03b1bcda51f2a957943fb9fafe55aac"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eadecaa16d9783affca33597781328e4981b048615c2ddc31c47a51b833d6319"}, + {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd583341218826f48bd7c6ebf3310b4126216920853cbc471e8dbeaf07b0b80e"}, + {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:90bfc137c75c31d32308fd61951d424424426ddc39a40e367704661a9ee97095"}, + {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13b5d3c795b09a466ec9fcf0bd3ad7b85467d91a60113885df7b8d639a9d374b"}, + {file = "orjson-3.10.0-cp38-none-win32.whl", hash = "sha256:5d42768db6f2ce0162544845facb7c081e9364a5eb6d2ef06cd17f6050b048d8"}, + {file = "orjson-3.10.0-cp38-none-win_amd64.whl", hash = "sha256:33e6655a2542195d6fd9f850b428926559dee382f7a862dae92ca97fea03a5ad"}, + {file = "orjson-3.10.0-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4050920e831a49d8782a1720d3ca2f1c49b150953667eed6e5d63a62e80f46a2"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1897aa25a944cec774ce4a0e1c8e98fb50523e97366c637b7d0cddabc42e6643"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9bf565a69e0082ea348c5657401acec3cbbb31564d89afebaee884614fba36b4"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6ebc17cfbbf741f5c1a888d1854354536f63d84bee537c9a7c0335791bb9009"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2817877d0b69f78f146ab305c5975d0618df41acf8811249ee64231f5953fee"}, + {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57d017863ec8aa4589be30a328dacd13c2dc49de1c170bc8d8c8a98ece0f2925"}, + {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:22c2f7e377ac757bd3476ecb7480c8ed79d98ef89648f0176deb1da5cd014eb7"}, + {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e62ba42bfe64c60c1bc84799944f80704e996592c6b9e14789c8e2a303279912"}, + {file = "orjson-3.10.0-cp39-none-win32.whl", hash = "sha256:60c0b1bdbccd959ebd1575bd0147bd5e10fc76f26216188be4a36b691c937077"}, + {file = "orjson-3.10.0-cp39-none-win_amd64.whl", hash = "sha256:175a41500ebb2fdf320bf78e8b9a75a1279525b62ba400b2b2444e274c2c8bee"}, + {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, ] [[package]] @@ -961,4 +962,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "4411fb69fca534e61c7af60386dc101effb9666f13f3b85a0f148414e0c4cf79" +content-hash = "8da0244cb90aff64d2af412a331650e52939bbabafdfd0ddb4837fdcce83bf4b" diff --git a/pyproject.toml b/pyproject.toml index b69d67ba..198487e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.0" types-certifi = "^2021.10.8" types-setuptools = "^69.2.0" pook = "^1.4.3" -orjson = "^3.9.15" +orjson = "^3.10.0" [build-system] requires = ["poetry-core>=1.0.0"] From dfec73241af21d181476e242aa867999dadbd000 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 18:56:23 -0700 Subject: [PATCH 360/448] Bump idna from 3.4 to 3.7 (#641) Bumps [idna](https://github.com/kjd/idna) from 3.4 to 3.7. - [Release notes](https://github.com/kjd/idna/releases) - [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.rst) - [Commits](https://github.com/kjd/idna/compare/v3.4...v3.7) --- updated-dependencies: - dependency-name: idna dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 72cdb162..66b3bfd2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -166,13 +166,13 @@ six = ">=1.8.0" [[package]] name = "idna" -version = "3.4" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] From 4a055817bf9a07367f9a0703a285a312c7c1683a Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Fri, 12 Apr 2024 14:01:04 -0700 Subject: [PATCH 361/448] Add flat files stock trades tutorial (#643) * Add flat files stock trades tutorial * Fix linting (ignore imports for examples) --- .../exchange-heatmap.py | 68 ++++++++++++++ .../flatfiles-stock-trades/exchanges-seen.py | 23 +++++ .../tools/flatfiles-stock-trades/heatmap.png | Bin 0 -> 50356 bytes .../flatfiles-stock-trades/histogram.png | Bin 0 -> 68598 bytes .../tools/flatfiles-stock-trades/readme.md | 86 ++++++++++++++++++ .../flatfiles-stock-trades/top-10-tickers.py | 25 +++++ .../trades-histogram.py | 63 +++++++++++++ 7 files changed, 265 insertions(+) create mode 100644 examples/tools/flatfiles-stock-trades/exchange-heatmap.py create mode 100644 examples/tools/flatfiles-stock-trades/exchanges-seen.py create mode 100644 examples/tools/flatfiles-stock-trades/heatmap.png create mode 100644 examples/tools/flatfiles-stock-trades/histogram.png create mode 100644 examples/tools/flatfiles-stock-trades/readme.md create mode 100644 examples/tools/flatfiles-stock-trades/top-10-tickers.py create mode 100644 examples/tools/flatfiles-stock-trades/trades-histogram.py diff --git a/examples/tools/flatfiles-stock-trades/exchange-heatmap.py b/examples/tools/flatfiles-stock-trades/exchange-heatmap.py new file mode 100644 index 00000000..060b6350 --- /dev/null +++ b/examples/tools/flatfiles-stock-trades/exchange-heatmap.py @@ -0,0 +1,68 @@ +# We can use a Python script that aggregates trades by exchange into 30-minute +# chunks, setting the stage for a visual analysis. This approach will highlight +# trade flows, including opening hours and peak activity times, across the +# exchanges. Please see https://polygon.io/blog/insights-from-trade-level-data +# +import pandas as pd # type: ignore +import seaborn as sns # type: ignore +import matplotlib.pyplot as plt # type: ignore +import numpy as np # type: ignore +import pytz # type: ignore + +# Replace '2024-04-05.csv' with the path to your actual file +file_path = "2024-04-05.csv" + +# Load the CSV file into a pandas DataFrame +df = pd.read_csv(file_path) + +# Convert 'participant_timestamp' to datetime (assuming nanoseconds Unix timestamp) +df["participant_timestamp"] = pd.to_datetime( + df["participant_timestamp"], unit="ns", utc=True +) + +# Convert to Eastern Time (ET), accounting for both EST and EDT +df["participant_timestamp"] = df["participant_timestamp"].dt.tz_convert( + "America/New_York" +) + +# Create a new column for 30-minute time intervals, now in ET +df["time_interval"] = df["participant_timestamp"].dt.floor("30T").dt.time + +# Ensure full 24-hour coverage by generating all possible 30-minute intervals +all_intervals = pd.date_range(start="00:00", end="23:59", freq="30T").time +all_exchanges = df["exchange"].unique() +full_index = pd.MultiIndex.from_product( + [all_exchanges, all_intervals], names=["exchange", "time_interval"] +) + +# Group by 'exchange' and 'time_interval', count trades, and reset index +grouped = ( + df.groupby(["exchange", "time_interval"]) + .size() + .reindex(full_index, fill_value=0) + .reset_index(name="trade_count") +) + +# Pivot the DataFrame for the heatmap, ensuring all intervals and exchanges are represented +pivot_table = grouped.pivot("exchange", "time_interval", "trade_count").fillna(0) + +# Apply a log scale transformation to the trade counts + 1 to handle zero trades correctly +log_scale_data = np.log1p(pivot_table.values) + +# Plotting the heatmap using the log scale data +plt.figure(figsize=(20, 10)) +sns.heatmap( + log_scale_data, + annot=False, + cmap="Reds", + linewidths=0.5, + cbar=False, + xticklabels=[t.strftime("%H:%M") for t in all_intervals], + yticklabels=pivot_table.index, +) +plt.title("Trade Count Heatmap by Exchange and Time Interval (Log Scale, ET)") +plt.ylabel("Exchange") +plt.xlabel("Time Interval (ET)") +plt.xticks(rotation=45) +plt.tight_layout() # Adjust layout to not cut off labels +plt.show() diff --git a/examples/tools/flatfiles-stock-trades/exchanges-seen.py b/examples/tools/flatfiles-stock-trades/exchanges-seen.py new file mode 100644 index 00000000..70fb5081 --- /dev/null +++ b/examples/tools/flatfiles-stock-trades/exchanges-seen.py @@ -0,0 +1,23 @@ +# Here's a Python script for analyzing the dataset, that identifies the +# distribution of trades across different exchanges and calculates their +# respective percentages of the total trades. Please see +# https://polygon.io/blog/insights-from-trade-level-data +# +import pandas as pd # type: ignore + +# Replace '2024-04-05.csv' with the path to your actual file +file_path = "2024-04-05.csv" + +# Load the CSV file into a pandas DataFrame +df = pd.read_csv(file_path) + +# Count the number of trades for each exchange +exchange_counts = df["exchange"].value_counts() + +# Calculate the total number of trades +total_trades = exchange_counts.sum() + +# Print out all exchanges and their percentage of total trades +for exchange, count in exchange_counts.items(): + percentage = (count / total_trades) * 100 + print(f"Exchange {exchange}: {count} trades, {percentage:.2f}% of total trades") diff --git a/examples/tools/flatfiles-stock-trades/heatmap.png b/examples/tools/flatfiles-stock-trades/heatmap.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf4c0acda734fe9e6ec970b70e699c8fc4fb1a6 GIT binary patch literal 50356 zcmeFa2Ut|++BQn!7u|_%Cw39pQLLy$5D*bCQBXusK#E9-A|N0jUAo3t0tyNuoiQS! zBB0Ww8x10Lq)S)nT^QO>X3qVLgFD&Zcdq~Z=laUt=lpYBiQ~9tt#`faeedUf?x)Nz zht&4Y{c8DF0s;bamG|w@5D=L4T0me%$6sdRlZ%EX5AcVKgQBj3rj4nC^D#RU0o7v; zr%%~9oH9TDHzyN2dvhCWi7nDwwr={{Ne741_B+JHtUevE#m3G|tnRD7T*67dJiYIT zy@0^{WAxu=_Y`8x1q6QoR(a3&htGufG`NIoIlfciR6p9@Gh@qNLRP*1X_fWU7Vo1P zA>M7FU*1bIyPtN9v1glNaao!8W=)CFH81RRHl=F(=CSv*vh8OJ7dqSsVNJXcW;w3d za!ca0*qFQg%JzW|k@kHPnSE)ak=I>{Wnvzz_g;m8(CfpZ>Ie0oeS9x)>znnj`S1Vs zl>`67eYbbb`uO&&$bajHx;<8Dtv74z3O5%Dolm&DNJoEb(^Q{xp-@zA*5qK}{Ra;U zj+jMg^{w~0pt2=RL`zG{h20u-^u*4*v_bam{?=bFtqisCWQEO^s#w)_CqQjKjz}|h zKjt;|Liow^uSD;pq@>iV3kcj&+GuJnEU%9_gl`r4`s6pJDA=cxkTSO|^&} z$v-~7yYkH2bKwqU$}as`ql-J77CR;u_GpxM#xM-~E^jN(Y;0z#ZPt38dZ#9OaJApg z!3&HDMLz={|6dlYYdh#QuBo>D-Om?Y0!Q*Th~-S$jWjqn4Rw~U>#a>z@mnePBzN)A z6Te^ny4APpl>Nj?A@>iz%~hDyZnj^3Ds5~aPq_W3*<04LL}v(`y;*se9`KL0&NU`M zlCG0MIg@Lg>uvW2uwxUl$Dd!R+_YNh%B%c!jBqXOBWq>}IUI5w?h4$XdAFr4%%)^C zdo)YmlikYZjOG|sU6C*=DSCB%b-;=1G7`h*X03dMzet>V^T+|is<++PXz11(*zevh ztJ;>3(U)$rZ?}q`X^2Vaiq&4ju|}<4+zF!+`H7yj-Ho0Ty|X16KTlr2GNY}Up3+cX zgX~eOWUaKQqSCQ}=EUD-3f}RU7^$(znR@cxThz4dj`A{TYyFb#%~vjtny8Ny+jvUs zzBtER+^bScM>WAPE7ZOJ;(Xyq%zdkw!o-n)_9V;dExRwxD^Bp5>R#bF_Rgo}$dG`* zck5^o>pt`Ra9((u>m-9ax$fg^Fr@9R3bga~J8EtURYBwsovP`1v zv2orLD{jC+`TW)(qsa5~<)5Bf*4EmS$Sj#9?0zk8rQ4<~*I|pKp5D}^Et(H*CU-rE zEg6;_Vw=P;JY8=Zx_0_AYdl69?At=jOpAiI*0^@Z9o;4>AaKJ+<>?H8U0=Mx-bic< zwKVN{^SI`?&*rjUcVD`wQqP&{_hOFJ*)S43dM)qA$Ez{qJ?siL#N3IGkI&z}#PH0q z@uALuk={D97jvbHvPK(a^Li_*s!Xw*j<~c2Y8n_sV7&4eUypl3-cY*&*X5?ZUH&AS z>1BO5k|}la^)02*XLy3CiCoTv8J3l5hEwm8ky^|4G8Hkaq41iZt5cI}e9Vk$NBvc{ zmK z8e9KVHoL9!&12&o&VAvSBKd;~Qw~v%k!RljGDlEqlW1I$#)~!QM(b>H4uptDABzZ3 z+p!^Uh5Z5lJI?)$s#^{kU{4B9b?i;Uz!G0Bx8yCSGtF07czSD*9O)5FZc0`uy4 zgOqx^!nHxk*`tkaiFMW)CKncIpFG3FmVD(t_U_Wvs<14tbq9j4eSdytv~ivv z*W+oLS3b~E+d1&N5-Z{9d+)Ien4Z2v@YJL4S7IqE6}Goesd1V-{PO&Sn@(4r3k?nJ$>`4xk+C<8a#Wc7@M3Z- zPoV@~jVOtbHOmunF6vImkOyIrLm36Fi&-a+jEO$EB(P z>1YW^R_R8SdWKq!WcBsq)Tf@lyGV1Tt!ExR*(&B`{-m$`ph84kYU7UHx>RO$4rh4s z{gRx09v)NftszE?oLS>N#s!kq`T=;drg)kv?IjV3z(~{DB=h@mam8QnU2(myAtOdJ zMyP2U||_Z+$^ zHefcKX@wkM$jjwmt_35#N)?y1-a0?8U~Skb|JAWWQ>T*q)1H)D7>8J>A}p&l!LjYRg?dmop+wDu=Wo)gjb z?IkRCRbkJuW3&OT2rI}djFV#*|JW7tugT+K7PyjnR5%2 z1g&mhy^A_Gx|n$a)T0kF4G!3jYY_MwyJBCo29Y;*zUE+u!u( za6Q)^jI2Mw2`@;-(%VG1eCzx3b}yHiooFixk>O6V5^GGuTCoX=y+z}LMbesmWyOy@ z|Cv^GXKB>lNYC+3ecXo2cxMcYKpVS?w>_TE7HcUGO(?1{V?;y;8SYSCUXavME^a#1 zQ7Y5(=!L&Xl+x7#=bVX#6>dF`*+53d?)h@t`m-mjOLnq~dQzJ_(E8wIkRwEr58J1T%21-d)Z^8 zW?j?ROX)!vRZ$?XM?f_P!)g_58dG{9tWQvmt$y?g*#%r$=KbZ>ZRrP@3f#$|?rJd% z${4#pAj~>_!=;t3C%d}41?8O+uVUrF-dc_{d2#0m?bznUVKInQ%vt)~-=@ZgRs1vA zZDBPQv2o&-RS#EqO%9Mz*pm6-d6G?&XS|GF!9De;vTTnD`ln?Ip6(^sTuD}SQgM38 z1z0{|WEi*rIY3Gf*@ml}H}5Mn4;C|Vp`PrCKK8r$Ucp$;>wq`bDQ}MZ>>TfiGU}3= zT`cD$H#JmV<4~@eh#ex?!?cV~TYG-i{F32nBL)_ETIt9cFOV>PdF52j z)Cg_n__VgrIV-k5Doxih@^Bm_dG>0pP4HA*iJJeOl+h~0lrAwr$2X5d5&aaZ=IVJ8s_5rL*(ocT;q;=MC z)y1R1?$?|9+BaWj8Vz;|&o1tKS`)1jwCVBh-xygGfvAXK0dRv{w+ILvzVkU4(7k!G zJ&)eAxT5mFvQ^3hmlP&{%^wHBJ0;!^sM)x~q2rMIQ0ZPp^@X{4!e07V3|YEn5su!q zwY3+AY5G?wZ^c(Hx?m+8DSe<7`yOy%wXIE<^WoAeWn1plXiyPYBR6ZGMmW|Di>2XX zUm_E;Ph%4JY!y5Tgk2(NlWALeUo+-777JY{c&o9u2>pM#oY(u`e^K;*|K3N;I#?RK z45u8-Uni}HrCz;x=A5OkKaAlCZ17(Q`Wl?@Fj1n&stfDl#W;aYX|iSY`?E9Vo!nLu zW|MuSqM~A3s6x!>2Oz~J|Akx(OR#NfFenFqS+Gv+)Dutt+v(})rB7yWd3tM~2CyUQ zn9*WI^*O@wnfcr83%;|cxOW>H=S*v$&hob6#vIy$FEYo+$B%;riQUva{>ys|#$3F_ zY`Cj3cAtj6*VOP_7B;c=P)|*wF2)>o!fT|)Ot8&kav(1khS>ls-66g%cq(nZq}e_t0Y%LWpm|+Ga!hV%gd{MPbM`! zI`$&e{Uxo2+u#_vE%^b0aT!?pizOu`?Tbc^*z3uI;T?|-)VA1WGcqw*Q_aHpmQ+?& z=E5y0zv!}eh3%f}cgFg?xOFG9z&!jJ!x||tD7SSI4DI!$uqKr9(rTL8vEUQO#+v;E z+xlU}6@l0Ty*6GMr7Y>jGtElIIdI|>yQ|`SG!M!pm%1L5XP+p=jICuU^y8s#@n1M! zVe<5g%$wVttP+c*6uF!!LEkCGflf1r09C0C+DA+R*VZ+iN-XvU0!uD8PRJVBn2z0j zl5`PqIKNhtXV97h3JcJ}*3ZtF+xUrKTy)h%*?ph9R4ypc0?M8ON$Bk!j!d zPzSG5*hZ?JH;eKyAT3}^_CAe=Fm<^HJqH8czZA6D1QK3)5`5V$p`$*{{&A_2;3Be~ zQ6`Cg%M`bA^BQXMeyRzbV2heq=M{@4WZL;MJF63nqWY`CSHKrkoEYiNIlNXt;NG4s z?}!ax&Fz5ku?b)^-$7>ke86n=-7VF*g5YF$WouA}q%d7yo*9Rx#O47_NkiF7RH8 z{k$fd;U&(p&%E+sa(vRmLAuGEbs+e=cPf6;b-%2O32TfBnp56T*; zjV<*&)sXHeReLf@X<{I;|6NZaH+$f!jfnEgtAf%^H7T&$7ZYm(PDEXm+VAh)@782F z6j>C>t(h9AnImCZ^a=|sF@J5?o%P;?tEwr(QNmOA-sPAvim?@h+e>8o!_7*_Rk>R7 zb1xX!#W~CT_X>M#v&m+g`X6MbTZ46O!D6{MY@N}Yav*Z2OLo7l$J=wWN(Qp@h;dhS z!q{#B-P$?PlSqEhAdp>xh>y1Ju?rU+={ax88Y+_kFAh7^%rdL#dz`njvnuZBi{@hK zrk%>29&!r(qv7&}ns*PFk7YN&?kda6g^eZ3Gg8-k(_SWw)>x<*#cTy@5x1&Ma`9}G z5A%RA3)$&nH*?;K;4c@fJ%PVotumk?8F~$NR(_)mhgNCgJ^9hnm@=Z!SF7qUukE2x z(Q}rG-zkk-OY^!=@jAA8LaD2uRgyYf=;WeMNl|4xcxQLAv*lsJ+@hx5MD6u^_@rQ? zy_{M}VUV1YYQzpnB8pBRd>0vCU>%g)*q|wnotsG<59C--t{n)t4?9e-xX##5ZVYBYx(?+f873>}Fx^n@5d8&hGg}G89yTjHw z&v!DF+590 z-K>qBI?L81WDf4vOSTAX%yN^~vw?-O9wN(_Py2VaSmt+d_}{HyF?%N>L;(6;#91Lf zJW^gJg>|gtb&bWYPfYZ3GJ-QKI@jy(Ovlv;iJq#I&`5%&`km`Ud4JVKni#OQ$f zLRH`Ui5@98xT`|#dzOQ2dEb6TJZcgKiqX6SYK_y)qtEP|tMMb4Rs`O|uj4Mr_bCyvbSVg-qijm#PH=uion%JwWR z9EVU6t#J$gzYtt5cdiMu0$TPRIc}tR$$N~G=T6cRFz;zab+y;KUi?4Ci_2k?ADP$6 z5W6WK3u~b44}WTKwvDs({;9I8_;_nymV%d(iA+)BC@~;cu!a+Cv%)tJ>g49{{IHAE zBC;RE2ElY$ad01IXI+XmbiU6{RJjVi;m!(cD#E|o*W2br;|j!U4S_b0H+ob&eD$7R z`*yb-{E{{(ZTn#VByf!tt{uOs?tjwuATG{od))|Jo&rdbVGB>OEDa}iu;2HOPF|5w zF!h@vlh-20Fl$nA<2kXglv15_sWzTi>t+y2nct{vx(#2D$nua4)r%F5aUa!wTLBAk!2t+-TpM=mb}+&9#Nks zw4-Q%1-;#8)fYR!Qy;nYrL6-d=g*a{zqUE$&Fy2H-+x&k7*`#ulOV!~OdhF8bXI^E zcOZQGR?CDerx%%coGmaaOe{9m1?J+T5abeZu~v-G4I*Px5i4j6np?qwgFCO|PL-lN zdQ_Oq61j;hb!65{Svft+y7GTgSP&1lR@oo=1T*;%NqY9s6HEXIMDqpPnDXbR5*HtC zBL`b7^TQ8YU|k5$k8yy4Tl0pyySpXeyegSRWq)`+Te+;`o5AQJdCif;1T!@zw<n6Vm>vjF@MljtxBBQ|9S4X6tX17V z$o1utE1I8Jm(yW8npnVQPl&Ho3x9K35^)9H6;EgJo^_2`q{qmW5 zE`#jqCXJbMm*3c8klvD1u2zU=U3P*k+n*V5qNM+re>i*@)yQ&4yds+!E^5nwgCt}7 zGiCZSSNi+^}j|>CfUF|hd*R*^krdrO6U1; z8~4d9$l;rn34y#4te~k*;0$*ESb%4%`%v=_$XfS_llEjJ8|HSUCee zHn#;DhsBL%s1e*U<1KSYvC&Jljvy)4Ma<{+EAWEFZ&Fl*GQg`NVV%X7=%4<6_w|V* zELSfDO9*H@Ee>IX9pvLm)t`Q$6y#>~S4Q(y>BjAf>L=iJ7>%W2ah!O4>w8+Z%ctC9 zVNv=$M>E*9B|PQ1nGFgS-okBg{SoYrL_!HTTjY3Nt%}HEW*31#*m-iYuh=%fG$G>e zJV!v_5s`auR4ktY)n}uT@JlIHB9AI=W6#_ucSgx4e>+ffofYg*g z&Av{d6>=!;#JWkzsMfbvohLu`7FzvUvb8Cz|8}$J4&+ zeoPz5Q{ZQT*g%jBH>3gc2pC!+S?%*Dik}9#Q5@366(LzEXoANnj!^H#osww}w=YYx zZx>-SdYvIjh?FHbloZjSCEDha)0Soq=f6tV_^Q6gaODv~E-VRCtc>t>Im>pPpe+V= z9Cka3~}@%9%j+qFzZmP5HT`si;te-iBvFH%4Co0q1LO$uev5O zW9FQF{*ygs3WW%8g``;3nO+idI=Q|o=OF}?yQJj-=vm|42{9@`Thg!tRSebAU?AyM zC19OTC6y|X!o#E3>%vd}5HKOl%qPk-HQJ;=9@|X=ry7!!OQ2Rs=B;vib?sX=j6~R0 zD;q(hPh(}O+Aisgaw2Vsly%mx0z3a8#d}DjoNKmF=K)!wB{^e?6q6#x4An@D z7PsyD-+49@COtUHPu}(1DL3o9cnWORz(SY7O7eyTrErjhHC(iaKz}D^teKU3l^z%g zcUn3Ifw+Yh@C%D1_wU_(rRz>5Zi2l{!wL{I*kF=^g%_*5EJ6g=jqGQvA<+t<%U}j% zJ<`a=M|#6RN~PWV+8qP^BucigMr5NH0nf4zc{@q}BR82OY?APnk1$DIC19=j@%-FD zD546)qMQ8`B10t1+8}34J4$Q8Ei>2+(@yeYwZ-p+@LL1+1NEB1K^zd#YB9L31J(B$X zjj`Wmas#0~!Q)lx=3s8bTu1v14(sSFL2$!!0H!`;>GsnwdW+0)Dlr@Sl6H0LbecJJQ(`y1d$=>Q{Q zmO_jlfF7{zAq&Pa;f+gsgb!3=l5BD@9om@#F9q$391!GN2scWf)Huu#*4k}^`ju_p z9J?f`=loGnL;SaOr%@p!Y|T@cNW~bn2ya;U^zHEYyy3iMws1T;ql3JAQ|jXBo*rX~ zFNVgp9_YBgFQ*34VJ#9lbAgcB50k6(6u~n}Q*E03Cz98D-!{teRE*V*^CsDxwSt?N zkWsM>xPfuJ$M`qFz8Flx&{_>m?p^6}=Om1h?W=DuZ7T{x=xQL5G4-$mPoWg+{PteI zmASxAz09F9m8&Uiwuiw&#eh*;&!+wwMh*69OzD{=M((yzquJ}dkH5UKESDA#Em__z z{dRuV66ntE*Y9kHgexe=g$TcqB+ujEzBXqzW51}{zPqrb#JgcA_db?Z-Tf9&2jt^_^o_t91%svfp^F>g)^a5I06EczI?a4QUVLx)= z?$)1d%*q+_gsH*u3**aO=AxM4okvLJy9-&UAPTfkPGzC)rX%px3GQmscZ~$mwHiCdq0fM zM*oGBQqeYE>wP=8+mkan>XZTrGf-c9p`tB3n?<4zAN`MP z5cNAX7jaw))WHUyzmQT4WkMRM94Gp4&-iQZZ%{36(ud@qCxV~{$<8Y(N6?}S%MF73 zW|pJu<(qb(8>a0M&LtGtQ-u=xtCjPy?NBT1;Z&MVjtw9LZg{UQ9x+D>EdjLT39T1* zr6B9$d%O9R=u*&za7;d34iDjm?0!X}m0?A)WVW%FPCd?DY_jj)jOzD`#@!%8hXDQf z=XEdJb40QDWk&1m%b~SDL`Z1%sf<=}AQSn+Mjfp#{`!atnM1Q6o^c`D3U_^t7Yf{U z{(|GoahSV6SdBKFoN+A#$ikr_kvlruA`v`_?^={b^UxA(mF6WIKA8X0H6&#MK-ssPI@+@2{XO>x2kp}Dx3 zJ=?+3~zm3jU(k!w@KU72vN7?1Azdu~s9&O!{-Ri5Z z(f#!jok@T!L-PDQ5M&q>m{r`w)L+6=&_&-;kYs5w>};^Tb!@>Yr9yx zn+heXq#56+XsedK(|3CTvXSmoO)$dKXREEp5qiQ7dR_6`qi}VLsi|g-QRZyk5p}}B z=>emnbOd9py`sUxh0fvHou$cbk!$tcsuMSE6OyhuB1T7WCvSUm4X(Hs|BW{xLKb=_ zmYPAq;JtSJhZFiQ{o&%@KA%E>pb#jk)3@~FZ3=8MU7Ys0M_0xDG{Ap*x|)@h73gW> zN$4I1`@ZC7sp&3E-r#(eDG1cm4>}n9-LXhxieIkY>w9XO4LoU?&Nr*W0GytKf5s_pqWR$Sy(;Yg?P9i35_?OP@=7^A==3N`m>XR*R^Vw_${(Y_uw>MO`oSaG;->6*<0F?EBJ8$AlJB`XcxH!P^u zPbL(Ys+i4g+TlU_FhOBN-_XD^8GGIQ!n(+WG53TxgS7tsK|h5c>6s4=aTX7&p2UzO z&(^kX_Nzn!gM*{*y1TXe%uc86WyFrT2XZ7@-bISu0Cor-aFuji*N-*3CRu)fd0%$w zEf1Ooy!JI5Q2=5A4m=FIth4U%;2>^F)448}hgjcF-0f?$?zxDuEEuq6*xz+4O zf=i3#N_ME3`m5^C^`B1z>;F^&Chvj$m!yAc{QAW>0sz4Xeu*)6vJM28P`nc!N6w9J z7x69&4KNX#!U*ov!|d@cUUnONBa&{RDOu>sgSrzXw-<^^Ns%g#IcT#DDQsIhrmfAU z=Nsd9DZsovL4I5tMbTJH1qLNU!LckR$)bq|6(G=8@2W>BZGKk4zwV~4+8eUZ+U3C1 z$(c$7{Fs5Am4I2?pwtnH(SdCSz$q=Uzw++IrS^MKz82dO5X-wiaq|0IN*BiK$FFs4 z&2D)if6TnRjXOLJ%;9CZAcyqC+h^xoKt2BfNv=JfMv~vP>X&uEazl6U+O2X^!#4Y?3CQ(PenWI z+G!IP*LW2^TyTlDxs@76=b-&)-$g3wUGuyhg?Py6wSEvqjjoZ_GqFvKpOv!M|9>>j5%`J-aUKthc{FSae=F;cnk(ULdX( zH(zeGqu2Iqf((xjo%bionLM0O*ty2Bnv+f+XVs|(GWyf)3FxXaR$fmJE8+2m{?q%q zI3A8^#zk7)n@8@AH95Yjp2NHQ#PuzfpYdYOyovg!ex(1eR@wd6pHD%eD2Bcn{xNt? zIvx^g@piQeK&P`Q74SHgY%a$49>S zqRz~-;d z2i>$-sn7=A2&GKSmi+@FiN3~Z-llC)=uIkLtnm&1``P<9_I=aG|I49ypUMa>e?D#F z{Qq8g@XJ5nhsqjS3l-J-{yKdJ)>Z{VKOPIs?saYTJ){vNo2TWTZGJS~pl_+YmOZmM zBzriW>^yl79Ui*$38(lo-Y2pzwI?TJjoVdeQ~P>lC?tA5(d79P(q7Dm&7+&Z8fwEm zwM>Ol_wqiz5-VXjW=P)+Q`gbvOt|&*@%|!_kpHu1EV(eEa#KGTLeld?=~(~yI|I#+KGedom6H>{cyr}U)^H=G*+b4*Au=?m?nA4M?0HTi^Y*ob zFP{D^%YP*QE06P&W&2G zfD5ilRNM9(NSVAU0X>WRBKcI}aADc(j|ZMjIP1OfH4`C+he+S)goGHyR#a~RJgVmT z3TbL-NiuCMEG;#U9<4iRi2bah^u@<7{ft>Nm1X2K`i)4#NtMp;8L^WLIqeBXHTgOXACDnQhqvQ6{P^GcHq6flV0TbNnaHkKLyC{&t-N z%PovhMkqcF3MeQ~c2$GI$H3vy;#N>?)o8w1Kz4$vWsyadwKZ z+aYIxYG+=l$@bnrwxKYxhZqU%^M&PiLgu&JHdk2Q{j->9|43c?`WLQA9fpZ{@%Kf8Tz)$E}fh~;6FaYO0& zYf+>#W8U_^QDOz9Oxf+_;|7qe^owz`xJS>wlIgq?AdbLDJz}V>zWjfGcKq)9uZE!D zMHo zWkkDu$SblWX>%3H92T6ZpWTZOvHI7En>0((#*AL+zL9%0#x5s^=NM(ZTTUWpgRtw` zKd3S;r`U_=U`InY8L<(AG(w!#w1Kp{bx(*4^z~;4mZ}UBBXSBC-ykh!kjBoIaM7@S z@OCQo#SP^&lgH+%V3l~B!BTK>=gTfWw;n+JC$ z&h5>@^XN`*j+LYOk3bWCAwVT$k;b*= z-^sptU3~Nj7^yrNarz*H%7qOOE1`~@xUil z#9kXpEv0%!B4JS^AFg09lKd{_DGws0HO6hUuhpA>+s}?acwe%MauFp?yt+oI3u&l~ zv%}!pI->k2k(X-LC>Mh2V$zKHknf2)!BA3W=}bpZ0C+t@nMOA~vnJKGl2wodf+7`ec6? zl86>+M_T9c{aS(6DpWi#eh^Y#5OFJMp5&mUPV^^f^&|P&QE{j5C95Ff_MNKpUN_P+ zwjeTt@KUk-{fu|gA8CW9f4YwvVUJ$FmtEHu;g1}{?aUvPAZCSX6&-QY{q6k&e+Vtr zYIl=vBx$^|aLB5ffGF$rR>+yn8?scnOxJL!)hzJ{xr-P$LU$m>p7jK^mn?cY6 zA8lC3`eI3{oc|xZra&&Yv^qkQ$8&}+S2Q?y@_5dr-5SpAM)b9+x_Qb21pzd6tppC_ zq23^Z)(3r}+78(*PBWgZht{ODTlXjsR|W72_-`%qSC$vF<(ae_CG?{x0%yC zV6oOBty{vjzkf}T#iF7OpiMDB5i+m8B_D-&3FXO9R(qQaIZzs!n&l^#OIlR?aE9-E z32b@*Z%7z<$jJU=T+Aa8Ny57RDdp8tsRC6i>LXKywZaT?ZitkXUX(fB%od+!AU;pM z(`O+Qra{8I?9Riavi-{b;6$Rp-u*}&^B0MI_+&pan|3g5;a8!+x544JB0s%tVtkPB z@$=p>!vow)2C;a1B+MZ~wY7#23Rw>*hLKkuM0KYbsG+F+{%K&@y9hCCLT@TdL~g}y z$YW1{ob7N(Enf^mks1}BM*4I2?tPvGu`O-9E0%>sI+Lo0M<@d`s+BUWLj3u=7mD@0 z&plF*iV^sCrnPmEBQH!(*ImEl6X5=b8qQV-r_@5m&LMYVK-cxpo6rl{z4Kd;VSEXw2&B^DVRyQ2+ z=|&XhWTNiwh<&kS`_oCZc~C=5O#2Qcc!KZ>1&d?RF2Yge!ZboY*0den#ijaKP^!^n}*MpFL;}maUBVf^g&#)9Y-m zs^XFkdrAV;M=DmUFMr_V7jAhckFtxjEsXDuJ^x`pAM~H;DF6Fhfy!kCUOm`eiZ3pe;K_1Oe(BrHrTqW?4=>Hm(OnHD%fsNs>9bK?(T zvdl6s3fbSU4q&$PJW(Z{Cu(RAYd6~T)xn*Nf!G9szqrXBpGDj$kH`H5gqN{9rR5I} z={+XDvO6%yzW<34#mS_+y1iU(ckR5NQoCmAp8wgT`Ge@1`J5x@P zpF5FZ(^~LVqnBG2K8u6vS%(i^u5lv*cRnUNBu7jujqMaVXsRSunMh!3TX4s_(JMb@ z;=?#(El-=Suti*<`$JRC-?vB8$xR9jY1f3kq9ohKMiT z4ohuH``=eL=hukI?w-=HHLdNmw3PT6v>y3SAil!>L@ncQV1^mEY`LA~s zFWORl9q;u|7;nk{eEn+$xG+0WjS?bhsjV`fpROY?`+(1)4r(}rP#6QHL3fZ^>VitX z01>LbR#TW7x>?KLzXF^7x>@@c2~7a!Gw5#-i6B_~F-}UIbr@p(>CsXFgjp!zu=Baf zCnN&Ovln*|j-voI^AxIBsbx!W6Dl1k;dFCy2x0p&WC{P_8)bK+XSyQJUIw^X%Q8bb z@V!HfpmmXFj>i`=yf|#J@ae&~MdyAsL~1rwZrdXZV4d=Ab54xH)CLql4Y>QEF07j( zc8coTj!3z2mTYL@L(Y$$NxJ7eYt3U?>zX)D0jl~5*emOUJ^|Uo+!82&lO)xrP8j;U#|w@Ha+ak z!Jf@dJa$E;(G$Sl5wVp3|m#S8f^($@VJJ!dSaiI;!# z6?74cuM7F^*bgd-(_lRlx2}LB6ZQ*X&g&B#O7lfo=6A|Zs1FK~J|eoe|2bDpi}ifk z`m`s#SyK;{ldbPis;Js#g#VLd8X$sVIptLAhPEAQ|CqL>w^97#BnWIf`B>sLb4T~X z9&8Uh-=j~^YfD6VrAy28oycTOL-wt|2vu?*h1M_4SK?zzo0Kdfx-0%{tMnf3YJw$Z zQLLSA9ATqtBE0rCSmawNvh0s;D)U0xxBokfmbA~5Kb+t=JQR^mWPQ_?Hof}zPsYvE ziZ9U$$R{Yy9)chwM%5qGKMZAW(t1+RPj1#Pm|S5%oh?IO-L@M-vzZoAlIv(rph zf2x6@iq}D^Mn?F}I;kg5fn%#;O^pocrFR%GN?k&-SrPrzY$s%^u@d$3LM6QndQebj zyG0!zj}D1yH&&Ii=djNT<5BWtdD9C8ZGnAwTlu zFU96%Q<9fQzsY?$CyobhINQ1xXKTn zYOJ{jvAd{}vWgRij3@-%HQd5-aY&<(d|7%zj{iEH9>o3E412j8S2O<@E@%1OZ42rR zBEi^~eR{uV`C~iQ)QOij!W(|IV+qOF@As_!=tVu6zqb9S62!xAjjn6=iwL5q{Jb;V z2>ps^J65m4RD`#uSHQuh=KWmXaHHSY^VmPymGtVSvF9CW;>=eNC(OQA4WtHqq&9tdLN8Er2@?~d9O#$lHV+wUT=@qTR#4L3Z)qZXbTuXO(2l4qKYDs zhLh9VV1E^^EDR5WSLlY7co5JA*P&8l_jL5;bL^CH%KnF3A>I8jQB7s;m;9^ER`oG> z?tzkzgIITxEBK#oIt=h-Ao4`wDGT+FsTJ4w|Mckfw(f8G8qyst9THfm%((;eMExZY zXR15dfL1k9X44k+(Jsl@T?!}>&|5zZ7&mkhzZ!y{mvVR-5Z1>MAW)4X3fANDCn;El z+76X}02%O>F@&)tLyVAngl(Mtr`cT8A(lOMoN5Etvd}~%Y@j(WwPG4Te>`{c@#k50 z@2*8tu#@6mD0rYc@_#tLGZ@7RXjCppWnA7y9hZ3c$AhFlooEUy;{ZI1a+Fw5nLU_J z2|2IPH}y7BLFymRE45kj5Nb!L&n4=ci_DqJp-xXfM}hd zdR}x;45I3y(kE0u4JViTLo*T+xhil)%Q3@BEGp{W2`1s~!ao5(3=S35Wj}o} zjtWtp>4tH#snWBIqx%PA;kn9a#Nd*hM~S2?@Hr`}P@{|mstN6^Ni?JEvIFSkfdnHg z=;;K|zY#T6eu91sW+?wGLW8$()PR|x7JDCBe`dd4ianx&J+gcy9Nu;m=Dec978)U( z+L4`k_fQamsxd)T&_JWHVg6V@RF-0!kWPT{iPD1N`R|~u)EI>tmu*X*9M2@_&;{7K zyx0<#iAM?veZodV3R&h>xb=bP_@h(~4Kw?LC4Y~;jg5j0$1dK1lE}SOS$qOKojD(6 zLDcevNIRAPvsbngr=`|WAkRS^*r_Eu`_IXvlhuJRskqW@cq29$${+4n*U55?84WP> z%TUc18<1b5;X*f1T~ai8GTZ*sotO1U zyv`x}hw{F;t!(sQjl|PRIL1b5U>LRO$j+nlAgf=)j*b37l;9#3v4sEqwmUUnjHBG` zCbhoGqY@hkskI-@K*4muiVVvLnF(RD7*%w&$D8>)eplJ&L8rNsQ?J?`y#`%SeE+dR z;nyS0)2J1m^hWOW(SoQ&kBKfYc2X-aR^1f5R6M;a%kW8U^*tyrUd3^)(d zb~!|1`_=r@>{_td?#of?4TL*a9)!Ns3f@CHOTeAdsnYg5R2zyr^}L}VlfAxtLSi|8 zfNu*=I-Qe8X`Ygw7xh9tVg@maCD%xW=D@uh`q{MpKrdLr(|K=gyAx**QQ6}fyKQgK zU{Ej<3e)E!W0;20oTh$zq+;WPWQO|S9O z?|CsI_QroGNz&|O`xh|R|Gh>DDaD6fDYoM1HO?#N8NU>B*s1AIr^jVpEz_p2*m`F_ zr7ryo*6oOxqg2D5nq#6FFj%cHq|AHgQY+Ja0fRczWfNCc8qbeoZ|| z4!o#F8SFYX!MDgKb9ga`ExZFhR7m$yKqu|hcq-uXuNX*_a z?Qa_`TIBpm!dgG;e=qzq>DAld9DI0~J=SmbnZcqj4sUw%llS^60Vl;n3ua4gb246~ zYkYjQRFCq3L&k%uS6=?UO;S;HtHqTyTT9;vE?)Tf+~-n<4!JgXczS&>R@n6D-iipB zjQUZ>-oWq7ju>V$Ys{HNJZEUtbAjnx=KqAZt8TBANUY`0tH2>Es|P}d)XUduXWTLu zO{&&8Tq8KVC@Nv8M{b9xlF`<2@1wtZROC$RCX0qvSOf?aWL*?Z@^c@~x6s*k|894R z`lz2}Y(yyv6+KpWS*PEwU8ZW`@q3N>Xf@-oY!pfkbCDbWgcAqS9^O> zX~qyGvQqap3p4(ze*Hu8eWzzXQC5tiAw?0!(5rO`dWf3t*%OWq0f9w)@Vj+Ev_Sx6 z>IeN$2Pq4V60U7zBuwHYwIWd0)HFWJ_a~m2J#d&YL~<38w=sC#3&~e`>JDQ43zbPf zMt@oD$NZzu-hAM|ILGlZnq0Ldz2o*9B*iv^%p2ZjYz21;26c`~Kw#SQWi)@pNg~mL zxAyKK32XrBPcB8F-@vPChMqEU*vkv?VJZk$GJ-V43Af-=iIZRMm)YfaSr_--j83IK z=m4??T{2dNuz%t9p^MpZ>Q0o6W;#PMRs1`CT_4yd@w#0{Q*!~j3VX|qyje|+tvf32 zm#-Ul1Nf>RJ(}_1qPc{8^AG&7>3NrB&+zb+a~rvWx{b}+XbQI!of9Az+^SWc9{+d6 z$Ir^=pp5!=AnT#tY3i>RTo&_4IAjc`mr^a&qWmrw65|M$MVd^xnJ$YL*l=(}JUopvdzhUxbHbT{s`p^>_YO@+>t?Blezd5~m% zVPtE2(u@ZNrFWzhvgAyKGWG&al6q`7i|o}JatIsjD}`*EEG!8!j9j_BV+VhkaPq>R z{avlSbyoW9>i%<;)%Ts00>-bniLTU-%Jj&%;vu?nqpeYb>1&;~DZ#DI!a-BccX~Wb za;|3Ff6)b$Df?RZs!w_j=ME2iK6FO+7djio;v5z`tPc0(eQV+sekURL$*AIu9CZTC zQk?_#9TRi5UziS={ruTnsFbNovsI1 zd>4>`UHcLxj0@4M-4EMi4>HJ_(E#rXtnEt>t0?fa0XPmX(I7y(_b~ra>s_O515xf5 zpoG$%-@jO*|5tRH^!<9Z((fpRK90uJ)HvcP=->l=zT~n?MKk@g@kw%?UxK|E!@u^s zd>N|YI%*g86mD0nK3^`up#`70LP6NGhg|W;2$o9KRzb2ogBZ($>wMXB*KF-{Cg5dz zTd?tM6nmO7BZVkHK{1=Tb=0C9DS|JKb2&(U6I7d_a1gQV3eS~~`S+0YmuR7cF~X0`21-zv)H&`olx~=@d{2D4Y9wVz_$= zYPzn6sCpj6eEktd`WE(~O`kV)TS8XB6812JjKi|ilx*=mJo`vFx0ldGLhCuU{c8O1 z*V#4d>6%X&crMgLcx|dPI!X5Ba5-Ns=7aj9ZR;BZve4Ddr=bzgnA);ju;9n~QAKY0BOU>T1-l0;DYrjxE`fFD9?SjU8e;`h! zI`v=mM)hUzz^ZD=l+>TWswRQ3gq7&^dtHMx!BLgxNb4ErZfhbnF)^3&X4Tnf_g-1+ z=0*;9jFE^POvnZt1bFFL@tj*xK9u;ac|X9Xp49==A&T z$>`OlUo)$>#>$Tz&&1EV5ak-Ktd8pQH-12DEl6M3k=vidqg=}rHjhqCK2exg3Z#Ai z=^pON40+59|5PddpUOf18%}on=NUuv6CIQ`@`*J)y0HOd2-=W0O!#-%_yL4G^q%_$ ziEIy?ri*-3&S6umUPZku_riQOBbUaPR4oc2ok1Jd*oeP_2Ox&P4#6%T3Ifv)&=3k4 zqs^%|L>(#m6$9#m9s75)4pd& zIJPKEUjPS8_x~1loMsIDA9D0x#h(86c+$hy@@;c=-m6^%fN4HzTw*@!Fg&W-$)OPq z=@fQn@7AeD2808xHZI?pdRmPV4vf6y{ysaRIsr(Oa)x#FjQNYXbcpKSD_3+foCu)O zv&UUC>rGw|00mUDr)Nf^*!GhddITMf*8dFL#JfCZDki z807e#8XD}5?iZbKd^;7JU;tR_-O<;3FQX-x2SID9_cr()jKekb=4Wo~ikD9$Y@CV{ zjp}16JfM$-$8j{ffOqseGbJ>c(#1)V8+-5F^BOFnk1JCqZl;SJw>GX}bidX)OPsNM z#kl+oHR^}XdmWqhbOgTsmw2mQ_SrZ@{$)!H9Mn;|u=?w-2jDbGqraXY+#wxG+0}}l zCI@Ra0@=`j&4e5*Ta7+E{Qzd<7gFT{-zNvQB>My~WE!5i%q-vd#-^zwZ9w2*< z3pU1X8Zo1WwQE&FD>^I@PG(q2^S@er6u#7~6{mMmXT$+SbQCBla11|}w3s^BHWQDe z2%Q?bU&FbS13dnTbbU27Ex5m4LEa&L_G~a1DM8fB{xLMfm(-Z*DLQh~FFRa@BEA1NhYQXjwea7j>D2}6{WMv7T7u~vGE;VDw1v%Y+g?6_)Sz>zPj?wqfrOo(p z-Co}nM}D2QRX5jS5Tkg$DEwa~5jGhKSMyISYeT)PW7k61CQHcsVuRgC>bdWp)?pMVt68_K)U=;GN=^(H3W9 zp%ZN>e%$4&O8!|NC6RwReMigZeEQkHzrS1cKlXN&g}6kl5Pxt2l~s3ZKU*Yebv$`? zXvz<69*TikeD96tawh&T5$yU_tup?kMqQ4=H|5zHjoFtkFXD{sJJ6Y7MY#9g;NVMH zxeQXVEaxs;+3fr#lNj0X<0Z{^=f#o-y4QW%7Eb2ia`GX6752TF6Zgav-y913vOm{I zCDU`3*LEpu(Sh;dun&fl#+7PxoM&^>Rauq#)c!H&=6GKayNU19s>P1?EpN=WaPitZ zZzM3JJf1Ay9JAHz?e|1U z!-Sjk#@m6aw}|6De9e(yZ~fQB)~`$P=zYWy`Fjdg>;1b+!oEn-kw#6&BKjpX!c6-4 z1B-V4T6z6>V4qM2{n8w=!Zt&1T8PfwM)klPNN5YF2Q@jzw)jbL*4gB- zBBfzDA$BIX;Z|sMOYw_K*pGP##;-*Ex*z?580CRkm`zJq&mrM(a=24s*;BnXdwFgw zRj%1$NV#ySjq!sR-V}|nMfexSMq16izi_oC3BE@j4HG|D1F&) z7+c}ao`ji+Nb<%h;6fmc ziJUQO-bW6*r{M}Sn(wrpZA*Z6iCi@~G*^Cn2A%4U!yr6HQ|3KkQrsXH{Mv|D4-?Vo z2-)w9UT^y(UoDOUaxu(kevlZES^8n;s^bU@Y(;v}My=^*sS)UOw(-XQA*=r!WEFj4 zdajOpANkc|=cDl*gtiP@o7@+cH&SidAKTlHwfE&wQJ>ki>6>NpZY$a(aRSs1i7|>o01;4z zB!ae@NTMRB2nh(NfCv~ArNGW$5Cr0Y1O;)z0Z;@~M4>7+Q-lHp6hx2;gA@u{LIDL; z1-!k>A?bVXTKC)q_St)%!$Mj8m9iV*@9AF`S(nQG_9tt} zVt@T_JFosL zAFO|W)q>+QIqQh?RJws)+1nMuZ+tSRjLEesM9Jql_(LK{ z-)Iqi55XS%sH+i>rIdg^S93{#4oMX#GP5SUJY3$2!y|+>LLtT$OobtL6z+67hi}sR z*#oWHyUSlLlu>LRf%p-P0KXW-k5jPg#nV&2N0n~}Fo}J7mRa{hUS7!;xDt@stkGtw zc_u|NO6O@05Qn08IXE-c7QKYQ*QU;!HZmvf3L<(T*w9nhYT7o4wKhdt8&d|u&9Ywn z(T&YZ6=Qo}A7}N^7O-#ax7@&;wqo2^ggAZc_!mDjXFW1mHhXAIe(Q-XM)I8!3Wa~{ zwwS+6!gp`}y#e_9SO0xo!H9FW#Oc8=nntg!S_j;H)t$?G?;38r|K}%t;~o1Ky=ui) zIf?)L#G}0~I3w8p;AVfdgV-X=;fm=5pIlq(ztoItNMYhPeE3a|7Q=O{#h*;m(>bWP ze}>%cG_HErs8R>+^)vW>t%1zpIBN@<*hr@_RW;!>0r_%<|!94}Fj~ zF=+XMcO!@FJo4 zY6;RsAuGy3Y4S8^ULWY^P>2=)uHEWuFWB0<4`0NuLoHxuXNTf;Vs1VLBkWIz8X}0e z4^5bP*V7SpH`^Y4DF|D8d^PaL+n{VurhwsK1I^j4VFcK}YiZ1Xu@QGqARs^j%)}c4 z947`XiQr6#;kp{a?{h`%+rc03U@SobhNYS!irD!i& z!mmp9&k|HD?yU>`w;*-UG$SG7WPdC*Df=&iqE|ntsqI(x3nO}7az!*LUuo0CFNgma zYyYVkA{PATwXV<(9lKTxfr$a~v-#}o1ApkIXs9$Zce&XO{u8~%Qx^4M_#bb2kz2s4 zmiNkb;XgOWLpaVz^S}Rt9u;OIe*WRNq%p3@JM{c=~n0o#h%_+>?=&^@)@d-w3`Z#lcjTUlpOlO)3)_4q(reg5vbU487O1942AMvRYlULn$aDO~SF^2rh z{`IO-VR+y8mHow_OV6Nli>5<^5j)z(ikqGg!Nird&)Ovc7S{qbinki+%|0}t?YrVi*G^p_`N$k$aX*BR`S6@w zZeCb6k80{JXSpqo&(G*m<$#b-kf?!{o_jcG%0+8Vs7)cf^hWP+bOd| z7x^0-kUbsK4Z@$l7?ZN+OY#uz=*36lR_hfR*f)(9Vd{Y{m{U-uI0(^`6r&L3Xl7MH zllTGX>i71{*e)H)5Ef(H*UyxBlejbE^CO2iVTQx~azM~mSH}xi_05=3))c>HSddOR zU~>GcXJ|Q>@6o4T@O(9j18pnBvw3Y;j-|Jy?>tRD0h65_82{*j99k=W3KmZQga{=7 z!>4ct7U=bkZf|>)9~lokIgsd%R{RqTdk?@sr(#xKwis{V0U@^X$QPQu!H`pPHe=Jj zU7b$t#rS0-{w3-M-7(rclEW!3UTcZ80E3<+pa6^~Uu@TBQ-;k5pX$h&E6)^u^5&Fx z05-2khZ-RO6Iu#k4e}PH1bW+Uf3iOTvs%8HIzOI;t;!kquCy_F^~pgSXRB;#>#|g( z!xs5n0_}%kiS>HQQekYL*@z9!<&V8U%7Eqb6bv!mhnuz5KiT}<6NtS!?g74OMfLR! zN4_eLbTn)&(DHzCYA+_MUas=K#<|xVyi&Muob@}W7RO%PA;~+O)o&I*w60dze*2t5 zvM^R=(D}{fhM!VSWu&Wea`nPJpG18)qO-`3v$avVy^TE*9g*94ADaj&ueVzu_2ZwP z%W)B_QZ88bVlx@)>$7y-Q$}Z5jy_3*-k=*bO)=`Pl^61=5f8%u?b`Mm8|^76QAW=6 zaSIAbbgdN*>Xs=jvb$oxE5of{IWDYxl=NiT4>Yn~zP}nIDs~8hK*&uqO<;_uMGzyJ?$qChou^YF<9G~q zR>0JV$LjXE><6B7J)SJ%OIr2eHN!&Cp`~EsbFOJ6ojt3ra)c9>$06`{zWS!cBnTy$ zB|tFEjwlt1dt@Fj$_h_eknW1l5GfI3rhHfAEOIE3|F7iFJrbskjvorRlt7}R4G?%crNzb}J#Bkr>(TM@z*Mxon2UVj zghDG=0nspjAnM6&E@ng=2$1UK??1Prpk`|{sAXU*7 z<{-rm1{Asj;K!`s$JdFra0u5m%(rYsvu`iejaU}xgi%7J3nb@vx_$3)>BCN^eSHR4 zBdzmJ|C}`~Ts!9G$X%@4m)4N3f8>6>Akrz(sk#670g_)t>dR3^#cFK zUBczkNP%`%nPHh&%!;1@k^_k4c&Oz>WLd4W*btHyd%gd`BhGl^`V=k;sZq2apaenm_ zCY87u$B5iZg<%N~-3p}1;Wjz<+@m<9HyHCN$Ib6J9*WyBG39{qO5|f!pm_D*;cgjN z;5PKwiE__M%b@nqrvlE0qtQ?)(k1>6~O{{}} zNNWjz4yA2&JM-^fZUSEJkpkn5Lx=ZCwIdBw9?c-<1dqW|KAiX`Ll}OZ>-S@ed6O*2Ii*}^Y)S5uTeJTVpzG^S`qg$X4C$X2q`*nwI3ay1gXb+YeixAIg45v_sq5|aSPxZ z%hS9u@?}_0TD9&o#SFw`G0>s;I0R+Bkm_-06P`X2K~I2ALAcve`T%Gz*4t0%H)`PC zAek##!XvxaXaf{jEkd#?GtiV?XK4X|sxbR{x>=_m>!H{IT1=;A$ME2LAeP zw4v^TU|;5Ibr2rXS3uV=T$Zm0MAi^}aifh9VAerQWO~;Doozk*Xu(6i`~I$aQ*gLj zt>DYh1KnbXqp}?m2oG)*zisvCtjit3l`Aj8l{DJM+ye;fAmE32%Esu*8eo)1xjPFC z)F!6%a^|MtbE`)iHxE-Lb*@59bK#^QAx2dB?aPxXKz9YgCwHBvt4Q3F(M-V{n#aC7 zW~}mRhciMCW>u7enPfN(!C0KA`f31{6q}|7iH$>O!wQEq8^u+qOQoPn|IB+R@Wj34 zLaif(&q0y{rl4V3+I&-~@Opl=AR#Du8{?IZwKm>-FQ0QZu4)i@hncC==I`4|rfhEm zOue7;qIB}hy5!WSdEx+(^8nd4$U&}Txl_(>37VBytOqVak*Ym_8;NJai+9!j{9OfE zym7(J_}JnPFN$M-C>yr0zzaOow=VFFj%B|=0{JTnl7~?9Rd@7o+9XHkvZHru!4Gl0 z9HxjP{`NB|{{JI-C#b_mWFrr;+K$dh+O~q3`5Snzl zzMQbOVd)^k5?86ufLtL|FMDMFi7XPkn3~X0jcoNR;a7=&R+sei)ScArK96GG3MJndb8#P37LEb%Pf|;l!Ok zu1-;!m`+2gmwx{Irh6swrlI`_AskprT_}~FMLXNgaad9#DMzDo^EKZlrQemit8rXc za*y4WEnM)%^C;k+?qi0DWx+8g3#x8kLZOLttsI3;fiwJ zEwUJn3{a1+Nvt)>4)w8s#*w8{4+itzLJd6cem`cjw{hw?SD2Sqk&VH&FlJ^0BRs}* zn#xV_E1{gV%z>=PY}&9R)2bn~{>&Hgzr;L)MU3*4<@ziaVt_vrpAkK z%Digd*NBWI7n0(K9K0S1X{xSaGDIH1FnB?@YD(=dKVp_vg zXWP|~UuIijIC z9M@+7?J_zPHk@2aj+7oYSQU_sYv_z=(m)(UmuCs^h9s@H^GMG0)*tpCBF{&^WrpqG z5>Aw*#5=XuayZg_ZGpQ0HYUsvGBoSyRI0 zhx!KAUCQ{ZL~>GDdOb{TemFp@^YP=8@TSHX#c6Qah(sUEYEg{d^V$_v1A9j(u*U1_ zbL3+tROpWBe#64SaLpCpuDWzF`D{q%JXtvUk!>7^ z+KAkbLs2bY#^eFRkC=!E$JJ}5V}!s&90Qyx8rfg&Uy*3ZhMf7f@&#kzamKDt6tXls zSbrE)Pi&r~PFJS8W!iK)rB^EFOwM_CnV~5gJ$FhZ>S%e;m@uVqFz(@`L=pZq!Nex^ z5^mZi_M>o*H7I5V1D>e`c+Y~`jN{Xj^Np@R~li6b}q;Z z?WiP=QAc{$^@4GR|4pYQUS3pZGLiL$UrP^?p|p(>E2N%bl(L85XXm*D;{bk0oim4= zL;F7)p=s@v8hdf)4ahSm-tYg%Xd}(JMP+zVoj(rpgf&gA{&-bW!^3{G%@0wT$wyqf z9nbWwb8(woi_bN!lsN5q@n7iKj?RDU#%DS2Ms*q#`2C8BQT1D|UkJ(gt6@!d&NZQl zUU<}sGp+ss0#A$Kc5|6BSKOKNl}CN;M?p^wMk;Mb)M~`ZnyvM`L?%3x*;15AX(i1} z={=O%XN~+Ts?inU3O=J>^X?o6T|_8~tx$~jVCwUxYh9=TDlq)Y#+;*$K^K|2v*U!L zs;ewSzDFmxZK<1Gdbs=glsWoPCnk+ii~Y_IZK{cxyfg-DZ@;05;$s!D}X7^E=4@RPvZkQWPMq7*t9yQ@;=kiGb^l4Pr|Aae`;g< zM#tzKILqXt-3C5|FRU3*q+|{+9e(5xUW(e>%gb<^cWQ2LJ_b#X-{qbM1kn-%E*#tj z4?{$gqLjYzOV?Hlffui8EB1w0C>QP{n#tp&_|q*e`l`{6_nbB@yYF`dz&R*xd@#1STlgpKq6K-7j1^5I28VQ{?kfafau@tcwM(?t?Eg`jvAwxuwL2SXeKB^qn(}gCF0S z$*)oP8};DaEf+r?8TK*^@kptChRtyc$maqIu{9Y62R#*BMRuRjyd-**eLKTz7_ui$oLgs$Iek_7Id|*ooZ5!V5A;4j@f~t=)WlU?Qx*e| z5OWx@B|ItVou}(}19(YV*qE?t;hZ~Cx6Dd4{b4sntvklg%|%2r&G@Dt0w6$zt58Y?&@`OXrA*!zYN@t z)G*zw_XTlzT7*dgvCAv*lGIRd)ooliIY#7AV5o2Rao5j`)wHw0l+Lzdj#ntsb(2gMv605q3eF5)La5>Ff_GkN6}2%%g+^Ewi`zx&%+0^Jq(X3o3vH);?hG-igqBc)SmiUe1HMxKW1{eOTU<}!-nZq;+>|T&AJus8&**WvujI&U zm=;+jNg(utYF(rMnmH|9P@fzAdRE!G^8+(5ehGFX*3 zceiGA32>thTToaIqAh2hxVjfrdnuhUxR9_xw^-cuNRfGVZ!j(12^OVELVogN7DMoX8e?IOj7=7%FLf!)m?;$ZBFb>zD3^pDIJFGmQw4FAGi`G=VKW}{Ify-v8oJ-@0ny z(hCwC$4BtQv=q?#9f`wkTkML<2|;hqXq#JVbtg|lt6{d6Hh|EqtE5{e~ zsMKq@)u=acj5qv*^)kQVicdWAIWMoKZ8e|QLj%31a_#zOxmP!jpG;RoN;z250!nRJApyEuR&?g*79CEXrEe#-(!~JNrr^K{vO@PU6KIPa8s(QU z=flL56&uwlk#|R7uW8%S5N(ewXMqIc(9@_IVPZvgeA(>m&o+3aXO+&<=$9ZR zHV9V7Li;3a_aACBVb`_#KK8^98w;OqjJIt6v3Iei6S%_-{AoTd37-t=-M_G6MInB%Md0aAgrDu_OhnSfg^iN^aCHvj$A&Owib?F(uU}6w zoJLc{W?Bb$1EGLUKpr~Z`3utILM73Pi_!^j9v2*m*!OBlWW>nsM=rb7W4osW;?+TvoR<>A-c%UQe%K;J#%@pL43%e_>0~{@Bd- zv$Is!x&$bvZy{=?H&^l+vJenyLMTONF^&b`Q=ATiXeD&0CgJZdE+{c&gPf(TuS7WX zsjRR@5zeHKC{ZAe)=C6jb0%0E(n;Gj5WSPgRU+01c^N9F#Kf&?FGdJSvQfM=MJWWM3>4gW7I7aaDiy$#KAbjr@% zHV9u&>xxKjTRy3+;Q8kmpC+-1w@==oS`6 z)7BI#;!^GAq6BQ=K7EI8uFh2?A)Ad>wm+$XM$0G{;nd8<1~oB95*Y-ZJ>Df4JGXx%z9h_58$_eY=q#pFGg&}2GB?rP z|Ck10!e(%6Q|9LOm8*t+_HK#_ZbB^4FuD-p$Ll^eFQIF-;WX?7apJC>wcN?<84-!o zxtL5efQ?C7MJfZE8*?=2wNxxe%i zEHbMYaX+K+*JnT97aLhMtKYq-{k{Slunj@Ksl$FbnTNdH>s|6%7Zv)eHCvZHhVXbE z^FrEixngIqyVB`%QieaqVJq_$KpTh;0=~elXTew34c^z0*31332)IRPGhzNGl!8&`BgN_dRf5xE|@sJf+0 zT=w`e6kY^?W(lQUPmn_tq5i=;GabR<)2}FAMN~^wb4&$_4cL1OMD? z=l);mPfI9ELpF$a^r`)#UwB5xRCnA+s-^$Ne-+$KG@n~16z5JG_vMo{I71E>u2}GK zIPNhU*mgqi7R2Zh_h2V6=bedn3JPZ6Cg&>-!VDvC7DqQhyr?pN#T?akf@C z>xXhB=Qqa)m^YoOocnX#M}RxoA7iNtEX$zB^3ypdQ2rv*@+Nwkkf4>(lQ{C=^<_Si z79Ht`%b8KKP{u!^zmbhI{Vob95f4H#noCc1l2e#o+rZ{E!BP?D&i}AKriag@$Wd2t zwN1?#I#`AkQHIygHCHMpJY9e+fRm-l;i6;A`j#t3$F+!N{tJ*Vtl#hCfdxG(lVki&A3cT1etjPd7H;L zoe-)e5-AIAgqTQ$M+DrXSWq9B8psPb)a!D^K&51$n-2xRQ|~QY-{E+CX4gYO5+v-j zNOrtBXRG8};s%;C;P%3C8hDn@=tQemNa|L#s!N7Ym<9oX*YrQIC-CP4L#Qz$8!PcF z8Zwecp)(#hZP8c!Z@2e^9}HKoiQy z6D68VLYD4TF!pT8hjHpE()N5x>c~^n2lZ&VY05?VBzRQ}C3bh8s=I z);BjdeJ2JzuyfsKnq^ipEnNMnLyzm$o1^N%unI*{-)mN-$d?I>cJ+4b$La5jYGW== z38@QCg+SCwr9d2wNG1aWohWn&(Pf(i$l{ugLvrj5%>rL1QLbj6nq(kN_0Pr;cVRAy zuGNB(!?`kAV>8WT5I9w(aKKzQ{J};SBn-N)oANH33&DQLg$=|8B)Vf^M}u={XpbN5 zk7Z!Ok=soC#|B%G-Ea*h1cjUBmPQNQ`8ry$S}?TXY&iex&>bYJ)tbBjC2+x4%{L@N zTZ)c3`&0VJwK+ z`K@LP<8rh0&z|1$RDdwOl3S0UQ63cJJp^cwRhieprCZN>=VhTofUdc$R~@I5S^@HT zQ6C{FlGy-@l#wT5i^`hSKM_p63BaJIg|YP_c4W5gl!-N67M`_I94@wsKlvo6_GsxI zCL@nwVi4>HV`dMmuK7$5%ff~cp7xU;xh3n?2jhtk_yVCF zbo+qP#K6|)!(DFL%O1XFZ7ToSBW6?YnijBbK2~ug7lRQ`Fa{$l*wFWIG8WrD<8w_m zJr$tg;JF27u~za7BBq*Q>G14tUgRJtQIs#}t3q*c0H$KO2vknJj+ve^)%(%%{%#uS z6FLn<%{cR}jiHZ(M&69>$AE!Hg}&*K;(DdQMKz&Oq{$7T94sS&^c_`>Wv?F&kdV8M zPM+Mq(bOMr2sAy7`kW!HAv(c2j>yq z8HrbpqFBd%q5Xr!Mq6Uo96!A%`9^ebf>>LX3|fbEaD2j0aqUV=}(<-MB&qf zazxWULu^SxuV}9@_L0xyTix8i%&*ADwhzOa%6UJU9ahF6&E_rmRFItRfA7-QJa{*d zvVtZcvr`K)7re>z52ayaN6j65MQ{9z43#y0)zj4_;$RdqI-}TKMyRv zU}nLQR?9cf6v$N+7C;pmPyrT(er!!y)4&o{yLDwPeuN#+9yYkn_Xi}X+9f|S)j%e0 z?SyKt+NESwnm^H2?EE$$f%iLlNVP*`ukOe~67Uc?%laxF?KYcQ)vBC}7Y)Pvvy&Zt zn{HPtXIcAi+$4xQhJ}`KE@jJZ8-H(rHIBLD;`a_N!_!${sABgHP1k;FS_X?B~9+-36KfTtP z1?xC1(R*=s8o5$%K(0N8BWe6Dv-Qg!HNYL(pnr12oJ@aE#KcTvT!g=+HTKOB`h#`0 z`I?&Gp<`}M|`N0zms`_==3)h!|yrX#YyE52R$SS&`n>b((Q zmYNy@8R%iW@O5_%wo+-m1&{{XSb;EmoEwe5dkfHwH!7ZNobuyuWJp$^l09}&NlrNS zhhy8Acjuh6&LQMYbydvTwp_aT#^*x$Vz(Lrs8*iLR1CFEe9*-L!;)fKp1SnTnKlLdApPf0w2g$qq`w zi21?}Ok|q+&7Ch32EmCp5iKp(DQ!|L(Ve*JR>;C-ooT&!C#J(7uFffx8Q#gmaILW7 z3n74uy>R=Z?-RDaxfyIvZU$gnwz@*mfpPoRE|nk|a;!RYxOO{Q2j+?TOC$%(DpY!x zmNuQ=yhMPyWP8z#wJRifL+heH@mbb!bY%YZuABf*P*h}#>s3hJmkY`-8)Y{}k8bk6 z4mctkSuv68Ju~V6S0tTU6rH-rHTx-h%_c!lhf+h%W+i>}^|!+58xyT}1q;yz48bYV z2J859vX%XWd4RAUWg&}Nu0!>`K<;{OC5Ts5CmPg8f+T9yc5o;Lf!nQ8U%x)Rw;Tk1 z_t$TZy7Ik{IG(__^5miX?t_h$M}VmoxlYPF-rkt=n_nYxrDY+um(~j8jcTThMgH4b8h~+536Y{41LUe=poi&&crKu{#&x?%}Mo^c9(vD^&0ILVLys^TL<<4+IykI8)2FvME&!D(hQb%6VoY#9tBT17`but2JWWTGv z^jd_Z4o=+K*KvEm&+L|yR81oDKZMa$FLZ4ahr53qbrpP~d7)P@Cl3roo%L7ofrh;opJFE$B9nNF4OV(< zWESiA6jBUH>uRXpZ3#Gc0Oe^!W*9wufy<;H=r~b&bOCE4h?-Cg;Lx}evW3OyGHbwd zoTWuTE++BpEQorI@*1#PbX$P8`0tp}&u6P0^rM*lUk+ecy~Z=n;m(Tpn!;PD zGI2)P>P`a^)>bIfZu~Hxxc&eH0lM1S+ytS3L}JiqS%l;K)OJ}@H){CMmXR|N5rAI| zp!D@XF739l0d1=L8^hC)64DyE5c|IRnH1oc-wD}zAh7!Sn)Xam@co%v5cM4H(&-_} zU1LQUg;dhq4(FA|E*Z(|bYXY2e<8*!yhT+L-m|HuiN$6dM#w-gMQ{`ePEH5>G_2t2 z9)MU}2>h}Y1?bSKk*CODTF{i+$F-#KTn2{JN)=K>1R?FQ*1fm)oKOPN(&Y!RXGkLt z=S?YbEg+Ib0-!kk^?;3ReWSKE80X!QnXTiP$j%5~oP z+$MYWKk(4T^H{aBqZ=vvm+VUE0kG574ydx9Sj46nKa(A3c60a`*dW_DFqutm4|+^N z=xTO7_=$4w@B=EwNLsju=lq_23v1MZ8#f^nDRKsZj21DOT({~ZTTpSxeG>22wKSN>tjrpE`LBb>AHXhuiVT5py)v-Np8|Tq}gmFYHMd=Ihj4iD(O6l zi|r;t${w3TuVgMb7+iT1a{Z8;?pu99M5mG%VR| ze=o3Xj_z-cT9xRKr!0t2eO1Ulo$&V3j=76wj2@kHUXACP85gUNWJ z>U^^;#}%~#T6Af`@_gr z%rWXwbo-YZJR3?dGLB@_y^vi0l`TDvr`d))eJo^81kGsLAR2$)yWSEWGwvVL9uiXoj?!B zL!tag zP4S7wczo0lerq2l=Nh=8S5VnIY82aQzPQc+0AT_zTg;%^of2QEF%h!aPCg~ITHQEs zN}$M4C8*g;0Ds9>8~Vm#?;bfG&o2vJd0&RU@zS~Bf13TjUE#=^xBr^>=xXrpL0t1| OOYE21UHtT`Z~r%mer(17 literal 0 HcmV?d00001 diff --git a/examples/tools/flatfiles-stock-trades/histogram.png b/examples/tools/flatfiles-stock-trades/histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..1ccb62dd3aa51f1fba666dee55c84904134284fd GIT binary patch literal 68598 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 Date: Mon, 15 Apr 2024 11:39:21 -0700 Subject: [PATCH 362/448] Bump sphinx-autodoc-typehints from 2.0.0 to 2.0.1 (#646) Bumps [sphinx-autodoc-typehints](https://github.com/tox-dev/sphinx-autodoc-typehints) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/tox-dev/sphinx-autodoc-typehints/releases) - [Changelog](https://github.com/tox-dev/sphinx-autodoc-typehints/blob/main/CHANGELOG.md) - [Commits](https://github.com/tox-dev/sphinx-autodoc-typehints/compare/2.0.0...2.0.1) --- updated-dependencies: - dependency-name: sphinx-autodoc-typehints dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 12 ++++++------ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/poetry.lock b/poetry.lock index 66b3bfd2..467f328c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -642,22 +642,22 @@ test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] [[package]] name = "sphinx-autodoc-typehints" -version = "2.0.0" +version = "2.0.1" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false python-versions = ">=3.8" files = [ - {file = "sphinx_autodoc_typehints-2.0.0-py3-none-any.whl", hash = "sha256:12c0e161f6fe191c2cdfd8fa3caea271f5387d9fbc67ebcd6f4f1f24ce880993"}, - {file = "sphinx_autodoc_typehints-2.0.0.tar.gz", hash = "sha256:7f2cdac2e70fd9787926b6e9e541cd4ded1e838d2b46fda2a1bb0a75ec5b7f3a"}, + {file = "sphinx_autodoc_typehints-2.0.1-py3-none-any.whl", hash = "sha256:f73ae89b43a799e587e39266672c1075b2ef783aeb382d3ebed77c38a3fc0149"}, + {file = "sphinx_autodoc_typehints-2.0.1.tar.gz", hash = "sha256:60ed1e3b2c970acc0aa6e877be42d48029a9faec7378a17838716cacd8c10b12"}, ] [package.dependencies] sphinx = ">=7.1.2" [package.extras] -docs = ["furo (>=2023.9.10)"] +docs = ["furo (>=2024.1.29)"] numpy = ["nptyping (>=2.5)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.8)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.4.2)", "diff-cover (>=8.0.3)", "pytest (>=8.0.1)", "pytest-cov (>=4.1)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.9)"] [[package]] name = "sphinx-rtd-theme" @@ -962,4 +962,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8da0244cb90aff64d2af412a331650e52939bbabafdfd0ddb4837fdcce83bf4b" +content-hash = "8840ed8dcf9efbb53aefef5232d66120141d38783ee9507beb1dbe7f6ba380b8" diff --git a/pyproject.toml b/pyproject.toml index 198487e9..c2b7aa99 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org -sphinx-autodoc-typehints = "^2.0.0" +sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^69.2.0" pook = "^1.4.3" From 549d684b6c5c8879463ca438c99dd125e73ee271 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 11:45:12 -0700 Subject: [PATCH 363/448] Bump types-setuptools from 69.2.0.20240317 to 69.5.0.20240415 (#647) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.2.0.20240317 to 69.5.0.20240415. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 467f328c..357c033c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -805,13 +805,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.2.0.20240317" +version = "69.5.0.20240415" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.2.0.20240317.tar.gz", hash = "sha256:b607c4c48842ef3ee49dc0c7fe9c1bad75700b071e1018bb4d7e3ac492d47048"}, - {file = "types_setuptools-69.2.0.20240317-py3-none-any.whl", hash = "sha256:cf91ff7c87ab7bf0625c3f0d4d90427c9da68561f3b0feab77977aaf0bbf7531"}, + {file = "types-setuptools-69.5.0.20240415.tar.gz", hash = "sha256:ea64af0a96a674f8c40ba34c09c254f3c70bc3f218c6bffa1d0912bd91584a2f"}, + {file = "types_setuptools-69.5.0.20240415-py3-none-any.whl", hash = "sha256:637cdb24a0d48a6ab362c09cfe3b89ecaa1c10666a8ba9452924e9a0ae00fa4a"}, ] [[package]] @@ -962,4 +962,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8840ed8dcf9efbb53aefef5232d66120141d38783ee9507beb1dbe7f6ba380b8" +content-hash = "806600532f904000271f243073d688b916bf7814886d762f6b88df5a58bfd67e" diff --git a/pyproject.toml b/pyproject.toml index c2b7aa99..5f82ee52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^69.2.0" +types-setuptools = "^69.5.0" pook = "^1.4.3" orjson = "^3.10.0" From 2daa9d2934bb515079a76258506c6995834e5429 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Apr 2024 11:40:10 -0700 Subject: [PATCH 364/448] Bump orjson from 3.10.0 to 3.10.1 (#651) Bumps [orjson](https://github.com/ijl/orjson) from 3.10.0 to 3.10.1. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.10.0...3.10.1) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 106 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/poetry.lock b/poetry.lock index 357c033c..a2e8ed17 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,62 +384,62 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.0" +version = "3.10.1" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.0-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47af5d4b850a2d1328660661f0881b67fdbe712aea905dadd413bdea6f792c33"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c90681333619d78360d13840c7235fdaf01b2b129cb3a4f1647783b1971542b6"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:400c5b7c4222cb27b5059adf1fb12302eebcabf1978f33d0824aa5277ca899bd"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5dcb32e949eae80fb335e63b90e5808b4b0f64e31476b3777707416b41682db5"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7d507c7493252c0a0264b5cc7e20fa2f8622b8a83b04d819b5ce32c97cf57b"}, - {file = "orjson-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e286a51def6626f1e0cc134ba2067dcf14f7f4b9550f6dd4535fd9d79000040b"}, - {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8acd4b82a5f3a3ec8b1dc83452941d22b4711964c34727eb1e65449eead353ca"}, - {file = "orjson-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:30707e646080dd3c791f22ce7e4a2fc2438765408547c10510f1f690bd336217"}, - {file = "orjson-3.10.0-cp310-none-win32.whl", hash = "sha256:115498c4ad34188dcb73464e8dc80e490a3e5e88a925907b6fedcf20e545001a"}, - {file = "orjson-3.10.0-cp310-none-win_amd64.whl", hash = "sha256:6735dd4a5a7b6df00a87d1d7a02b84b54d215fb7adac50dd24da5997ffb4798d"}, - {file = "orjson-3.10.0-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9587053e0cefc284e4d1cd113c34468b7d3f17666d22b185ea654f0775316a26"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bef1050b1bdc9ea6c0d08468e3e61c9386723633b397e50b82fda37b3563d72"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d16c6963ddf3b28c0d461641517cd312ad6b3cf303d8b87d5ef3fa59d6844337"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4251964db47ef090c462a2d909f16c7c7d5fe68e341dabce6702879ec26d1134"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73bbbdc43d520204d9ef0817ac03fa49c103c7f9ea94f410d2950755be2c349c"}, - {file = "orjson-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:414e5293b82373606acf0d66313aecb52d9c8c2404b1900683eb32c3d042dbd7"}, - {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:feaed5bb09877dc27ed0d37f037ddef6cb76d19aa34b108db270d27d3d2ef747"}, - {file = "orjson-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5127478260db640323cea131ee88541cb1a9fbce051f0b22fa2f0892f44da302"}, - {file = "orjson-3.10.0-cp311-none-win32.whl", hash = "sha256:b98345529bafe3c06c09996b303fc0a21961820d634409b8639bc16bd4f21b63"}, - {file = "orjson-3.10.0-cp311-none-win_amd64.whl", hash = "sha256:658ca5cee3379dd3d37dbacd43d42c1b4feee99a29d847ef27a1cb18abdfb23f"}, - {file = "orjson-3.10.0-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4329c1d24fd130ee377e32a72dc54a3c251e6706fccd9a2ecb91b3606fddd998"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef0f19fdfb6553342b1882f438afd53c7cb7aea57894c4490c43e4431739c700"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c4f60db24161534764277f798ef53b9d3063092f6d23f8f962b4a97edfa997a0"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1de3fd5c7b208d836f8ecb4526995f0d5877153a4f6f12f3e9bf11e49357de98"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f93e33f67729d460a177ba285002035d3f11425ed3cebac5f6ded4ef36b28344"}, - {file = "orjson-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:237ba922aef472761acd697eef77fef4831ab769a42e83c04ac91e9f9e08fa0e"}, - {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98c1bfc6a9bec52bc8f0ab9b86cc0874b0299fccef3562b793c1576cf3abb570"}, - {file = "orjson-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:30d795a24be16c03dca0c35ca8f9c8eaaa51e3342f2c162d327bd0225118794a"}, - {file = "orjson-3.10.0-cp312-none-win32.whl", hash = "sha256:6a3f53dc650bc860eb26ec293dfb489b2f6ae1cbfc409a127b01229980e372f7"}, - {file = "orjson-3.10.0-cp312-none-win_amd64.whl", hash = "sha256:983db1f87c371dc6ffc52931eb75f9fe17dc621273e43ce67bee407d3e5476e9"}, - {file = "orjson-3.10.0-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9a667769a96a72ca67237224a36faf57db0c82ab07d09c3aafc6f956196cfa1b"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade1e21dfde1d37feee8cf6464c20a2f41fa46c8bcd5251e761903e46102dc6b"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23c12bb4ced1c3308eff7ba5c63ef8f0edb3e4c43c026440247dd6c1c61cea4b"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2d014cf8d4dc9f03fc9f870de191a49a03b1bcda51f2a957943fb9fafe55aac"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eadecaa16d9783affca33597781328e4981b048615c2ddc31c47a51b833d6319"}, - {file = "orjson-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd583341218826f48bd7c6ebf3310b4126216920853cbc471e8dbeaf07b0b80e"}, - {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:90bfc137c75c31d32308fd61951d424424426ddc39a40e367704661a9ee97095"}, - {file = "orjson-3.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13b5d3c795b09a466ec9fcf0bd3ad7b85467d91a60113885df7b8d639a9d374b"}, - {file = "orjson-3.10.0-cp38-none-win32.whl", hash = "sha256:5d42768db6f2ce0162544845facb7c081e9364a5eb6d2ef06cd17f6050b048d8"}, - {file = "orjson-3.10.0-cp38-none-win_amd64.whl", hash = "sha256:33e6655a2542195d6fd9f850b428926559dee382f7a862dae92ca97fea03a5ad"}, - {file = "orjson-3.10.0-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4050920e831a49d8782a1720d3ca2f1c49b150953667eed6e5d63a62e80f46a2"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1897aa25a944cec774ce4a0e1c8e98fb50523e97366c637b7d0cddabc42e6643"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9bf565a69e0082ea348c5657401acec3cbbb31564d89afebaee884614fba36b4"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6ebc17cfbbf741f5c1a888d1854354536f63d84bee537c9a7c0335791bb9009"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2817877d0b69f78f146ab305c5975d0618df41acf8811249ee64231f5953fee"}, - {file = "orjson-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57d017863ec8aa4589be30a328dacd13c2dc49de1c170bc8d8c8a98ece0f2925"}, - {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:22c2f7e377ac757bd3476ecb7480c8ed79d98ef89648f0176deb1da5cd014eb7"}, - {file = "orjson-3.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e62ba42bfe64c60c1bc84799944f80704e996592c6b9e14789c8e2a303279912"}, - {file = "orjson-3.10.0-cp39-none-win32.whl", hash = "sha256:60c0b1bdbccd959ebd1575bd0147bd5e10fc76f26216188be4a36b691c937077"}, - {file = "orjson-3.10.0-cp39-none-win_amd64.whl", hash = "sha256:175a41500ebb2fdf320bf78e8b9a75a1279525b62ba400b2b2444e274c2c8bee"}, - {file = "orjson-3.10.0.tar.gz", hash = "sha256:ba4d8cac5f2e2cff36bea6b6481cdb92b38c202bcec603d6f5ff91960595a1ed"}, + {file = "orjson-3.10.1-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8ec2fc456d53ea4a47768f622bb709be68acd455b0c6be57e91462259741c4f3"}, + {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e900863691d327758be14e2a491931605bd0aded3a21beb6ce133889830b659"}, + {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab6ecbd6fe57785ebc86ee49e183f37d45f91b46fc601380c67c5c5e9c0014a2"}, + {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af7c68b01b876335cccfb4eee0beef2b5b6eae1945d46a09a7c24c9faac7a77"}, + {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:915abfb2e528677b488a06eba173e9d7706a20fdfe9cdb15890b74ef9791b85e"}, + {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe3fd4a36eff9c63d25503b439531d21828da9def0059c4f472e3845a081aa0b"}, + {file = "orjson-3.10.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d229564e72cfc062e6481a91977a5165c5a0fdce11ddc19ced8471847a67c517"}, + {file = "orjson-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9e00495b18304173ac843b5c5fbea7b6f7968564d0d49bef06bfaeca4b656f4e"}, + {file = "orjson-3.10.1-cp310-none-win32.whl", hash = "sha256:fd78ec55179545c108174ba19c1795ced548d6cac4d80d014163033c047ca4ea"}, + {file = "orjson-3.10.1-cp310-none-win_amd64.whl", hash = "sha256:50ca42b40d5a442a9e22eece8cf42ba3d7cd4cd0f2f20184b4d7682894f05eec"}, + {file = "orjson-3.10.1-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b345a3d6953628df2f42502297f6c1e1b475cfbf6268013c94c5ac80e8abc04c"}, + {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caa7395ef51af4190d2c70a364e2f42138e0e5fcb4bc08bc9b76997659b27dab"}, + {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b01d701decd75ae092e5f36f7b88a1e7a1d3bb7c9b9d7694de850fb155578d5a"}, + {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5028981ba393f443d8fed9049211b979cadc9d0afecf162832f5a5b152c6297"}, + {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31ff6a222ea362b87bf21ff619598a4dc1106aaafaea32b1c4876d692891ec27"}, + {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e852a83d7803d3406135fb7a57cf0c1e4a3e73bac80ec621bd32f01c653849c5"}, + {file = "orjson-3.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2567bc928ed3c3fcd90998009e8835de7c7dc59aabcf764b8374d36044864f3b"}, + {file = "orjson-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4ce98cac60b7bb56457bdd2ed7f0d5d7f242d291fdc0ca566c83fa721b52e92d"}, + {file = "orjson-3.10.1-cp311-none-win32.whl", hash = "sha256:813905e111318acb356bb8029014c77b4c647f8b03f314e7b475bd9ce6d1a8ce"}, + {file = "orjson-3.10.1-cp311-none-win_amd64.whl", hash = "sha256:03a3ca0b3ed52bed1a869163a4284e8a7b0be6a0359d521e467cdef7e8e8a3ee"}, + {file = "orjson-3.10.1-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f02c06cee680b1b3a8727ec26c36f4b3c0c9e2b26339d64471034d16f74f4ef5"}, + {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1aa2f127ac546e123283e437cc90b5ecce754a22306c7700b11035dad4ccf85"}, + {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2cf29b4b74f585225196944dffdebd549ad2af6da9e80db7115984103fb18a96"}, + {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1b130c20b116f413caf6059c651ad32215c28500dce9cd029a334a2d84aa66f"}, + {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d31f9a709e6114492136e87c7c6da5e21dfedebefa03af85f3ad72656c493ae9"}, + {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d1d169461726f271ab31633cf0e7e7353417e16fb69256a4f8ecb3246a78d6e"}, + {file = "orjson-3.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:57c294d73825c6b7f30d11c9e5900cfec9a814893af7f14efbe06b8d0f25fba9"}, + {file = "orjson-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d7f11dbacfa9265ec76b4019efffabaabba7a7ebf14078f6b4df9b51c3c9a8ea"}, + {file = "orjson-3.10.1-cp312-none-win32.whl", hash = "sha256:d89e5ed68593226c31c76ab4de3e0d35c760bfd3fbf0a74c4b2be1383a1bf123"}, + {file = "orjson-3.10.1-cp312-none-win_amd64.whl", hash = "sha256:aa76c4fe147fd162107ce1692c39f7189180cfd3a27cfbc2ab5643422812da8e"}, + {file = "orjson-3.10.1-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a2c6a85c92d0e494c1ae117befc93cf8e7bca2075f7fe52e32698da650b2c6d1"}, + {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9813f43da955197d36a7365eb99bed42b83680801729ab2487fef305b9ced866"}, + {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec917b768e2b34b7084cb6c68941f6de5812cc26c6f1a9fecb728e36a3deb9e8"}, + {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5252146b3172d75c8a6d27ebca59c9ee066ffc5a277050ccec24821e68742fdf"}, + {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:536429bb02791a199d976118b95014ad66f74c58b7644d21061c54ad284e00f4"}, + {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dfed3c3e9b9199fb9c3355b9c7e4649b65f639e50ddf50efdf86b45c6de04b5"}, + {file = "orjson-3.10.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2b230ec35f188f003f5b543644ae486b2998f6afa74ee3a98fc8ed2e45960afc"}, + {file = "orjson-3.10.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:01234249ba19c6ab1eb0b8be89f13ea21218b2d72d496ef085cfd37e1bae9dd8"}, + {file = "orjson-3.10.1-cp38-none-win32.whl", hash = "sha256:8a884fbf81a3cc22d264ba780920d4885442144e6acaa1411921260416ac9a54"}, + {file = "orjson-3.10.1-cp38-none-win_amd64.whl", hash = "sha256:dab5f802d52b182163f307d2b1f727d30b1762e1923c64c9c56dd853f9671a49"}, + {file = "orjson-3.10.1-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a51fd55d4486bc5293b7a400f9acd55a2dc3b5fc8420d5ffe9b1d6bb1a056a5e"}, + {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53521542a6db1411b3bfa1b24ddce18605a3abdc95a28a67b33f9145f26aa8f2"}, + {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27d610df96ac18ace4931411d489637d20ab3b8f63562b0531bba16011998db0"}, + {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79244b1456e5846d44e9846534bd9e3206712936d026ea8e6a55a7374d2c0694"}, + {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d751efaa8a49ae15cbebdda747a62a9ae521126e396fda8143858419f3b03610"}, + {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27ff69c620a4fff33267df70cfd21e0097c2a14216e72943bd5414943e376d77"}, + {file = "orjson-3.10.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ebc58693464146506fde0c4eb1216ff6d4e40213e61f7d40e2f0dde9b2f21650"}, + {file = "orjson-3.10.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5be608c3972ed902e0143a5b8776d81ac1059436915d42defe5c6ae97b3137a4"}, + {file = "orjson-3.10.1-cp39-none-win32.whl", hash = "sha256:4ae10753e7511d359405aadcbf96556c86e9dbf3a948d26c2c9f9a150c52b091"}, + {file = "orjson-3.10.1-cp39-none-win_amd64.whl", hash = "sha256:fb5bc4caa2c192077fdb02dce4e5ef8639e7f20bec4e3a834346693907362932"}, + {file = "orjson-3.10.1.tar.gz", hash = "sha256:a883b28d73370df23ed995c466b4f6c708c1f7a9bdc400fe89165c96c7603204"}, ] [[package]] @@ -962,4 +962,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "806600532f904000271f243073d688b916bf7814886d762f6b88df5a58bfd67e" +content-hash = "9f58c6c6e942ef2437f02f1023dd789bc8387b0388d4086881e5b807cb139165" diff --git a/pyproject.toml b/pyproject.toml index 5f82ee52..6aef3f81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^69.5.0" pook = "^1.4.3" -orjson = "^3.10.0" +orjson = "^3.10.1" [build-system] requires = ["poetry-core>=1.0.0"] From cc793e7abf6974ff147c3abc1e0e23afc85cbf07 Mon Sep 17 00:00:00 2001 From: Hunter <6395201+HunterL@users.noreply.github.com> Date: Mon, 22 Apr 2024 14:55:13 -0400 Subject: [PATCH 365/448] add CGI to MarketIndices (#652) --- polygon/rest/models/markets.py | 1 + 1 file changed, 1 insertion(+) diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 509caa86..3280cd05 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -30,6 +30,7 @@ class MarketIndices: "Contains indices market status data." s_and_p: Optional[str] = None societe_generale: Optional[str] = None + cgi: Optional[str] = None msci: Optional[str] = None ftse_russell: Optional[str] = None mstar: Optional[str] = None From 25be6a714670511182a6f72638207ae4859445c0 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 25 Apr 2024 11:54:04 -0700 Subject: [PATCH 366/448] Updated spec with CGI and other misc updates (#655) --- .polygon/rest.json | 125 +++++++++++++++++---------------------------- 1 file changed, 47 insertions(+), 78 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index fe330dce..14f9bceb 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -12698,6 +12698,10 @@ "description": "The status of Cboe Streaming Market Indices Cryptocurrency (\"CCCY\") indices trading hours.", "type": "string" }, + "cgi": { + "description": "The status of Cboe Global Indices (\"CGI\") trading hours.", + "type": "string" + }, "dow_jones": { "description": "The status of Dow Jones indices trading hours", "type": "string" @@ -26444,6 +26448,10 @@ "description": "The first line of the company's headquarters address.", "type": "string" }, + "address2": { + "description": "The second line of the company's headquarters address, if applicable.", + "type": "string" + }, "city": { "description": "The city of the company's headquarters address.", "type": "string" @@ -26608,7 +26616,7 @@ } }, "text/csv": { - "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,round_lot,market_cap,phone_number,address1,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,100,2771126040150,(408) 996-1010,One Apple Park Way,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", + "example": "ticker,name,market,locale,primary_exchange,type,active,currency_name,cik,composite_figi,share_class_figi,share_class_shares_outstanding,weighted_shares_outstanding,round_lot,market_cap,phone_number,address1,address2,city,state,postal_code,sic_code,sic_description,ticker_root,total_employees,list_date,homepage_url,description,branding/logo_url,branding/icon_url\nAAPL,Apple Inc.,stocks,us,XNAS,CS,true,usd,0000320193,BBG000B9XRY4,BBG001S5N8V8,16406400000,16334371000,100,2771126040150,(408) 996-1010,One Apple Park Way,,Cupertino,CA,95014,3571,ELECTRONIC COMPUTERS,AAPL,154000,1980-12-12,https://www.apple.com,\"Apple designs a wide variety of consumer electronic devices, including smartphones (iPhone), tablets (iPad), PCs (Mac), smartwatches (Apple Watch), AirPods, and TV boxes (Apple TV), among others. The iPhone makes up the majority of Apple's total revenue. In addition, Apple offers its customers a variety of services such as Apple Music, iCloud, Apple Care, Apple TV+, Apple Arcade, Apple Card, and Apple Pay, among others. Apple's products run internally developed software and semiconductors, and the firm is well known for its integration of hardware, software and services. Apple's products are distributed online as well as through company-owned stores and third-party retailers. The company generates roughly 40% of its revenue from the Americas, with the remainder earned internationally.\",https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_logo.svg,https://api.polygon.io/v1/reference/company-branding/d3d3LmFwcGxlLmNvbQ/images/2022-01-10_icon.png\n", "schema": { "type": "string" } @@ -30323,7 +30331,7 @@ }, "/vX/reference/tickers/taxonomies": { "get": { - "description": "Retrieve taxonomy classifications for one or more tickers.", + "description": "Many investors place a high value on sector data. It is used to measure economic activity, identify peers and competitors, build ETF products, quantify market share, and compare company performance. However, there are some limitations to industry standard sectors:\n* They have difficulty identifying the primary area of activity for large, complex businesses.\n* Studies confirm significant disagreement between classification schemes when attempting to categorize the same companies.\n* The systems' hierarchical nature is inflexible and struggles to convey business nuances.\n
\n
\nAs a result, we've developed a new taxonomy to supplement existing sector classifications. The taxonomy is created by reviewing related 10K filings to create a set of structured categories and tags.\n
\n
\nThe categories are based on company operating models and are industry agnostic. Our current version only supports one category, Revenue Streams, with future plans to support more.\n
\n
\nThe tags define a specific type within the category. Within the Revenue Streams category, for example, tags for \"product sales\" and \"advertising\" may be found. A company may have many tags in a given category. The complete Revenue Streams taxonomy is shown below.\n
\n
\nOur taxonomy is powered by AI and is currently in early beta testing. You should expect some inaccuracies in the responses.\n
\n
\n## **Revenue Streams**\n *Latest Revision (7/7/2023)*\n
\n
\n- **Physical Product Sales:**\n Revenue generated from the sale of tangible goods or physical products to customers, either in-store or online.\n - Consumer Goods\n - Industrial Goods\n - Electronics\n - Vehicles\n - Healthcare Products\n
\n
\n- **Digital Product Sales:**\n Revenue earned from the sale of digital goods or products, such as software licenses, e-books, music downloads, or digital media content. It also includes revenue obtained by selling aggregated, anonymized, or processed data to third parties for market research, analytics, or other purposes.\n - Software\n - E-books and Digital Media\n - Mobile Applications\n - Games\n - Online Courses\n - Market Research Data\n - Customer Behavior Data\n
\n
\n- **Professional Services:**\n Revenue obtained by providing specialized services, expertise, or consulting to clients in exchange for fees. This includes services offered by professionals such as lawyers, accountants, or consultants.\n - Consulting\n - Legal Services\n - Financial Services\n - Marketing Services\n - Construction Services\n - Education & Tutoring\n
\n
\n- **Consumer Services:**\n Revenue earned from providing services directly to consumers, including services like healthcare, personal grooming, fitness, or hospitality.\n - Dining & Hospitality\n - Personal Care\n - Entertainment & Recreation\n - Fitness & Wellness\n - Travel & Tourism\n - Transportation\n - Home Services\n - Child & Family Care\n - Automotive\n
\n
\n- **Subscription-based Revenue:**\n Revenue obtained from recurring fees charged to customers for accessing a product or service over a defined period. This includes revenue from subscription-based models, membership programs, or software-as-a-service (SaaS) offerings.\n - Software as a Service (SaaS)\n - Streaming Services\n - Physical Media\n - Memberships\n
\n
\n- **Licensing and Royalties:**\n Revenue generated from the licensing of intellectual property rights to third parties, including franchise rights, patent licensing, brand licensing, and the receipt of royalties for authorized use of intellectual property like music royalties, book royalties, or patent royalties.\n - Franchise Fees\n - Patent Licensing\n - Brand Licensing\n - Media Royalties\n
\n
\n- **Advertising:**\n Revenue generated by displaying ads or promotional content to customers, whether through traditional or digital advertising channels, including revenue from display ads, sponsored content, or affiliate marketing.\n - Print Advertising\n - Online Display Advertising\n - Social Media Advertising\n - Influencer Marketing\n
\n
\n- **Commission-Based Revenue:**\n Revenue earned by acting as an intermediary and receiving a percentage or commission on sales made on behalf of another party. This includes revenue from affiliate programs, referral fees, or any other commission-based revenue models.\n - Real Estate Commissions\n - Affiliate Marketing Commissions\n - Online Marketplace Commissions\n
\n
\n- **Rentals or Leasing:**\n Revenue earned by leasing or renting out assets, properties, or equipment to customers, including rental income from real estate properties, equipment leasing, or vehicle rentals.\n - Property Rentals\n - Equipment Leasing\n - Vehicle Rentals", "operationId": "ListTickerTaxonomyClassifications", "parameters": [ { @@ -30334,16 +30342,16 @@ }, "x-polygon-filter-field": { "anyOf": { - "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.\n", + "description": "Comma separated list of tickers, up to a maximum of 250.\n\nWarning: The maximum number of characters allowed in a URL are subject to your own technology stack.\n", "enabled": true, - "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD,I:SPX" + "example": "AAPL,AMD,MSFT" }, "range": true, "type": "string" } }, { - "description": "Filter by taxonomy category.", + "description": "Filter by taxonomy category. The current version of this API supports the following category: revenue_streams", "in": "query", "name": "category", "schema": { @@ -30359,25 +30367,32 @@ } }, { - "description": "Range by ticker.", + "description": "Order results ascending or descending based on the ticker.", "in": "query", - "name": "ticker.gte", + "name": "order", "schema": { + "enum": [ + "asc", + "desc" + ], "type": "string" } }, { - "description": "Range by ticker.", + "description": "Limit the number of results returned. The default is 10 and the max is 250.", "in": "query", - "name": "ticker.gt", + "name": "limit", "schema": { - "type": "string" + "default": 10, + "maximum": 250, + "minimum": 1, + "type": "integer" } }, { "description": "Range by ticker.", "in": "query", - "name": "ticker.lte", + "name": "ticker.gte", "schema": { "type": "string" } @@ -30385,55 +30400,33 @@ { "description": "Range by ticker.", "in": "query", - "name": "ticker.lt", + "name": "ticker.gt", "schema": { "type": "string" } }, { - "description": "Comma separated list of tickers, up to a maximum of 250. If no tickers are passed then all results will be returned in a paginated manner.\n\nWarning: The maximum number of characters allowed in a URL are subject to your technology stack.\n", - "example": "NCLH,O:SPY250321C00380000,C:EURUSD,X:BTCUSD,I:SPX", + "description": "Range by ticker.", "in": "query", - "name": "ticker.any_of", + "name": "ticker.lte", "schema": { "type": "string" } }, { - "description": "Order results based on the `sort` field.", + "description": "Range by ticker.", "in": "query", - "name": "order", + "name": "ticker.lt", "schema": { - "enum": [ - "asc", - "desc" - ], - "example": "asc", "type": "string" } }, { - "description": "Limit the number of results returned, default is 10 and max is 250.", - "in": "query", - "name": "limit", - "schema": { - "default": 10, - "example": 10, - "maximum": 250, - "minimum": 1, - "type": "integer" - } - }, - { - "description": "Sort field used for ordering.", + "description": "Comma separated list of tickers, up to a maximum of 250.\n\nWarning: The maximum number of characters allowed in a URL are subject to your own technology stack.\n", + "example": "AAPL,AMD,MSFT", "in": "query", - "name": "sort", + "name": "ticker.any_of", "schema": { - "default": "ticker", - "enum": [ - "ticker" - ], - "example": "ticker", "type": "string" } } @@ -30443,29 +30436,22 @@ "content": { "application/json": { "example": { - "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "request_id": "a4f9947955398c28905337f003bfee7c", "results": [ { "category": "revenue_streams", - "reason": "Company recognizes revenue from the sales of consumer electronics such as the iPhone and iPad.", - "relevance": 0.99, - "tag": "physical_product_sales_electronics", + "reason": "The text mentions revenue earned from the sale of digital goods or products, such as software licenses, e-books, music downloads, or digital media content.", + "tag": "digital_product_sales", "ticker": "AAPL" }, { "category": "revenue_streams", - "reason": "Company recognizes revenue from the sales of digital products such as digital storage and app store fees.", - "relevance": 0.99, - "tag": "digital_product_sales_software", - "ticker": "AAPL" - }, - { - "category": "cost_structure", - "relevance": 0.86, - "tag": "economies_of_scale", + "reason": "The text mentions revenue generated from the licensing of intellectual property rights to third parties, including franchise rights, patent licensing, brand licensing, and the receipt of royalties for authorized use of intellectual property like music royalties, book royalties, or patent royalties.", + "tag": "licensing_and_royalties", "ticker": "AAPL" } - ] + ], + "status": "OK" }, "schema": { "properties": { @@ -30480,27 +30466,23 @@ "items": { "properties": { "category": { - "description": "The classification category.", + "description": "A dimension of a company\u2019s operating model that is agnostic to industry. Category contains a comprehensive list of tags which reflect defined types within that category. The current version of this API supports the following category: revenue_streams", "type": "string" }, "reason": { - "description": "The reason why the classification was given.", + "description": "The reason why the classification was given. The reason is provided by our AI to help you determine whether or not you agree with its applicability for your uses.", "type": "string" }, - "relevance": { - "description": "The relevance score for the tag. This is a measure of confidence in the tag classification.", - "format": "double", - "type": "number" - }, "tag": { - "description": "The classification tag. Each category has a set of associated tags.", + "description": "A specific type within a category. For example \u201cproduct_sales\u201d is a type of revenue stream. A company may have multiple tags within a given category. A taxonomy of tags are determined based on 10k filings.", "type": "string" }, "ticker": { - "description": "The ticker symbol for the asset.", + "description": "The identifying ticker symbol for the asset.", "type": "string" } }, + "type": "object", "x-polygon-go-type": { "name": "TaxonomyClassificationResult" } @@ -30531,20 +30513,7 @@ "description": "Reference data", "name": "reference" }, - "x-polygon-experimental": {}, - "x-polygon-paginate": { - "limit": { - "default": 10, - "max": 250, - "min": 1 - }, - "sort": { - "default": "ticker", - "enum": [ - "ticker" - ] - } - } + "x-polygon-experimental": {} }, "x-polygon-draft": true }, From 8fb2416e9f468e1acce8ed70e667e723c84a83ab Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Fri, 26 Apr 2024 10:35:20 -0700 Subject: [PATCH 367/448] Update README.md to remove LaunchPad (#654) --- README.md | 48 ------------------------------------------------ 1 file changed, 48 deletions(-) diff --git a/README.md b/README.md index 81494a78..3df6c512 100644 --- a/README.md +++ b/README.md @@ -150,54 +150,6 @@ ws.run(handle_msg=handle_msg) ``` Check out more detailed examples [here](https://github.com/polygon-io/client-python/tree/master/examples/websocket). -## Launchpad REST API Client -Users of the Launchpad product will need to pass in certain headers in order to make API requests using the RequestOptionBuilder. -Example can be found [here](./examples/launchpad). - -Import classes -```python -from polygon import RESTClient -from polygon.rest.models.request import RequestOptionBuilder -``` -### Using the client -Create client and set options -```python -# create client -c = RESTClient(api_key="API_KEY") - -# create request options -options = RequestOptionBuilder().edge_headers( - edge_id="YOUR_EDGE_ID", # required - edge_ip_address="IP_ADDRESS", # required -) -``` -Request data using client methods. -```python -# get response -res = c.get_aggs("AAPL", 1, "day", "2022-04-04", "2022-04-04", options=options) - -# do something with response -``` -Checkout Launchpad readme for more details on RequestOptionBuilder [here](./examples/launchpad) - - -## Launchpad WebSocket Client - -```python -from polygon import WebSocketClient -from polygon.websocket.models import WebSocketMessage -from polygon.websocket.models.common import Feed, Market -from typing import List - -ws = WebSocketClient(api_key="API_KEY",feed=Feed.Launchpad,market=Market.Stocks, subscriptions=["AM.AAPL"]) - -def handle_msg(msg: List[WebSocketMessage]): - for m in msg: - print(m) - -ws.run(handle_msg=handle_msg) -``` - ## Contributing If you found a bug or have an idea for a new feature, please first discuss it with us by From 18d3ba7e0dea57dba2977e2c393e92bf2ba86fb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:03:52 -0700 Subject: [PATCH 368/448] Bump types-setuptools from 69.5.0.20240415 to 69.5.0.20240423 (#660) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.5.0.20240415 to 69.5.0.20240423. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index a2e8ed17..eaae4aae 100644 --- a/poetry.lock +++ b/poetry.lock @@ -805,13 +805,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.5.0.20240415" +version = "69.5.0.20240423" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.5.0.20240415.tar.gz", hash = "sha256:ea64af0a96a674f8c40ba34c09c254f3c70bc3f218c6bffa1d0912bd91584a2f"}, - {file = "types_setuptools-69.5.0.20240415-py3-none-any.whl", hash = "sha256:637cdb24a0d48a6ab362c09cfe3b89ecaa1c10666a8ba9452924e9a0ae00fa4a"}, + {file = "types-setuptools-69.5.0.20240423.tar.gz", hash = "sha256:a7ba908f1746c4337d13f027fa0f4a5bcad6d1d92048219ba792b3295c58586d"}, + {file = "types_setuptools-69.5.0.20240423-py3-none-any.whl", hash = "sha256:a4381e041510755a6c9210e26ad55b1629bc10237aeb9cb8b6bd24996b73db48"}, ] [[package]] From 35b356f51f2e9af0aa49960ecaa65ce858c120d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:07:52 -0700 Subject: [PATCH 369/448] Bump mypy from 1.9.0 to 1.10.0 (#659) Bumps [mypy](https://github.com/python/mypy) from 1.9.0 to 1.10.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/1.9.0...v1.10.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 58 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index eaae4aae..0e2bfa82 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.9.0" +version = "1.10.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, - {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, - {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, - {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, - {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, - {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, - {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, - {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, - {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, - {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, - {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, - {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, - {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, - {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, - {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, - {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, - {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, - {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, - {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, ] [package.dependencies] @@ -962,4 +962,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "9f58c6c6e942ef2437f02f1023dd789bc8387b0388d4086881e5b807cb139165" +content-hash = "1844e10c9359822d125378cc42dbe517f01d9e5cb0dbc1f838ebfbf56c40203b" diff --git a/pyproject.toml b/pyproject.toml index 6aef3f81..c42f4082 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] black = "^23.12.1" -mypy = "^1.9" +mypy = "^1.10" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^2.0.0" From 9e83bd8f694f8baea2116e7ce37051785b4bd087 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:49:43 -0700 Subject: [PATCH 370/448] Fix poetry black lint check (#644) * Fix poetry black lint check * Revert formatting changes to ws init --- examples/rest/demo_correlation_matrix.py | 1 + polygon/rest/models/conditions.py | 32 +++--- polygon/rest/models/contracts.py | 8 +- polygon/rest/models/financials.py | 126 ++++++++++++++--------- polygon/rest/models/markets.py | 24 +++-- polygon/rest/models/snapshot.py | 112 ++++++++++++-------- polygon/rest/models/tickers.py | 12 +-- 7 files changed, 192 insertions(+), 123 deletions(-) diff --git a/examples/rest/demo_correlation_matrix.py b/examples/rest/demo_correlation_matrix.py index f056ab6d..df939590 100644 --- a/examples/rest/demo_correlation_matrix.py +++ b/examples/rest/demo_correlation_matrix.py @@ -40,6 +40,7 @@ essential to do your own research or consult a financial advisor for personalized advice when investing. """ + import pandas as pd # type: ignore import numpy as np # type: ignore import seaborn as sns # type: ignore diff --git a/polygon/rest/models/conditions.py b/polygon/rest/models/conditions.py index 3fc0d776..98baa261 100644 --- a/polygon/rest/models/conditions.py +++ b/polygon/rest/models/conditions.py @@ -47,12 +47,16 @@ class UpdateRules: @staticmethod def from_dict(d): return UpdateRules( - consolidated=None - if "consolidated" not in d - else Consolidated.from_dict(d["consolidated"]), - market_center=None - if "market_center" not in d - else MarketCenter.from_dict(d["market_center"]), + consolidated=( + None + if "consolidated" not in d + else Consolidated.from_dict(d["consolidated"]) + ), + market_center=( + None + if "market_center" not in d + else MarketCenter.from_dict(d["market_center"]) + ), ) @@ -82,11 +86,15 @@ def from_dict(d): id=d.get("id", None), legacy=d.get("legacy", None), name=d.get("name", None), - sip_mapping=None - if "sip_mapping" not in d - else SipMapping.from_dict(d["sip_mapping"]), + sip_mapping=( + None + if "sip_mapping" not in d + else SipMapping.from_dict(d["sip_mapping"]) + ), type=d.get("type", None), - update_rules=None - if "update_rules" not in d - else UpdateRules.from_dict(d["update_rules"]), + update_rules=( + None + if "update_rules" not in d + else UpdateRules.from_dict(d["update_rules"]) + ), ) diff --git a/polygon/rest/models/contracts.py b/polygon/rest/models/contracts.py index dc69f614..469779b6 100644 --- a/polygon/rest/models/contracts.py +++ b/polygon/rest/models/contracts.py @@ -32,9 +32,11 @@ class OptionsContract: @staticmethod def from_dict(d): return OptionsContract( - additional_underlyings=None - if "additional_underlyings" not in d - else [Underlying.from_dict(u) for u in d["additional_underlyings"]], + additional_underlyings=( + None + if "additional_underlyings" not in d + else [Underlying.from_dict(u) for u in d["additional_underlyings"]] + ), cfi=d.get("cfi", None), contract_type=d.get("contract_type", None), correction=d.get("correction", None), diff --git a/polygon/rest/models/financials.py b/polygon/rest/models/financials.py index 85a63e37..1a480c48 100644 --- a/polygon/rest/models/financials.py +++ b/polygon/rest/models/financials.py @@ -74,16 +74,22 @@ class CashFlowStatement: @staticmethod def from_dict(d): return CashFlowStatement( - exchange_gains_losses=None - if "exchange_gains_losses" not in d - else ExchangeGainsLosses.from_dict(d["exchange_gains_losses"]), - net_cash_flow=None - if "net_cash_flow" not in d - else NetCashFlow.from_dict(d["net_cash_flow"]), - net_cash_flow_from_financing_activities=None - if "net_cash_flow_from_financing_activities" not in d - else NetCashFlowFromFinancingActivities.from_dict( - d["net_cash_flow_from_financing_activities"] + exchange_gains_losses=( + None + if "exchange_gains_losses" not in d + else ExchangeGainsLosses.from_dict(d["exchange_gains_losses"]) + ), + net_cash_flow=( + None + if "net_cash_flow" not in d + else NetCashFlow.from_dict(d["net_cash_flow"]) + ), + net_cash_flow_from_financing_activities=( + None + if "net_cash_flow_from_financing_activities" not in d + else NetCashFlowFromFinancingActivities.from_dict( + d["net_cash_flow_from_financing_activities"] + ) ), ) @@ -145,18 +151,24 @@ class ComprehensiveIncome: @staticmethod def from_dict(d): return ComprehensiveIncome( - comprehensive_income_loss=None - if "comprehensive_income_loss" not in d - else ComprehensiveIncomeLoss.from_dict(d["comprehensive_income_loss"]), - comprehensive_income_loss_attributable_to_parent=None - if "comprehensive_income_loss_attributable_to_parent" not in d - else ComprehensiveIncomeLossAttributableToParent.from_dict( - d["comprehensive_income_loss_attributable_to_parent"] + comprehensive_income_loss=( + None + if "comprehensive_income_loss" not in d + else ComprehensiveIncomeLoss.from_dict(d["comprehensive_income_loss"]) + ), + comprehensive_income_loss_attributable_to_parent=( + None + if "comprehensive_income_loss_attributable_to_parent" not in d + else ComprehensiveIncomeLossAttributableToParent.from_dict( + d["comprehensive_income_loss_attributable_to_parent"] + ) ), - other_comprehensive_income_loss=None - if "other_comprehensive_income_loss" not in d - else OtherComprehensiveIncomeLoss.from_dict( - d["other_comprehensive_income_loss"] + other_comprehensive_income_loss=( + None + if "other_comprehensive_income_loss" not in d + else OtherComprehensiveIncomeLoss.from_dict( + d["other_comprehensive_income_loss"] + ) ), ) @@ -248,18 +260,26 @@ class IncomeStatement: @staticmethod def from_dict(d): return IncomeStatement( - basic_earnings_per_share=None - if "basic_earnings_per_share" not in d - else BasicEarningsPerShare.from_dict(d["basic_earnings_per_share"]), - cost_of_revenue=None - if "cost_of_revenue" not in d - else CostOfRevenue.from_dict(d["cost_of_revenue"]), - gross_profit=None - if "gross_profit" not in d - else GrossProfit.from_dict(d["gross_profit"]), - operating_expenses=None - if "operating_expenses" not in d - else OperatingExpenses.from_dict(d["operating_expenses"]), + basic_earnings_per_share=( + None + if "basic_earnings_per_share" not in d + else BasicEarningsPerShare.from_dict(d["basic_earnings_per_share"]) + ), + cost_of_revenue=( + None + if "cost_of_revenue" not in d + else CostOfRevenue.from_dict(d["cost_of_revenue"]) + ), + gross_profit=( + None + if "gross_profit" not in d + else GrossProfit.from_dict(d["gross_profit"]) + ), + operating_expenses=( + None + if "operating_expenses" not in d + else OperatingExpenses.from_dict(d["operating_expenses"]) + ), revenues=None if "revenues" not in d else Revenues.from_dict(d["revenues"]), ) @@ -275,18 +295,28 @@ class Financials: @staticmethod def from_dict(d): return Financials( - balance_sheet=None - if "balance_sheet" not in d - else {k: DataPoint.from_dict(v) for (k, v) in d["balance_sheet"].items()}, - cash_flow_statement=None - if "cash_flow_statement" not in d - else CashFlowStatement.from_dict(d["cash_flow_statement"]), - comprehensive_income=None - if "comprehensive_income" not in d - else ComprehensiveIncome.from_dict(d["comprehensive_income"]), - income_statement=None - if "income_statement" not in d - else IncomeStatement.from_dict(d["income_statement"]), + balance_sheet=( + None + if "balance_sheet" not in d + else { + k: DataPoint.from_dict(v) for (k, v) in d["balance_sheet"].items() + } + ), + cash_flow_statement=( + None + if "cash_flow_statement" not in d + else CashFlowStatement.from_dict(d["cash_flow_statement"]) + ), + comprehensive_income=( + None + if "comprehensive_income" not in d + else ComprehensiveIncome.from_dict(d["comprehensive_income"]) + ), + income_statement=( + None + if "income_statement" not in d + else IncomeStatement.from_dict(d["income_statement"]) + ), ) @@ -311,9 +341,9 @@ def from_dict(d): company_name=d.get("company_name", None), end_date=d.get("end_date", None), filing_date=d.get("filing_date", None), - financials=None - if "financials" not in d - else Financials.from_dict(d["financials"]), + financials=( + None if "financials" not in d else Financials.from_dict(d["financials"]) + ), fiscal_period=d.get("fiscal_period", None), fiscal_year=d.get("fiscal_year", None), source_filing_file_url=d.get("source_filing_file_url", None), diff --git a/polygon/rest/models/markets.py b/polygon/rest/models/markets.py index 3280cd05..4e68abd4 100644 --- a/polygon/rest/models/markets.py +++ b/polygon/rest/models/markets.py @@ -74,16 +74,22 @@ class MarketStatus: def from_dict(d): return MarketStatus( after_hours=d.get("afterHours", None), - currencies=None - if "currencies" not in d - else MarketCurrencies.from_dict(d["currencies"]), + currencies=( + None + if "currencies" not in d + else MarketCurrencies.from_dict(d["currencies"]) + ), early_hours=d.get("earlyHours", None), - exchanges=None - if "exchanges" not in d - else MarketExchanges.from_dict(d["exchanges"]), - indicesGroups=None - if "indicesGroups" not in d - else MarketIndices.from_dict(d["indicesGroups"]), + exchanges=( + None + if "exchanges" not in d + else MarketExchanges.from_dict(d["exchanges"]) + ), + indicesGroups=( + None + if "indicesGroups" not in d + else MarketIndices.from_dict(d["indicesGroups"]) + ), market=d.get("market", None), server_time=d.get("serverTime", None), ) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index d97f17c3..ceb5f7f8 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -70,9 +70,9 @@ def from_dict(d): type=d.get("type", None), ticker=d.get("ticker", None), market_status=d.get("market_status", None), - session=None - if "session" not in d - else IndicesSession.from_dict(d["session"]), + session=( + None if "session" not in d else IndicesSession.from_dict(d["session"]) + ), error=d.get("error", None), message=d.get("message", None), ) @@ -96,12 +96,12 @@ class TickerSnapshot: def from_dict(d): return TickerSnapshot( day=None if "day" not in d else Agg.from_dict(d["day"]), - last_quote=None - if "lastQuote" not in d - else LastQuote.from_dict(d["lastQuote"]), - last_trade=None - if "lastTrade" not in d - else LastTrade.from_dict(d["lastTrade"]), + last_quote=( + None if "lastQuote" not in d else LastQuote.from_dict(d["lastQuote"]) + ), + last_trade=( + None if "lastTrade" not in d else LastTrade.from_dict(d["lastTrade"]) + ), min=None if "min" not in d else MinuteSnapshot.from_dict(d["min"]), prev_day=None if "prevDay" not in d else Agg.from_dict(d["prevDay"]), ticker=d.get("ticker", None), @@ -223,24 +223,32 @@ class OptionContractSnapshot: def from_dict(d): return OptionContractSnapshot( break_even_price=d.get("break_even_price", None), - day=None - if "day" not in d - else DayOptionContractSnapshot.from_dict(d["day"]), - details=None - if "details" not in d - else OptionDetails.from_dict(d["details"]), + day=( + None + if "day" not in d + else DayOptionContractSnapshot.from_dict(d["day"]) + ), + details=( + None if "details" not in d else OptionDetails.from_dict(d["details"]) + ), greeks=None if "greeks" not in d else Greeks.from_dict(d["greeks"]), implied_volatility=d.get("implied_volatility", None), - last_quote=None - if "last_quote" not in d - else LastQuoteOptionContractSnapshot.from_dict(d["last_quote"]), - last_trade=None - if "last_trade" not in d - else LastTradeOptionContractSnapshot.from_dict(d["last_trade"]), + last_quote=( + None + if "last_quote" not in d + else LastQuoteOptionContractSnapshot.from_dict(d["last_quote"]) + ), + last_trade=( + None + if "last_trade" not in d + else LastTradeOptionContractSnapshot.from_dict(d["last_trade"]) + ), open_interest=d.get("open_interest", None), - underlying_asset=None - if "underlying_asset" not in d - else UnderlyingAsset.from_dict(d["underlying_asset"]), + underlying_asset=( + None + if "underlying_asset" not in d + else UnderlyingAsset.from_dict(d["underlying_asset"]) + ), fair_market_value=d.get("fmv", None), ) @@ -274,12 +282,16 @@ class SnapshotTickerFullBook: def from_dict(d): return SnapshotTickerFullBook( ticker=d.get("ticker", None), - bids=None - if "bids" not in d - else [OrderBookQuote.from_dict(o) for o in d["bids"]], - asks=None - if "asks" not in d - else [OrderBookQuote.from_dict(o) for o in d["asks"]], + bids=( + None + if "bids" not in d + else [OrderBookQuote.from_dict(o) for o in d["bids"]] + ), + asks=( + None + if "asks" not in d + else [OrderBookQuote.from_dict(o) for o in d["asks"]] + ), bid_count=d.get("bidCount", None), ask_count=d.get("askCount", None), spread=d.get("spread", None), @@ -404,22 +416,32 @@ def from_dict(d): return UniversalSnapshot( ticker=d.get("ticker", None), type=d.get("type", None), - session=None - if "session" not in d - else UniversalSnapshotSession.from_dict(d["session"]), - last_quote=None - if "last_quote" not in d - else UniversalSnapshotLastQuote.from_dict(d["last_quote"]), - last_trade=None - if "last_trade" not in d - else UniversalSnapshotLastTrade.from_dict(d["last_trade"]), + session=( + None + if "session" not in d + else UniversalSnapshotSession.from_dict(d["session"]) + ), + last_quote=( + None + if "last_quote" not in d + else UniversalSnapshotLastQuote.from_dict(d["last_quote"]) + ), + last_trade=( + None + if "last_trade" not in d + else UniversalSnapshotLastTrade.from_dict(d["last_trade"]) + ), greeks=None if "greeks" not in d else Greeks.from_dict(d["greeks"]), - underlying_asset=None - if "underlying_asset" not in d - else UniversalSnapshotUnderlyingAsset.from_dict(d["underlying_asset"]), - details=None - if "details" not in d - else UniversalSnapshotDetails.from_dict(d["details"]), + underlying_asset=( + None + if "underlying_asset" not in d + else UniversalSnapshotUnderlyingAsset.from_dict(d["underlying_asset"]) + ), + details=( + None + if "details" not in d + else UniversalSnapshotDetails.from_dict(d["details"]) + ), break_even_price=d.get("break_even_price", None), implied_volatility=d.get("implied_volatility", None), open_interest=d.get("open_interest", None), diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 1c2ea947..f7ff2bed 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -108,9 +108,9 @@ class TickerDetails: def from_dict(d): return TickerDetails( active=d.get("active", None), - address=None - if "address" not in d - else CompanyAddress.from_dict(d["address"]), + address=( + None if "address" not in d else CompanyAddress.from_dict(d["address"]) + ), branding=None if "branding" not in d else Branding.from_dict(d["branding"]), cik=d.get("cik", None), composite_figi=d.get("composite_figi", None), @@ -169,9 +169,9 @@ def from_dict(d): image_url=d.get("image_url", None), keywords=d.get("keywords", None), published_utc=d.get("published_utc", None), - publisher=None - if "publisher" not in d - else Publisher.from_dict(d["publisher"]), + publisher=( + None if "publisher" not in d else Publisher.from_dict(d["publisher"]) + ), tickers=d.get("tickers", None), title=d.get("title", None), ) From e7b4566cfea21f63b81aeb4af51281effe210903 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 29 Apr 2024 12:48:37 -0700 Subject: [PATCH 371/448] Update ws init lint formatting (#661) * Update ws init lint formatting * Added black updates --- poetry.lock | 48 +++++++++++++++++------------------ polygon/websocket/__init__.py | 6 ++--- pyproject.toml | 2 +- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0e2bfa82..494086e8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,33 +44,33 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "23.12.1" +version = "24.4.2" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, - {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, - {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, - {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, - {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, - {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, - {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, - {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, - {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, - {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, - {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, - {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, - {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, - {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, - {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, - {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, - {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, - {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, - {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, - {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, - {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, - {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] [package.dependencies] @@ -962,4 +962,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "1844e10c9359822d125378cc42dbe517f01d9e5cb0dbc1f838ebfbf56c40203b" +content-hash = "2cf0c53839df9409c9e91972ef3a7d08c7b98de8fcbdadb5f329d44f6b227b47" \ No newline at end of file diff --git a/polygon/websocket/__init__.py b/polygon/websocket/__init__.py index b9f45a2e..77865d3f 100644 --- a/polygon/websocket/__init__.py +++ b/polygon/websocket/__init__.py @@ -127,9 +127,9 @@ async def connect( self.schedule_resub = False try: - cmsg: Union[ - List[WebSocketMessage], Union[str, bytes] - ] = await asyncio.wait_for(s.recv(), timeout=1) + cmsg: Union[List[WebSocketMessage], Union[str, bytes]] = ( + await asyncio.wait_for(s.recv(), timeout=1) + ) except asyncio.TimeoutError: continue diff --git a/pyproject.toml b/pyproject.toml index c42f4082..149ec167 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<13.0" certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] -black = "^23.12.1" +black = "^24.4.2" mypy = "^1.10" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From 62b9f2e183aa07197ef2304b96346b35bf15ef92 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 13:44:24 -0700 Subject: [PATCH 372/448] Bump orjson from 3.10.1 to 3.10.3 (#665) Bumps [orjson](https://github.com/ijl/orjson) from 3.10.1 to 3.10.3. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.10.1...3.10.3) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 101 +++++++++++++++++++++++-------------------------- pyproject.toml | 2 +- 2 files changed, 49 insertions(+), 54 deletions(-) diff --git a/poetry.lock b/poetry.lock index 494086e8..b20352e5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,62 +384,57 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.1" +version = "3.10.3" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.1-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8ec2fc456d53ea4a47768f622bb709be68acd455b0c6be57e91462259741c4f3"}, - {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e900863691d327758be14e2a491931605bd0aded3a21beb6ce133889830b659"}, - {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab6ecbd6fe57785ebc86ee49e183f37d45f91b46fc601380c67c5c5e9c0014a2"}, - {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af7c68b01b876335cccfb4eee0beef2b5b6eae1945d46a09a7c24c9faac7a77"}, - {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:915abfb2e528677b488a06eba173e9d7706a20fdfe9cdb15890b74ef9791b85e"}, - {file = "orjson-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe3fd4a36eff9c63d25503b439531d21828da9def0059c4f472e3845a081aa0b"}, - {file = "orjson-3.10.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d229564e72cfc062e6481a91977a5165c5a0fdce11ddc19ced8471847a67c517"}, - {file = "orjson-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9e00495b18304173ac843b5c5fbea7b6f7968564d0d49bef06bfaeca4b656f4e"}, - {file = "orjson-3.10.1-cp310-none-win32.whl", hash = "sha256:fd78ec55179545c108174ba19c1795ced548d6cac4d80d014163033c047ca4ea"}, - {file = "orjson-3.10.1-cp310-none-win_amd64.whl", hash = "sha256:50ca42b40d5a442a9e22eece8cf42ba3d7cd4cd0f2f20184b4d7682894f05eec"}, - {file = "orjson-3.10.1-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b345a3d6953628df2f42502297f6c1e1b475cfbf6268013c94c5ac80e8abc04c"}, - {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caa7395ef51af4190d2c70a364e2f42138e0e5fcb4bc08bc9b76997659b27dab"}, - {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b01d701decd75ae092e5f36f7b88a1e7a1d3bb7c9b9d7694de850fb155578d5a"}, - {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5028981ba393f443d8fed9049211b979cadc9d0afecf162832f5a5b152c6297"}, - {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31ff6a222ea362b87bf21ff619598a4dc1106aaafaea32b1c4876d692891ec27"}, - {file = "orjson-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e852a83d7803d3406135fb7a57cf0c1e4a3e73bac80ec621bd32f01c653849c5"}, - {file = "orjson-3.10.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2567bc928ed3c3fcd90998009e8835de7c7dc59aabcf764b8374d36044864f3b"}, - {file = "orjson-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4ce98cac60b7bb56457bdd2ed7f0d5d7f242d291fdc0ca566c83fa721b52e92d"}, - {file = "orjson-3.10.1-cp311-none-win32.whl", hash = "sha256:813905e111318acb356bb8029014c77b4c647f8b03f314e7b475bd9ce6d1a8ce"}, - {file = "orjson-3.10.1-cp311-none-win_amd64.whl", hash = "sha256:03a3ca0b3ed52bed1a869163a4284e8a7b0be6a0359d521e467cdef7e8e8a3ee"}, - {file = "orjson-3.10.1-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f02c06cee680b1b3a8727ec26c36f4b3c0c9e2b26339d64471034d16f74f4ef5"}, - {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1aa2f127ac546e123283e437cc90b5ecce754a22306c7700b11035dad4ccf85"}, - {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2cf29b4b74f585225196944dffdebd549ad2af6da9e80db7115984103fb18a96"}, - {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1b130c20b116f413caf6059c651ad32215c28500dce9cd029a334a2d84aa66f"}, - {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d31f9a709e6114492136e87c7c6da5e21dfedebefa03af85f3ad72656c493ae9"}, - {file = "orjson-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d1d169461726f271ab31633cf0e7e7353417e16fb69256a4f8ecb3246a78d6e"}, - {file = "orjson-3.10.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:57c294d73825c6b7f30d11c9e5900cfec9a814893af7f14efbe06b8d0f25fba9"}, - {file = "orjson-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d7f11dbacfa9265ec76b4019efffabaabba7a7ebf14078f6b4df9b51c3c9a8ea"}, - {file = "orjson-3.10.1-cp312-none-win32.whl", hash = "sha256:d89e5ed68593226c31c76ab4de3e0d35c760bfd3fbf0a74c4b2be1383a1bf123"}, - {file = "orjson-3.10.1-cp312-none-win_amd64.whl", hash = "sha256:aa76c4fe147fd162107ce1692c39f7189180cfd3a27cfbc2ab5643422812da8e"}, - {file = "orjson-3.10.1-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a2c6a85c92d0e494c1ae117befc93cf8e7bca2075f7fe52e32698da650b2c6d1"}, - {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9813f43da955197d36a7365eb99bed42b83680801729ab2487fef305b9ced866"}, - {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec917b768e2b34b7084cb6c68941f6de5812cc26c6f1a9fecb728e36a3deb9e8"}, - {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5252146b3172d75c8a6d27ebca59c9ee066ffc5a277050ccec24821e68742fdf"}, - {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:536429bb02791a199d976118b95014ad66f74c58b7644d21061c54ad284e00f4"}, - {file = "orjson-3.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dfed3c3e9b9199fb9c3355b9c7e4649b65f639e50ddf50efdf86b45c6de04b5"}, - {file = "orjson-3.10.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2b230ec35f188f003f5b543644ae486b2998f6afa74ee3a98fc8ed2e45960afc"}, - {file = "orjson-3.10.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:01234249ba19c6ab1eb0b8be89f13ea21218b2d72d496ef085cfd37e1bae9dd8"}, - {file = "orjson-3.10.1-cp38-none-win32.whl", hash = "sha256:8a884fbf81a3cc22d264ba780920d4885442144e6acaa1411921260416ac9a54"}, - {file = "orjson-3.10.1-cp38-none-win_amd64.whl", hash = "sha256:dab5f802d52b182163f307d2b1f727d30b1762e1923c64c9c56dd853f9671a49"}, - {file = "orjson-3.10.1-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a51fd55d4486bc5293b7a400f9acd55a2dc3b5fc8420d5ffe9b1d6bb1a056a5e"}, - {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53521542a6db1411b3bfa1b24ddce18605a3abdc95a28a67b33f9145f26aa8f2"}, - {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27d610df96ac18ace4931411d489637d20ab3b8f63562b0531bba16011998db0"}, - {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79244b1456e5846d44e9846534bd9e3206712936d026ea8e6a55a7374d2c0694"}, - {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d751efaa8a49ae15cbebdda747a62a9ae521126e396fda8143858419f3b03610"}, - {file = "orjson-3.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27ff69c620a4fff33267df70cfd21e0097c2a14216e72943bd5414943e376d77"}, - {file = "orjson-3.10.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ebc58693464146506fde0c4eb1216ff6d4e40213e61f7d40e2f0dde9b2f21650"}, - {file = "orjson-3.10.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5be608c3972ed902e0143a5b8776d81ac1059436915d42defe5c6ae97b3137a4"}, - {file = "orjson-3.10.1-cp39-none-win32.whl", hash = "sha256:4ae10753e7511d359405aadcbf96556c86e9dbf3a948d26c2c9f9a150c52b091"}, - {file = "orjson-3.10.1-cp39-none-win_amd64.whl", hash = "sha256:fb5bc4caa2c192077fdb02dce4e5ef8639e7f20bec4e3a834346693907362932"}, - {file = "orjson-3.10.1.tar.gz", hash = "sha256:a883b28d73370df23ed995c466b4f6c708c1f7a9bdc400fe89165c96c7603204"}, + {file = "orjson-3.10.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9fb6c3f9f5490a3eb4ddd46fc1b6eadb0d6fc16fb3f07320149c3286a1409dd8"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:252124b198662eee80428f1af8c63f7ff077c88723fe206a25df8dc57a57b1fa"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f3e87733823089a338ef9bbf363ef4de45e5c599a9bf50a7a9b82e86d0228da"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8334c0d87103bb9fbbe59b78129f1f40d1d1e8355bbed2ca71853af15fa4ed3"}, + {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1952c03439e4dce23482ac846e7961f9d4ec62086eb98ae76d97bd41d72644d7"}, + {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0403ed9c706dcd2809f1600ed18f4aae50be263bd7112e54b50e2c2bc3ebd6d"}, + {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:382e52aa4270a037d41f325e7d1dfa395b7de0c367800b6f337d8157367bf3a7"}, + {file = "orjson-3.10.3-cp310-none-win32.whl", hash = "sha256:be2aab54313752c04f2cbaab4515291ef5af8c2256ce22abc007f89f42f49109"}, + {file = "orjson-3.10.3-cp310-none-win_amd64.whl", hash = "sha256:416b195f78ae461601893f482287cee1e3059ec49b4f99479aedf22a20b1098b"}, + {file = "orjson-3.10.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:73100d9abbbe730331f2242c1fc0bcb46a3ea3b4ae3348847e5a141265479700"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a12eee96e3ab828dbfcb4d5a0023aa971b27143a1d35dc214c176fdfb29b3"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520de5e2ef0b4ae546bea25129d6c7c74edb43fc6cf5213f511a927f2b28148b"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccaa0a401fc02e8828a5bedfd80f8cd389d24f65e5ca3954d72c6582495b4bcf"}, + {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7bc9e8bc11bac40f905640acd41cbeaa87209e7e1f57ade386da658092dc16"}, + {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3582b34b70543a1ed6944aca75e219e1192661a63da4d039d088a09c67543b08"}, + {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c23dfa91481de880890d17aa7b91d586a4746a4c2aa9a145bebdbaf233768d5"}, + {file = "orjson-3.10.3-cp311-none-win32.whl", hash = "sha256:1770e2a0eae728b050705206d84eda8b074b65ee835e7f85c919f5705b006c9b"}, + {file = "orjson-3.10.3-cp311-none-win_amd64.whl", hash = "sha256:93433b3c1f852660eb5abdc1f4dd0ced2be031ba30900433223b28ee0140cde5"}, + {file = "orjson-3.10.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a39aa73e53bec8d410875683bfa3a8edf61e5a1c7bb4014f65f81d36467ea098"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0943a96b3fa09bee1afdfccc2cb236c9c64715afa375b2af296c73d91c23eab2"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e852baafceff8da3c9defae29414cc8513a1586ad93e45f27b89a639c68e8176"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18566beb5acd76f3769c1d1a7ec06cdb81edc4d55d2765fb677e3eaa10fa99e0"}, + {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd2218d5a3aa43060efe649ec564ebedec8ce6ae0a43654b81376216d5ebd42"}, + {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cf20465e74c6e17a104ecf01bf8cd3b7b252565b4ccee4548f18b012ff2f8069"}, + {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba7f67aa7f983c4345eeda16054a4677289011a478ca947cd69c0a86ea45e534"}, + {file = "orjson-3.10.3-cp312-none-win32.whl", hash = "sha256:17e0713fc159abc261eea0f4feda611d32eabc35708b74bef6ad44f6c78d5ea0"}, + {file = "orjson-3.10.3-cp312-none-win_amd64.whl", hash = "sha256:4c895383b1ec42b017dd2c75ae8a5b862fc489006afde06f14afbdd0309b2af0"}, + {file = "orjson-3.10.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:be2719e5041e9fb76c8c2c06b9600fe8e8584e6980061ff88dcbc2691a16d20d"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0175a5798bdc878956099f5c54b9837cb62cfbf5d0b86ba6d77e43861bcec2"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978be58a68ade24f1af7758626806e13cff7748a677faf95fbb298359aa1e20d"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16bda83b5c61586f6f788333d3cf3ed19015e3b9019188c56983b5a299210eb5"}, + {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ad1f26bea425041e0a1adad34630c4825a9e3adec49079b1fb6ac8d36f8b754"}, + {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9e253498bee561fe85d6325ba55ff2ff08fb5e7184cd6a4d7754133bd19c9195"}, + {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a62f9968bab8a676a164263e485f30a0b748255ee2f4ae49a0224be95f4532b"}, + {file = "orjson-3.10.3-cp38-none-win32.whl", hash = "sha256:8d0b84403d287d4bfa9bf7d1dc298d5c1c5d9f444f3737929a66f2fe4fb8f134"}, + {file = "orjson-3.10.3-cp38-none-win_amd64.whl", hash = "sha256:8bc7a4df90da5d535e18157220d7915780d07198b54f4de0110eca6b6c11e290"}, + {file = "orjson-3.10.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9059d15c30e675a58fdcd6f95465c1522b8426e092de9fff20edebfdc15e1cb0"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d40c7f7938c9c2b934b297412c067936d0b54e4b8ab916fd1a9eb8f54c02294"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4a654ec1de8fdaae1d80d55cee65893cb06494e124681ab335218be6a0691e7"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:831c6ef73f9aa53c5f40ae8f949ff7681b38eaddb6904aab89dca4d85099cb78"}, + {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99b880d7e34542db89f48d14ddecbd26f06838b12427d5a25d71baceb5ba119d"}, + {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2e5e176c994ce4bd434d7aafb9ecc893c15f347d3d2bbd8e7ce0b63071c52e25"}, + {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b69a58a37dab856491bf2d3bbf259775fdce262b727f96aafbda359cb1d114d8"}, + {file = "orjson-3.10.3-cp39-none-win32.whl", hash = "sha256:b8d4d1a6868cde356f1402c8faeb50d62cee765a1f7ffcfd6de732ab0581e063"}, + {file = "orjson-3.10.3-cp39-none-win_amd64.whl", hash = "sha256:5102f50c5fc46d94f2033fe00d392588564378260d64377aec702f21a7a22912"}, + {file = "orjson-3.10.3.tar.gz", hash = "sha256:2b166507acae7ba2f7c315dcf185a9111ad5e992ac81f2d507aac39193c2c818"}, ] [[package]] @@ -962,4 +957,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "2cf0c53839df9409c9e91972ef3a7d08c7b98de8fcbdadb5f329d44f6b227b47" \ No newline at end of file +content-hash = "32db9ac6f69fa5b54368d999de836c1c29270ee299e965048f076c692c287ce6" diff --git a/pyproject.toml b/pyproject.toml index 149ec167..d5284711 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^69.5.0" pook = "^1.4.3" -orjson = "^3.10.1" +orjson = "^3.10.3" [build-system] requires = ["poetry-core>=1.0.0"] From 563300ef28beafd018fed70a38329c48f15e26d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 13:48:27 -0700 Subject: [PATCH 373/448] Bump jinja2 from 3.1.3 to 3.1.4 (#666) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.3...3.1.4) --- updated-dependencies: - dependency-name: jinja2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index b20352e5..c93ea0ba 100644 --- a/poetry.lock +++ b/poetry.lock @@ -225,13 +225,13 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] From e5ab49d31f3cdfbce3b5a52d959f140e31447a83 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 8 May 2024 09:34:47 -0700 Subject: [PATCH 374/448] Update ws and rest spec with latest updates (#667) --- .polygon/rest.json | 37 +++++++++++++++++++++++++++++++------ .polygon/websocket.json | 13 ++++++++----- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 14f9bceb..05bf27c1 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -101,6 +101,17 @@ "type": "string" } }, + "CryptoTickersQueryParam": { + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, X:BTCUSD, X:ETHBTC, and X:BOBAUSD. Empty string defaults to querying all tickers.", + "in": "query", + "name": "tickers", + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, "ForexTickerPathParam": { "description": "The ticker symbol of the currency pair.", "example": "C:EURUSD", @@ -111,6 +122,17 @@ "type": "string" } }, + "ForexTickersQueryParam": { + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, C:EURUSD, C:GBPCAD, and C:AUDINR. Empty string defaults to querying all tickers.", + "in": "query", + "name": "tickers", + "schema": { + "items": { + "type": "string" + }, + "type": "array" + } + }, "GeneralTickerPathParam": { "description": "The ticker symbol of the asset.", "example": "AAPL", @@ -6039,7 +6061,7 @@ }, "summary": "Exponential Moving Average (EMA)", "tags": [ - "crpyto:aggregates" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", @@ -9407,7 +9429,7 @@ }, "summary": "Relative Strength Index (RSI)", "tags": [ - "crpyto:aggregates" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", @@ -11003,7 +11025,7 @@ }, "summary": "Simple Moving Average (SMA)", "tags": [ - "crpyto:aggregates" + "crypto:aggregates" ], "x-polygon-entitlement-data-type": { "description": "Aggregate data", @@ -18577,7 +18599,7 @@ "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for all traded cryptocurrency symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { - "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, AAPL,TSLA,GOOG. Empty string defaults to querying all tickers.", + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, X:BTCUSD, X:ETHBTC, and X:BOBAUSD. Empty string defaults to querying all tickers.", "in": "query", "name": "tickers", "schema": { @@ -19461,6 +19483,9 @@ "tags": [ "crypto:snapshot" ], + "x-polygon-deprecation": { + "date": 1719838800000 + }, "x-polygon-entitlement-allowed-timeframes": [ { "description": "Real Time Data", @@ -19838,7 +19863,7 @@ "description": "Get the current minute, day, and previous day\u2019s aggregate, as well as the last trade and quote for all traded forex symbols.\n
\n
\nNote: Snapshot data is cleared at 12am EST and gets populated as data is received from the exchanges. This can happen as early as 4am EST.\n", "parameters": [ { - "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, AAPL,TSLA,GOOG. Empty string defaults to querying all tickers.", + "description": "A case-sensitive comma separated list of tickers to get snapshots for. For example, C:EURUSD, C:GBPCAD, and C:AUDINR. Empty string defaults to querying all tickers.", "in": "query", "name": "tickers", "schema": { @@ -21608,7 +21633,7 @@ }, "/v2/snapshot/locale/us/markets/stocks/{direction}": { "get": { - "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\n
\n
\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges.\n", + "description": "Get the most up-to-date market data for the current top 20 gainers or losers of the day in the stocks/equities markets.\n
\n
\nTop gainers are those tickers whose price has increased by the highest percentage since the previous day's close.\nTop losers are those tickers whose price has decreased by the highest percentage since the previous day's close.\nThis output will only include tickers with a trading volume of 10,000 or more.\n
\n
\nNote: Snapshot data is cleared at 3:30am EST and gets populated as data is received from the exchanges.\n", "parameters": [ { "description": "The direction of the snapshot results to return.\n", diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 85245e63..8d7d539b 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -995,7 +995,7 @@ }, "example": { "ev": "FMV", - "val": 189.22, + "fmv": 189.22, "sym": "AAPL", "t": 1678220098130 } @@ -1761,7 +1761,7 @@ }, "example": { "ev": "FMV", - "val": 7.2, + "fmv": 7.2, "sym": "O:TSLA210903C00700000", "t": 1401715883806000000 } @@ -2331,7 +2331,7 @@ }, "example": { "ev": "FMV", - "val": 1.0631, + "fmv": 1.0631, "sym": "C:EURUSD", "t": 1678220098130 } @@ -2885,7 +2885,10 @@ "name": "realtime", "description": "Real Time Data" } - ] + ], + "x-polygon-deprecation": { + "date": 1719838800000 + } } }, "/crypto/XA": { @@ -3157,7 +3160,7 @@ }, "example": { "ev": "FMV", - "val": 33021.9, + "fmv": 33021.9, "sym": "X:BTC-USD", "t": 1610462007425 } From 850ffafbc83a362b6c74e144facc16c16c6679c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 15:43:55 -0700 Subject: [PATCH 375/448] Bump types-setuptools from 69.5.0.20240423 to 69.5.0.20240513 (#670) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.5.0.20240423 to 69.5.0.20240513. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c93ea0ba..c695a2de 100644 --- a/poetry.lock +++ b/poetry.lock @@ -800,13 +800,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.5.0.20240423" +version = "69.5.0.20240513" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.5.0.20240423.tar.gz", hash = "sha256:a7ba908f1746c4337d13f027fa0f4a5bcad6d1d92048219ba792b3295c58586d"}, - {file = "types_setuptools-69.5.0.20240423-py3-none-any.whl", hash = "sha256:a4381e041510755a6c9210e26ad55b1629bc10237aeb9cb8b6bd24996b73db48"}, + {file = "types-setuptools-69.5.0.20240513.tar.gz", hash = "sha256:3a8ccea3e3f1f639856a1dd622be282f74e94e00fdc364630240f999cc9594fc"}, + {file = "types_setuptools-69.5.0.20240513-py3-none-any.whl", hash = "sha256:bd3964c08cffd5a057d9cabe61641c86a41a1b5dd2b652b8d371eed64d89d726"}, ] [[package]] From 284ffa00458d54306d1c3243148fb4a735882f6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 06:34:54 -0700 Subject: [PATCH 376/448] --- (#673) updated-dependencies: - dependency-name: requests dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index c695a2de..9b0cbf9c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -559,13 +559,13 @@ files = [ [[package]] name = "requests" -version = "2.31.0" +version = "2.32.0" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"}, + {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"}, ] [package.dependencies] From b55fa2b4ca16c8b7138b33a7b95fa4d4b3185118 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 11:24:53 -0700 Subject: [PATCH 377/448] Bump types-setuptools from 69.5.0.20240513 to 69.5.0.20240519 (#672) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.5.0.20240513 to 69.5.0.20240519. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9b0cbf9c..0570d0b0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -800,13 +800,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.5.0.20240513" +version = "69.5.0.20240519" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.5.0.20240513.tar.gz", hash = "sha256:3a8ccea3e3f1f639856a1dd622be282f74e94e00fdc364630240f999cc9594fc"}, - {file = "types_setuptools-69.5.0.20240513-py3-none-any.whl", hash = "sha256:bd3964c08cffd5a057d9cabe61641c86a41a1b5dd2b652b8d371eed64d89d726"}, + {file = "types-setuptools-69.5.0.20240519.tar.gz", hash = "sha256:275fb72048b0203d3fbef268298ea78a0913cd114a74872d93f8638ccc5b7c63"}, + {file = "types_setuptools-69.5.0.20240519-py3-none-any.whl", hash = "sha256:52b264eff8913b5d85848d83bd98efea935fc6129d681d370eb957783880b720"}, ] [[package]] From 7834844f4e7e960a67eacec2f9f5c645182849a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 May 2024 10:41:09 -0700 Subject: [PATCH 378/448] Bump types-setuptools from 69.5.0.20240519 to 70.0.0.20240524 (#675) Bumps [types-setuptools](https://github.com/python/typeshed) from 69.5.0.20240519 to 70.0.0.20240524. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0570d0b0..3ece168f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -800,13 +800,13 @@ files = [ [[package]] name = "types-setuptools" -version = "69.5.0.20240519" +version = "70.0.0.20240524" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-69.5.0.20240519.tar.gz", hash = "sha256:275fb72048b0203d3fbef268298ea78a0913cd114a74872d93f8638ccc5b7c63"}, - {file = "types_setuptools-69.5.0.20240519-py3-none-any.whl", hash = "sha256:52b264eff8913b5d85848d83bd98efea935fc6129d681d370eb957783880b720"}, + {file = "types-setuptools-70.0.0.20240524.tar.gz", hash = "sha256:e31fee7b9d15ef53980526579ac6089b3ae51a005a281acf97178e90ac71aff6"}, + {file = "types_setuptools-70.0.0.20240524-py3-none-any.whl", hash = "sha256:8f5379b9948682d72a9ab531fbe52932e84c4f38deda570255f9bae3edd766bc"}, ] [[package]] @@ -957,4 +957,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "32db9ac6f69fa5b54368d999de836c1c29270ee299e965048f076c692c287ce6" +content-hash = "3b55cf4a61207c4b19ab4f5f0735335fa5ff4de2a8f813903a8702311dfc9fbb" diff --git a/pyproject.toml b/pyproject.toml index d5284711..73ccc434 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^69.5.0" +types-setuptools = "^70.0.0" pook = "^1.4.3" orjson = "^3.10.3" From 9c2b6c2a8f7cda0c75a07942ae505c4af6620bf9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 08:36:16 -0700 Subject: [PATCH 379/448] Bump certifi from 2024.2.2 to 2024.6.2 (#677) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.2.2 to 2024.6.2. - [Commits](https://github.com/certifi/python-certifi/compare/2024.02.02...2024.06.02) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3ece168f..8a3dd551 100644 --- a/poetry.lock +++ b/poetry.lock @@ -90,13 +90,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, ] [[package]] From cef73e13294f20de9e545c717fd96e6ecd3265d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 09:22:40 -0700 Subject: [PATCH 380/448] Bump urllib3 from 1.26.18 to 1.26.19 (#684) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.18 to 1.26.19. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/1.26.19/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.18...1.26.19) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8a3dd551..cd501f92 100644 --- a/poetry.lock +++ b/poetry.lock @@ -833,13 +833,13 @@ files = [ [[package]] name = "urllib3" -version = "1.26.18" +version = "1.26.19" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, - {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, + {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, + {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, ] [package.extras] From 174028a030139811d1fe1fcfdae37ddf9635e27b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 09:32:11 -0700 Subject: [PATCH 381/448] Bump orjson from 3.10.3 to 3.10.5 (#683) Bumps [orjson](https://github.com/ijl/orjson) from 3.10.3 to 3.10.5. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.10.3...3.10.5) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 96 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/poetry.lock b/poetry.lock index cd501f92..96a75b32 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,57 +384,57 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.3" +version = "3.10.5" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.3-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9fb6c3f9f5490a3eb4ddd46fc1b6eadb0d6fc16fb3f07320149c3286a1409dd8"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:252124b198662eee80428f1af8c63f7ff077c88723fe206a25df8dc57a57b1fa"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9f3e87733823089a338ef9bbf363ef4de45e5c599a9bf50a7a9b82e86d0228da"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8334c0d87103bb9fbbe59b78129f1f40d1d1e8355bbed2ca71853af15fa4ed3"}, - {file = "orjson-3.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1952c03439e4dce23482ac846e7961f9d4ec62086eb98ae76d97bd41d72644d7"}, - {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c0403ed9c706dcd2809f1600ed18f4aae50be263bd7112e54b50e2c2bc3ebd6d"}, - {file = "orjson-3.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:382e52aa4270a037d41f325e7d1dfa395b7de0c367800b6f337d8157367bf3a7"}, - {file = "orjson-3.10.3-cp310-none-win32.whl", hash = "sha256:be2aab54313752c04f2cbaab4515291ef5af8c2256ce22abc007f89f42f49109"}, - {file = "orjson-3.10.3-cp310-none-win_amd64.whl", hash = "sha256:416b195f78ae461601893f482287cee1e3059ec49b4f99479aedf22a20b1098b"}, - {file = "orjson-3.10.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:73100d9abbbe730331f2242c1fc0bcb46a3ea3b4ae3348847e5a141265479700"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544a12eee96e3ab828dbfcb4d5a0023aa971b27143a1d35dc214c176fdfb29b3"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520de5e2ef0b4ae546bea25129d6c7c74edb43fc6cf5213f511a927f2b28148b"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccaa0a401fc02e8828a5bedfd80f8cd389d24f65e5ca3954d72c6582495b4bcf"}, - {file = "orjson-3.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7bc9e8bc11bac40f905640acd41cbeaa87209e7e1f57ade386da658092dc16"}, - {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3582b34b70543a1ed6944aca75e219e1192661a63da4d039d088a09c67543b08"}, - {file = "orjson-3.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c23dfa91481de880890d17aa7b91d586a4746a4c2aa9a145bebdbaf233768d5"}, - {file = "orjson-3.10.3-cp311-none-win32.whl", hash = "sha256:1770e2a0eae728b050705206d84eda8b074b65ee835e7f85c919f5705b006c9b"}, - {file = "orjson-3.10.3-cp311-none-win_amd64.whl", hash = "sha256:93433b3c1f852660eb5abdc1f4dd0ced2be031ba30900433223b28ee0140cde5"}, - {file = "orjson-3.10.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a39aa73e53bec8d410875683bfa3a8edf61e5a1c7bb4014f65f81d36467ea098"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0943a96b3fa09bee1afdfccc2cb236c9c64715afa375b2af296c73d91c23eab2"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e852baafceff8da3c9defae29414cc8513a1586ad93e45f27b89a639c68e8176"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18566beb5acd76f3769c1d1a7ec06cdb81edc4d55d2765fb677e3eaa10fa99e0"}, - {file = "orjson-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bd2218d5a3aa43060efe649ec564ebedec8ce6ae0a43654b81376216d5ebd42"}, - {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cf20465e74c6e17a104ecf01bf8cd3b7b252565b4ccee4548f18b012ff2f8069"}, - {file = "orjson-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ba7f67aa7f983c4345eeda16054a4677289011a478ca947cd69c0a86ea45e534"}, - {file = "orjson-3.10.3-cp312-none-win32.whl", hash = "sha256:17e0713fc159abc261eea0f4feda611d32eabc35708b74bef6ad44f6c78d5ea0"}, - {file = "orjson-3.10.3-cp312-none-win_amd64.whl", hash = "sha256:4c895383b1ec42b017dd2c75ae8a5b862fc489006afde06f14afbdd0309b2af0"}, - {file = "orjson-3.10.3-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:be2719e5041e9fb76c8c2c06b9600fe8e8584e6980061ff88dcbc2691a16d20d"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0175a5798bdc878956099f5c54b9837cb62cfbf5d0b86ba6d77e43861bcec2"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978be58a68ade24f1af7758626806e13cff7748a677faf95fbb298359aa1e20d"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16bda83b5c61586f6f788333d3cf3ed19015e3b9019188c56983b5a299210eb5"}, - {file = "orjson-3.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ad1f26bea425041e0a1adad34630c4825a9e3adec49079b1fb6ac8d36f8b754"}, - {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9e253498bee561fe85d6325ba55ff2ff08fb5e7184cd6a4d7754133bd19c9195"}, - {file = "orjson-3.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a62f9968bab8a676a164263e485f30a0b748255ee2f4ae49a0224be95f4532b"}, - {file = "orjson-3.10.3-cp38-none-win32.whl", hash = "sha256:8d0b84403d287d4bfa9bf7d1dc298d5c1c5d9f444f3737929a66f2fe4fb8f134"}, - {file = "orjson-3.10.3-cp38-none-win_amd64.whl", hash = "sha256:8bc7a4df90da5d535e18157220d7915780d07198b54f4de0110eca6b6c11e290"}, - {file = "orjson-3.10.3-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9059d15c30e675a58fdcd6f95465c1522b8426e092de9fff20edebfdc15e1cb0"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d40c7f7938c9c2b934b297412c067936d0b54e4b8ab916fd1a9eb8f54c02294"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d4a654ec1de8fdaae1d80d55cee65893cb06494e124681ab335218be6a0691e7"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:831c6ef73f9aa53c5f40ae8f949ff7681b38eaddb6904aab89dca4d85099cb78"}, - {file = "orjson-3.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99b880d7e34542db89f48d14ddecbd26f06838b12427d5a25d71baceb5ba119d"}, - {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2e5e176c994ce4bd434d7aafb9ecc893c15f347d3d2bbd8e7ce0b63071c52e25"}, - {file = "orjson-3.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b69a58a37dab856491bf2d3bbf259775fdce262b727f96aafbda359cb1d114d8"}, - {file = "orjson-3.10.3-cp39-none-win32.whl", hash = "sha256:b8d4d1a6868cde356f1402c8faeb50d62cee765a1f7ffcfd6de732ab0581e063"}, - {file = "orjson-3.10.3-cp39-none-win_amd64.whl", hash = "sha256:5102f50c5fc46d94f2033fe00d392588564378260d64377aec702f21a7a22912"}, - {file = "orjson-3.10.3.tar.gz", hash = "sha256:2b166507acae7ba2f7c315dcf185a9111ad5e992ac81f2d507aac39193c2c818"}, + {file = "orjson-3.10.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:545d493c1f560d5ccfc134803ceb8955a14c3fcb47bbb4b2fee0232646d0b932"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4324929c2dd917598212bfd554757feca3e5e0fa60da08be11b4aa8b90013c1"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c13ca5e2ddded0ce6a927ea5a9f27cae77eee4c75547b4297252cb20c4d30e6"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6c8e30adfa52c025f042a87f450a6b9ea29649d828e0fec4858ed5e6caecf63"}, + {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338fd4f071b242f26e9ca802f443edc588fa4ab60bfa81f38beaedf42eda226c"}, + {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6970ed7a3126cfed873c5d21ece1cd5d6f83ca6c9afb71bbae21a0b034588d96"}, + {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:235dadefb793ad12f7fa11e98a480db1f7c6469ff9e3da5e73c7809c700d746b"}, + {file = "orjson-3.10.5-cp310-none-win32.whl", hash = "sha256:be79e2393679eda6a590638abda16d167754393f5d0850dcbca2d0c3735cebe2"}, + {file = "orjson-3.10.5-cp310-none-win_amd64.whl", hash = "sha256:c4a65310ccb5c9910c47b078ba78e2787cb3878cdded1702ac3d0da71ddc5228"}, + {file = "orjson-3.10.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cdf7365063e80899ae3a697def1277c17a7df7ccfc979990a403dfe77bb54d40"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b68742c469745d0e6ca5724506858f75e2f1e5b59a4315861f9e2b1df77775a"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d10cc1b594951522e35a3463da19e899abe6ca95f3c84c69e9e901e0bd93d38"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcbe82b35d1ac43b0d84072408330fd3295c2896973112d495e7234f7e3da2e1"}, + {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c0eb7e0c75e1e486c7563fe231b40fdd658a035ae125c6ba651ca3b07936f5"}, + {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:53ed1c879b10de56f35daf06dbc4a0d9a5db98f6ee853c2dbd3ee9d13e6f302f"}, + {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:099e81a5975237fda3100f918839af95f42f981447ba8f47adb7b6a3cdb078fa"}, + {file = "orjson-3.10.5-cp311-none-win32.whl", hash = "sha256:1146bf85ea37ac421594107195db8bc77104f74bc83e8ee21a2e58596bfb2f04"}, + {file = "orjson-3.10.5-cp311-none-win_amd64.whl", hash = "sha256:36a10f43c5f3a55c2f680efe07aa93ef4a342d2960dd2b1b7ea2dd764fe4a37c"}, + {file = "orjson-3.10.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:68f85ecae7af14a585a563ac741b0547a3f291de81cd1e20903e79f25170458f"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28afa96f496474ce60d3340fe8d9a263aa93ea01201cd2bad844c45cd21f5268"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cd684927af3e11b6e754df80b9ffafd9fb6adcaa9d3e8fdd5891be5a5cad51e"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d21b9983da032505f7050795e98b5d9eee0df903258951566ecc358f6696969"}, + {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad1de7fef79736dde8c3554e75361ec351158a906d747bd901a52a5c9c8d24b"}, + {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d97531cdfe9bdd76d492e69800afd97e5930cb0da6a825646667b2c6c6c0211"}, + {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d69858c32f09c3e1ce44b617b3ebba1aba030e777000ebdf72b0d8e365d0b2b3"}, + {file = "orjson-3.10.5-cp312-none-win32.whl", hash = "sha256:64c9cc089f127e5875901ac05e5c25aa13cfa5dbbbd9602bda51e5c611d6e3e2"}, + {file = "orjson-3.10.5-cp312-none-win_amd64.whl", hash = "sha256:b2efbd67feff8c1f7728937c0d7f6ca8c25ec81373dc8db4ef394c1d93d13dc5"}, + {file = "orjson-3.10.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:03b565c3b93f5d6e001db48b747d31ea3819b89abf041ee10ac6988886d18e01"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:584c902ec19ab7928fd5add1783c909094cc53f31ac7acfada817b0847975f26"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a35455cc0b0b3a1eaf67224035f5388591ec72b9b6136d66b49a553ce9eb1e6"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1670fe88b116c2745a3a30b0f099b699a02bb3482c2591514baf5433819e4f4d"}, + {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185c394ef45b18b9a7d8e8f333606e2e8194a50c6e3c664215aae8cf42c5385e"}, + {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ca0b3a94ac8d3886c9581b9f9de3ce858263865fdaa383fbc31c310b9eac07c9"}, + {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dfc91d4720d48e2a709e9c368d5125b4b5899dced34b5400c3837dadc7d6271b"}, + {file = "orjson-3.10.5-cp38-none-win32.whl", hash = "sha256:c05f16701ab2a4ca146d0bca950af254cb7c02f3c01fca8efbbad82d23b3d9d4"}, + {file = "orjson-3.10.5-cp38-none-win_amd64.whl", hash = "sha256:8a11d459338f96a9aa7f232ba95679fc0c7cedbd1b990d736467894210205c09"}, + {file = "orjson-3.10.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:85c89131d7b3218db1b24c4abecea92fd6c7f9fab87441cfc342d3acc725d807"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66215277a230c456f9038d5e2d84778141643207f85336ef8d2a9da26bd7ca"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51bbcdea96cdefa4a9b4461e690c75ad4e33796530d182bdd5c38980202c134a"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbead71dbe65f959b7bd8cf91e0e11d5338033eba34c114f69078d59827ee139"}, + {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df58d206e78c40da118a8c14fc189207fffdcb1f21b3b4c9c0c18e839b5a214"}, + {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c4057c3b511bb8aef605616bd3f1f002a697c7e4da6adf095ca5b84c0fd43595"}, + {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b39e006b00c57125ab974362e740c14a0c6a66ff695bff44615dcf4a70ce2b86"}, + {file = "orjson-3.10.5-cp39-none-win32.whl", hash = "sha256:eded5138cc565a9d618e111c6d5c2547bbdd951114eb822f7f6309e04db0fb47"}, + {file = "orjson-3.10.5-cp39-none-win_amd64.whl", hash = "sha256:cc28e90a7cae7fcba2493953cff61da5a52950e78dc2dacfe931a317ee3d8de7"}, + {file = "orjson-3.10.5.tar.gz", hash = "sha256:7a5baef8a4284405d96c90c7c62b755e9ef1ada84c2406c24a9ebec86b89f46d"}, ] [[package]] @@ -957,4 +957,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "3b55cf4a61207c4b19ab4f5f0735335fa5ff4de2a8f813903a8702311dfc9fbb" +content-hash = "ea48357b704e5e10b35e38c07cb576b7be38b843112e7bbc1824da622c6c0070" diff --git a/pyproject.toml b/pyproject.toml index 73ccc434..5918e26c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^70.0.0" pook = "^1.4.3" -orjson = "^3.10.3" +orjson = "^3.10.5" [build-system] requires = ["poetry-core>=1.0.0"] From eda006191463c8d1bc02cc94cce16333ba492425 Mon Sep 17 00:00:00 2001 From: SuperMaZingCoder <55718659+SuperMaZingCoder@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:05:04 -0400 Subject: [PATCH 382/448] Add type hinting for datetime.date objects to get_grouped_daily_aggs and get_daily_open_close_agg (#681) Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- polygon/rest/aggs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/polygon/rest/aggs.py b/polygon/rest/aggs.py index 71d05d18..cb874fac 100644 --- a/polygon/rest/aggs.py +++ b/polygon/rest/aggs.py @@ -103,7 +103,7 @@ def get_aggs( # param def get_grouped_daily_aggs( self, - date: str, + date: Union[str, date], adjusted: Optional[bool] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, @@ -135,7 +135,7 @@ def get_grouped_daily_aggs( def get_daily_open_close_agg( self, ticker: str, - date: str, + date: Union[str, date], adjusted: Optional[bool] = None, params: Optional[Dict[str, Any]] = None, raw: bool = False, From b47b85245c24dcfd116ee93338ceba0c5f341f77 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Fri, 21 Jun 2024 07:21:53 -0700 Subject: [PATCH 383/448] Added support for related companies endpoint (#685) * Added related companies * Fix lint * Fix example --- .polygon/rest.json | 346 +++++++++++++++------- examples/rest/stocks-related_companies.py | 10 + polygon/rest/models/tickers.py | 15 + polygon/rest/reference.py | 27 ++ 4 files changed, 289 insertions(+), 109 deletions(-) create mode 100644 examples/rest/stocks-related_companies.py diff --git a/.polygon/rest.json b/.polygon/rest.json index 05bf27c1..05559f76 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -63,7 +63,7 @@ }, "AggregateTimeTo": { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-01-09", + "example": "2023-02-10", "in": "path", "name": "to", "required": true, @@ -153,7 +153,7 @@ }, "IndicesAggregateTimeFrom": { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-03-10", + "example": "2023-03-13", "in": "path", "name": "from", "required": true, @@ -163,7 +163,7 @@ }, "IndicesAggregateTimeTo": { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-03-10", + "example": "2023-03-24", "in": "path", "name": "to", "required": true, @@ -13911,8 +13911,7 @@ "files_count", "source_url", "download_url", - "entities", - "acceptance_datetime" + "entities" ], "type": "object", "x-polygon-go-type": { @@ -13982,121 +13981,125 @@ "example": {}, "schema": { "properties": { - "acceptance_datetime": { - "description": "The datetime when the filing was accepted by EDGAR in EST (format: YYYYMMDDHHMMSS)", - "type": "string" - }, - "accession_number": { - "description": "Filing Accession Number", - "type": "string" - }, - "entities": { - "description": "Entities related to the filing (e.g. the document filers).", - "items": { - "description": "A filing entity (e.g. the document filer).", - "properties": { - "company_data": { + "results": { + "properties": { + "acceptance_datetime": { + "description": "The datetime when the filing was accepted by EDGAR in EST (format: YYYYMMDDHHMMSS)", + "type": "string" + }, + "accession_number": { + "description": "Filing Accession Number", + "type": "string" + }, + "entities": { + "description": "Entities related to the filing (e.g. the document filers).", + "items": { + "description": "A filing entity (e.g. the document filer).", "properties": { - "cik": { - "description": "Central Index Key (CIK) Number", - "type": "string" - }, - "name": { - "example": "Facebook Inc", - "type": "string" - }, - "sic": { - "description": "Standard Industrial Classification (SIC)", - "type": "string" + "company_data": { + "properties": { + "cik": { + "description": "Central Index Key (CIK) Number", + "type": "string" + }, + "name": { + "example": "Facebook Inc", + "type": "string" + }, + "sic": { + "description": "Standard Industrial Classification (SIC)", + "type": "string" + }, + "ticker": { + "description": "Ticker", + "type": "string" + } + }, + "required": [ + "name", + "cik", + "sic" + ], + "type": "object", + "x-polygon-go-type": { + "name": "SECCompanyData", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } }, - "ticker": { - "description": "Ticker", + "relation": { + "description": "Relationship of this entity to the filing.", + "enum": [ + "filer" + ], "type": "string" } }, "required": [ - "name", - "cik", - "sic" + "relation" ], "type": "object", "x-polygon-go-type": { - "name": "SECCompanyData", + "name": "SECFilingEntity", "path": "github.com/polygon-io/go-lib-models/v2/globals" } }, - "relation": { - "description": "Relationship of this entity to the filing.", - "enum": [ - "filer" - ], - "type": "string" - } + "type": "array" }, - "required": [ - "relation" - ], - "type": "object", - "x-polygon-go-type": { - "name": "SECFilingEntity", - "path": "github.com/polygon-io/go-lib-models/v2/globals" + "files_count": { + "description": "The number of files associated with the filing.", + "format": "int64", + "type": "integer" + }, + "filing_date": { + "description": "The date when the filing was filed in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + }, + "id": { + "description": "Unique identifier for the filing.", + "type": "string" + }, + "period_of_report_date": { + "description": "The period of report for the filing in YYYYMMDD format.", + "example": "20210101", + "pattern": "^[0-9]{8}$", + "type": "string" + }, + "source_url": { + "description": "The source URL is a link back to the upstream source for this filing\ndocument.", + "example": "https://www.sec.gov/Archives/edgar/data/0001326801/000132680119000037/0001326801-19-000037-index.html", + "format": "uri", + "type": "string" + }, + "type": { + "description": "Filing Type", + "enum": [ + "10-K", + "10-Q" + ], + "type": "string" } }, - "type": "array" - }, - "files_count": { - "description": "The number of files associated with the filing.", - "format": "int64", - "type": "integer" - }, - "filing_date": { - "description": "The date when the filing was filed in YYYYMMDD format.", - "example": "20210101", - "pattern": "^[0-9]{8}$", - "type": "string" - }, - "id": { - "description": "Unique identifier for the filing.", - "type": "string" - }, - "period_of_report_date": { - "description": "The period of report for the filing in YYYYMMDD format.", - "example": "20210101", - "pattern": "^[0-9]{8}$", - "type": "string" - }, - "source_url": { - "description": "The source URL is a link back to the upstream source for this filing\ndocument.", - "example": "https://www.sec.gov/Archives/edgar/data/0001326801/000132680119000037/0001326801-19-000037-index.html", - "format": "uri", - "type": "string" - }, - "type": { - "description": "Filing Type", - "enum": [ - "10-K", - "10-Q" + "required": [ + "id", + "accession_number", + "type", + "filing_date", + "period_of_report_date", + "files_count", + "source_url", + "download_url", + "entities" ], - "type": "string" + "type": "object", + "x-polygon-go-type": { + "name": "SECFiling", + "path": "github.com/polygon-io/go-lib-models/v2/globals" + } } }, - "required": [ - "id", - "accession_number", - "type", - "filing_date", - "period_of_report_date", - "files_count", - "source_url", - "download_url", - "entities", - "acceptance_datetime" - ], - "type": "object", - "x-polygon-go-type": { - "name": "SECFiling", - "path": "github.com/polygon-io/go-lib-models/v2/globals" - } + "type": "object" } } }, @@ -14487,6 +14490,114 @@ }, "x-polygon-draft": true }, + "/v1/related-companies/{ticker}": { + "get": { + "description": "Get a list of tickers related to the queried ticker based on News and Returns data.", + "operationId": "GetRelatedCompanies", + "parameters": [ + { + "description": "The ticker symbol to search.", + "example": "AAPL", + "in": "path", + "name": "ticker", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "request_id": "31d59dda-80e5-4721-8496-d0d32a654afe", + "results": [ + { + "ticker": "MSFT" + }, + { + "ticker": "GOOGL" + }, + { + "ticker": "AMZN" + }, + { + "ticker": "FB" + }, + { + "ticker": "TSLA" + }, + { + "ticker": "NVDA" + }, + { + "ticker": "INTC" + }, + { + "ticker": "ADBE" + }, + { + "ticker": "NFLX" + }, + { + "ticker": "PYPL" + } + ], + "status": "OK", + "stock_symbol": "AAPL" + }, + "schema": { + "properties": { + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "items": { + "description": "The tickers related to the requested ticker.", + "properties": { + "ticker": { + "description": "A ticker related to the requested ticker.", + "type": "string" + } + }, + "required": [ + "ticker" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + }, + "ticker": { + "description": "The ticker being queried.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "Related Companies." + }, + "401": { + "description": "Unauthorized - Check our API Key and account status" + } + }, + "summary": "Related Companies", + "tags": [ + "reference:related:companies" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + } + } + }, "/v1/summaries": { "get": { "description": "Get everything needed to visualize the tick-by-tick movement of a list of tickers.", @@ -15711,7 +15822,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-01-09", + "example": "2023-02-10", "in": "path", "name": "to", "required": true, @@ -16164,7 +16275,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-01-09", + "example": "2023-02-10", "in": "path", "name": "to", "required": true, @@ -16560,7 +16671,7 @@ }, { "description": "The start of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-03-10", + "example": "2023-03-13", "in": "path", "name": "from", "required": true, @@ -16570,7 +16681,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-03-10", + "example": "2023-03-24", "in": "path", "name": "to", "required": true, @@ -16983,7 +17094,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-01-09", + "example": "2023-02-10", "in": "path", "name": "to", "required": true, @@ -17431,7 +17542,7 @@ }, { "description": "The end of the aggregate time window. Either a date with the format YYYY-MM-DD or a millisecond timestamp.", - "example": "2023-01-09", + "example": "2023-02-10", "in": "path", "name": "to", "required": true, @@ -22882,6 +22993,8 @@ }, "x-polygon-paginate": { "limit": { + "default": 10, + "example": 10, "max": 50000 }, "order": { @@ -23129,6 +23242,8 @@ }, "x-polygon-paginate": { "limit": { + "default": 10, + "example": 10, "max": 50000 }, "order": { @@ -23430,6 +23545,8 @@ }, "x-polygon-paginate": { "limit": { + "default": 10, + "example": 10, "max": 50000 }, "order": { @@ -25395,7 +25512,7 @@ "parameters": [ { "description": "Query for a contract by options ticker. You can learn more about the structure of options tickers [here](https://polygon.io/blog/how-to-read-a-stock-options-ticker/).", - "example": "O:EVRI240119C00002500", + "example": "O:SPY251219C00650000", "in": "path", "name": "options_ticker", "required": true, @@ -29104,6 +29221,8 @@ }, "x-polygon-paginate": { "limit": { + "default": 10, + "example": 10, "max": 50000 }, "order": { @@ -29356,6 +29475,8 @@ }, "x-polygon-paginate": { "limit": { + "default": 10, + "example": 10, "max": 50000 }, "order": { @@ -29645,6 +29766,8 @@ }, "x-polygon-paginate": { "limit": { + "default": 10, + "example": 10, "max": 50000 }, "order": { @@ -31284,6 +31407,11 @@ "paths": [ "/v3/reference/exchanges" ] + }, + { + "paths": [ + "/v1/related-companies/{ticker}" + ] } ] } diff --git a/examples/rest/stocks-related_companies.py b/examples/rest/stocks-related_companies.py new file mode 100644 index 00000000..84b3a405 --- /dev/null +++ b/examples/rest/stocks-related_companies.py @@ -0,0 +1,10 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_v1_related-companies__ticker + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +related_companies = client.get_related_companies("AAPL") +print(related_companies) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index f7ff2bed..9a2484ac 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -190,6 +190,21 @@ def from_dict(d): return TickerTypes(**d) +@modelclass +class RelatedCompany: + """ + Get a list of tickers related to the queried ticker based on News and Returns data. + """ + + ticker: Optional[str] = None + + @staticmethod + def from_dict(d): + return RelatedCompany( + ticker=d.get("ticker", None), + ) + + @modelclass class TickerChange: ticker: str diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 38d15752..7af5b10f 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -7,6 +7,7 @@ TickerChangeResults, TickerDetails, TickerNews, + RelatedCompany, TickerTypes, Sort, Order, @@ -245,6 +246,32 @@ def get_ticker_types( options=options, ) + def get_related_companies( + self, + ticker: Optional[str] = None, + params: Optional[Dict[str, Any]] = None, + raw: bool = False, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[RelatedCompany, HTTPResponse]: + """ + Get a list of tickers related to the queried ticker based on News and Returns data. + + :param ticker: The ticker symbol to search. + :param params: Any additional query params. + :param raw: Return raw object instead of results object. + :return: Related Companies. + """ + url = f"/v1/related-companies/{ticker}" + + return self._get( + path=url, + params=self._get_params(self.get_related_companies, locals()), + deserializer=RelatedCompany.from_dict, + raw=raw, + result_key="results", + options=options, + ) + class SplitsClient(BaseClient): def list_splits( From 71bc46946b84f2ac68f9977c29f59ea7e12e6443 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 1 Jul 2024 07:20:46 -0700 Subject: [PATCH 384/448] Update base.py to remove setuptools and use standard library (#694) * Update base.py to remove setuptools and use standard library * Update version to version number * Update readme to remove pip install setuptools --- README.md | 6 +----- polygon/rest/base.py | 10 +++++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 3df6c512..aaf7bb5f 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,7 @@ Welcome to the official Python client library for the [Polygon](https://polygon. ## Prerequisites -Before installing the Polygon Python client, ensure your environment has Python 3.8 or higher. While most Python environments come with setuptools installed, it is a dependency for this library. In the rare case it's not already present, you can install setuptools using pip: - -``` -pip install setuptools -``` +Before installing the Polygon Python client, ensure your environment has Python 3.8 or higher. ## Install diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 3e65c06c..3a5d637f 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -7,7 +7,7 @@ from enum import Enum from typing import Optional, Any, Dict from datetime import datetime -import pkg_resources # part of setuptools +from importlib.metadata import version, PackageNotFoundError from .models.request import RequestOptionBuilder from ..logging import get_logger import logging @@ -15,10 +15,10 @@ from ..exceptions import AuthError, BadResponse logger = get_logger("RESTClient") -version = "unknown" +version_number = "unknown" try: - version = pkg_resources.require("polygon-api-client")[0].version -except: + version_number = version("polygon-api-client") +except PackageNotFoundError: pass @@ -46,7 +46,7 @@ def __init__( self.headers = { "Authorization": "Bearer " + self.API_KEY, "Accept-Encoding": "gzip", - "User-Agent": f"Polygon.io PythonClient/{version}", + "User-Agent": f"Polygon.io PythonClient/{version_number}", } # initialize self.retries with the parameter value before using it From 653763490e3851ac01ec9c9a4b17e5711ba6c037 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 07:29:02 -0700 Subject: [PATCH 385/448] Bump urllib3 from 1.26.19 to 2.2.2 (#696) Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.19 to 2.2.2. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/1.26.19...2.2.2) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 17 +++++++++-------- pyproject.toml | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index 96a75b32..89de3744 100644 --- a/poetry.lock +++ b/poetry.lock @@ -833,19 +833,20 @@ files = [ [[package]] name = "urllib3" -version = "1.26.19" +version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-1.26.19-py2.py3-none-any.whl", hash = "sha256:37a0344459b199fce0e80b0d3569837ec6b6937435c5244e7fd73fa6006830f3"}, - {file = "urllib3-1.26.19.tar.gz", hash = "sha256:3e3d753a8618b86d7de333b4223005f68720bcd6a7d2bcb9fbd2229ec7c1e429"}, + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, ] [package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "websockets" @@ -957,4 +958,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "ea48357b704e5e10b35e38c07cb576b7be38b843112e7bbc1824da622c6c0070" +content-hash = "91711a22515bbf47ea8f6fe829298a09dbcfe2784192012d8989f41d8bb8c388" diff --git a/pyproject.toml b/pyproject.toml index 5918e26c..ef18d836 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ packages = [ [tool.poetry.dependencies] python = "^3.8" -urllib3 = "^1.26.9,<2.0" +urllib3 = ">=1.26.9,<3.0.0" websockets = ">=10.3,<13.0" certifi = ">=2022.5.18,<2025.0.0" From ceeb56d4fe760828a040079ee41126326f5783a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 10:29:21 -0700 Subject: [PATCH 386/448] Bump pook from 1.4.3 to 2.0.0 (#697) Bumps [pook](https://github.com/h2non/pook) from 1.4.3 to 2.0.0. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v1.4.3...v2.0.0) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 89de3744..8eccc686 100644 --- a/poetry.lock +++ b/poetry.lock @@ -487,13 +487,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "1.4.3" +version = "2.0.0" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = ">=3.8" files = [ - {file = "pook-1.4.3-py3-none-any.whl", hash = "sha256:4683a8a9d11fb56901ae15001a5bfb76a1bb960b1a841de1f0ca11c8c2d9eef8"}, - {file = "pook-1.4.3.tar.gz", hash = "sha256:61dbd9f6f9bf4d0bbab4abdf382bf7e8fbaae8561c5de3cd444e7c4be67df651"}, + {file = "pook-2.0.0-py3-none-any.whl", hash = "sha256:b3993cf00b8335f19b407fca39febd048c97749eb7c06eaddd9fbaff3b0a1ac3"}, + {file = "pook-2.0.0.tar.gz", hash = "sha256:b106ebc088417fa7b68d1f6ee21a9720fd171ea96d4b86ef308eaffac1e5c4f8"}, ] [package.dependencies] @@ -958,4 +958,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "91711a22515bbf47ea8f6fe829298a09dbcfe2784192012d8989f41d8bb8c388" +content-hash = "ec7930e1a506d681ad1a3b775081ed97062cae372b6d33240b238874989adbed" diff --git a/pyproject.toml b/pyproject.toml index ef18d836..64e76f94 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^2.0.0" sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^70.0.0" -pook = "^1.4.3" +pook = "^2.0.0" orjson = "^3.10.5" [build-system] From 2bbae7b8b54ca6a26568d8ad7f77db062c890e08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:34:15 -0700 Subject: [PATCH 387/448] Bump mypy from 1.10.0 to 1.10.1 (#699) Bumps [mypy](https://github.com/python/mypy) from 1.10.0 to 1.10.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.10.0...v1.10.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8eccc686..76ff8169 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.10.0" +version = "1.10.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, - {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, - {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, - {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, - {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, - {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, - {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, - {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, - {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, - {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, - {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, - {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, - {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, - {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, - {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, - {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, - {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, - {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, - {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, - {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, - {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, - {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, - {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, + {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, + {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, + {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, + {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, + {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, + {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, + {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, + {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, + {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, + {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, + {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, + {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, + {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, + {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, + {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, + {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, + {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, + {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, + {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, + {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, + {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, + {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, ] [package.dependencies] From 52625ed9d7a524ffb30a5b82c903aa86a7707e95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:45:46 -0700 Subject: [PATCH 388/448] Bump types-setuptools from 70.0.0.20240524 to 70.1.0.20240627 (#698) Bumps [types-setuptools](https://github.com/python/typeshed) from 70.0.0.20240524 to 70.1.0.20240627. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 76ff8169..20614a7f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -800,13 +800,13 @@ files = [ [[package]] name = "types-setuptools" -version = "70.0.0.20240524" +version = "70.1.0.20240627" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.0.0.20240524.tar.gz", hash = "sha256:e31fee7b9d15ef53980526579ac6089b3ae51a005a281acf97178e90ac71aff6"}, - {file = "types_setuptools-70.0.0.20240524-py3-none-any.whl", hash = "sha256:8f5379b9948682d72a9ab531fbe52932e84c4f38deda570255f9bae3edd766bc"}, + {file = "types-setuptools-70.1.0.20240627.tar.gz", hash = "sha256:385907a47b5cf302b928ce07953cd91147d5de6f3da604c31905fdf0ec309e83"}, + {file = "types_setuptools-70.1.0.20240627-py3-none-any.whl", hash = "sha256:c7bdf05cd0a8b66868b4774c7b3c079d01ae025d8c9562bfc8bf2ff44d263c9c"}, ] [[package]] @@ -958,4 +958,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "ec7930e1a506d681ad1a3b775081ed97062cae372b6d33240b238874989adbed" +content-hash = "89794f3b0256bd17ce73cb9fe5635edd8dc37d282308ab4208d5df08eff11a7d" diff --git a/pyproject.toml b/pyproject.toml index 64e76f94..8c9e59ac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^70.0.0" +types-setuptools = "^70.1.0" pook = "^2.0.0" orjson = "^3.10.5" From 479cca33118066aa05619932526f8b7d561a110a Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 2 Jul 2024 06:51:25 -0700 Subject: [PATCH 389/448] Fix example to have correct params (#700) --- examples/rest/raw-list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rest/raw-list.py b/examples/rest/raw-list.py index 5a5a5642..9dd0020e 100644 --- a/examples/rest/raw-list.py +++ b/examples/rest/raw-list.py @@ -6,7 +6,7 @@ trades = cast( HTTPResponse, - client.list_trades("AAA", "2022-04-20", 5, raw=True), + client.list_trades("AAA", "2022-04-20", raw=True), ) print(trades.data) # b'{ From f789d2905bf9410ce372ff8c3dd8549534c4603d Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 2 Jul 2024 16:12:41 -0700 Subject: [PATCH 390/448] =?UTF-8?q?Revert=20"Use=20ssl=5Fcontext=20for=20H?= =?UTF-8?q?TTPS=20requests=20to=20avoid=20reading=20certificate=20files?= =?UTF-8?q?=E2=80=A6"=20(#691)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 7cb520843437dea4804e10dcb5457ab21c40f847. --- polygon/rest/base.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 3a5d637f..d9d4768a 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -1,6 +1,5 @@ import certifi import json -import ssl import urllib3 import inspect from urllib3.util.retry import Retry @@ -67,16 +66,13 @@ def __init__( backoff_factor=0.1, # [0.0s, 0.2s, 0.4s, 0.8s, 1.6s, ...] ) - # global cache ssl context and use (vs on each init of pool manager) - ssl_context = ssl.create_default_context() - ssl_context.load_verify_locations(certifi.where()) - # https://urllib3.readthedocs.io/en/stable/reference/urllib3.poolmanager.html # https://urllib3.readthedocs.io/en/stable/reference/urllib3.connectionpool.html#urllib3.HTTPConnectionPool self.client = urllib3.PoolManager( num_pools=num_pools, headers=self.headers, # default headers sent with each request. - ssl_context=ssl_context, + ca_certs=certifi.where(), + cert_reqs="CERT_REQUIRED", retries=retry_strategy, # use the customized Retry instance ) From 87e1d6340dd4ee6f25f0539bdb77edc2309356e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 14:14:14 +0000 Subject: [PATCH 391/448] Bump orjson from 3.10.5 to 3.10.6 (#704) --- poetry.lock | 103 ++++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 55 insertions(+), 50 deletions(-) diff --git a/poetry.lock b/poetry.lock index 20614a7f..5402fc29 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "alabaster" @@ -384,57 +384,62 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.5" +version = "3.10.6" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:545d493c1f560d5ccfc134803ceb8955a14c3fcb47bbb4b2fee0232646d0b932"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4324929c2dd917598212bfd554757feca3e5e0fa60da08be11b4aa8b90013c1"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c13ca5e2ddded0ce6a927ea5a9f27cae77eee4c75547b4297252cb20c4d30e6"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6c8e30adfa52c025f042a87f450a6b9ea29649d828e0fec4858ed5e6caecf63"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338fd4f071b242f26e9ca802f443edc588fa4ab60bfa81f38beaedf42eda226c"}, - {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6970ed7a3126cfed873c5d21ece1cd5d6f83ca6c9afb71bbae21a0b034588d96"}, - {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:235dadefb793ad12f7fa11e98a480db1f7c6469ff9e3da5e73c7809c700d746b"}, - {file = "orjson-3.10.5-cp310-none-win32.whl", hash = "sha256:be79e2393679eda6a590638abda16d167754393f5d0850dcbca2d0c3735cebe2"}, - {file = "orjson-3.10.5-cp310-none-win_amd64.whl", hash = "sha256:c4a65310ccb5c9910c47b078ba78e2787cb3878cdded1702ac3d0da71ddc5228"}, - {file = "orjson-3.10.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cdf7365063e80899ae3a697def1277c17a7df7ccfc979990a403dfe77bb54d40"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b68742c469745d0e6ca5724506858f75e2f1e5b59a4315861f9e2b1df77775a"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d10cc1b594951522e35a3463da19e899abe6ca95f3c84c69e9e901e0bd93d38"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcbe82b35d1ac43b0d84072408330fd3295c2896973112d495e7234f7e3da2e1"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c0eb7e0c75e1e486c7563fe231b40fdd658a035ae125c6ba651ca3b07936f5"}, - {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:53ed1c879b10de56f35daf06dbc4a0d9a5db98f6ee853c2dbd3ee9d13e6f302f"}, - {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:099e81a5975237fda3100f918839af95f42f981447ba8f47adb7b6a3cdb078fa"}, - {file = "orjson-3.10.5-cp311-none-win32.whl", hash = "sha256:1146bf85ea37ac421594107195db8bc77104f74bc83e8ee21a2e58596bfb2f04"}, - {file = "orjson-3.10.5-cp311-none-win_amd64.whl", hash = "sha256:36a10f43c5f3a55c2f680efe07aa93ef4a342d2960dd2b1b7ea2dd764fe4a37c"}, - {file = "orjson-3.10.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:68f85ecae7af14a585a563ac741b0547a3f291de81cd1e20903e79f25170458f"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28afa96f496474ce60d3340fe8d9a263aa93ea01201cd2bad844c45cd21f5268"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cd684927af3e11b6e754df80b9ffafd9fb6adcaa9d3e8fdd5891be5a5cad51e"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d21b9983da032505f7050795e98b5d9eee0df903258951566ecc358f6696969"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad1de7fef79736dde8c3554e75361ec351158a906d747bd901a52a5c9c8d24b"}, - {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d97531cdfe9bdd76d492e69800afd97e5930cb0da6a825646667b2c6c6c0211"}, - {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d69858c32f09c3e1ce44b617b3ebba1aba030e777000ebdf72b0d8e365d0b2b3"}, - {file = "orjson-3.10.5-cp312-none-win32.whl", hash = "sha256:64c9cc089f127e5875901ac05e5c25aa13cfa5dbbbd9602bda51e5c611d6e3e2"}, - {file = "orjson-3.10.5-cp312-none-win_amd64.whl", hash = "sha256:b2efbd67feff8c1f7728937c0d7f6ca8c25ec81373dc8db4ef394c1d93d13dc5"}, - {file = "orjson-3.10.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:03b565c3b93f5d6e001db48b747d31ea3819b89abf041ee10ac6988886d18e01"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:584c902ec19ab7928fd5add1783c909094cc53f31ac7acfada817b0847975f26"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a35455cc0b0b3a1eaf67224035f5388591ec72b9b6136d66b49a553ce9eb1e6"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1670fe88b116c2745a3a30b0f099b699a02bb3482c2591514baf5433819e4f4d"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185c394ef45b18b9a7d8e8f333606e2e8194a50c6e3c664215aae8cf42c5385e"}, - {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ca0b3a94ac8d3886c9581b9f9de3ce858263865fdaa383fbc31c310b9eac07c9"}, - {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dfc91d4720d48e2a709e9c368d5125b4b5899dced34b5400c3837dadc7d6271b"}, - {file = "orjson-3.10.5-cp38-none-win32.whl", hash = "sha256:c05f16701ab2a4ca146d0bca950af254cb7c02f3c01fca8efbbad82d23b3d9d4"}, - {file = "orjson-3.10.5-cp38-none-win_amd64.whl", hash = "sha256:8a11d459338f96a9aa7f232ba95679fc0c7cedbd1b990d736467894210205c09"}, - {file = "orjson-3.10.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:85c89131d7b3218db1b24c4abecea92fd6c7f9fab87441cfc342d3acc725d807"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66215277a230c456f9038d5e2d84778141643207f85336ef8d2a9da26bd7ca"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51bbcdea96cdefa4a9b4461e690c75ad4e33796530d182bdd5c38980202c134a"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbead71dbe65f959b7bd8cf91e0e11d5338033eba34c114f69078d59827ee139"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df58d206e78c40da118a8c14fc189207fffdcb1f21b3b4c9c0c18e839b5a214"}, - {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c4057c3b511bb8aef605616bd3f1f002a697c7e4da6adf095ca5b84c0fd43595"}, - {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b39e006b00c57125ab974362e740c14a0c6a66ff695bff44615dcf4a70ce2b86"}, - {file = "orjson-3.10.5-cp39-none-win32.whl", hash = "sha256:eded5138cc565a9d618e111c6d5c2547bbdd951114eb822f7f6309e04db0fb47"}, - {file = "orjson-3.10.5-cp39-none-win_amd64.whl", hash = "sha256:cc28e90a7cae7fcba2493953cff61da5a52950e78dc2dacfe931a317ee3d8de7"}, - {file = "orjson-3.10.5.tar.gz", hash = "sha256:7a5baef8a4284405d96c90c7c62b755e9ef1ada84c2406c24a9ebec86b89f46d"}, + {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, + {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, + {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, + {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, + {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, + {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, + {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, + {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, + {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, + {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, + {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, + {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, + {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, + {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, + {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, + {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, + {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, + {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, + {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, + {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, + {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, + {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, + {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, + {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, + {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, + {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, + {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, + {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, + {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, + {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, + {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, ] [[package]] @@ -958,4 +963,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "89794f3b0256bd17ce73cb9fe5635edd8dc37d282308ab4208d5df08eff11a7d" +content-hash = "0eb202f0214b34a4fd920dd8bd3ed59453f2a71e8a1454071856c1d18080659a" diff --git a/pyproject.toml b/pyproject.toml index 8c9e59ac..a962b9e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^70.1.0" pook = "^2.0.0" -orjson = "^3.10.5" +orjson = "^3.10.6" [build-system] requires = ["poetry-core>=1.0.0"] From 511aca1cc924b29caaed68452141d66853be4be5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 18:05:14 -0700 Subject: [PATCH 392/448] Bump types-setuptools from 70.1.0.20240627 to 70.3.0.20240710 (#707) Bumps [types-setuptools](https://github.com/python/typeshed) from 70.1.0.20240627 to 70.3.0.20240710. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5402fc29..8ceae7ed 100644 --- a/poetry.lock +++ b/poetry.lock @@ -805,13 +805,13 @@ files = [ [[package]] name = "types-setuptools" -version = "70.1.0.20240627" +version = "70.3.0.20240710" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.1.0.20240627.tar.gz", hash = "sha256:385907a47b5cf302b928ce07953cd91147d5de6f3da604c31905fdf0ec309e83"}, - {file = "types_setuptools-70.1.0.20240627-py3-none-any.whl", hash = "sha256:c7bdf05cd0a8b66868b4774c7b3c079d01ae025d8c9562bfc8bf2ff44d263c9c"}, + {file = "types-setuptools-70.3.0.20240710.tar.gz", hash = "sha256:842cbf399812d2b65042c9d6ff35113bbf282dee38794779aa1f94e597bafc35"}, + {file = "types_setuptools-70.3.0.20240710-py3-none-any.whl", hash = "sha256:bd0db2a4b9f2c49ac5564be4e0fb3125c4c46b1f73eafdcbceffa5b005cceca4"}, ] [[package]] @@ -963,4 +963,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools" [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0eb202f0214b34a4fd920dd8bd3ed59453f2a71e8a1454071856c1d18080659a" +content-hash = "e3fa63991d39989af47ef9380ec497c17c30d57bcf4a6c59d8e2146d22d27828" diff --git a/pyproject.toml b/pyproject.toml index a962b9e2..dffc7ae4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^70.1.0" +types-setuptools = "^70.3.0" pook = "^2.0.0" orjson = "^3.10.6" From 9011163f50a85616022da3b15e3d360704cd67fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 18:16:21 -0700 Subject: [PATCH 393/448] Bump zipp from 3.11.0 to 3.19.1 (#706) Bumps [zipp](https://github.com/jaraco/zipp) from 3.11.0 to 3.19.1. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/main/NEWS.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.11.0...v3.19.1) --- updated-dependencies: - dependency-name: zipp dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8ceae7ed..381728c1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -947,18 +947,18 @@ files = [ [[package]] name = "zipp" -version = "3.11.0" +version = "3.19.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"}, - {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"}, + {file = "zipp-3.19.1-py3-none-any.whl", hash = "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091"}, + {file = "zipp-3.19.1.tar.gz", hash = "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" From 5c73e33f836cc0298008cfe37cb9f9a3de36d036 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 18:20:22 -0700 Subject: [PATCH 394/448] Bump certifi from 2024.6.2 to 2024.7.4 (#702) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.6.2 to 2024.7.4. - [Commits](https://github.com/certifi/python-certifi/compare/2024.06.02...2024.07.04) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 381728c1..5c87ae90 100644 --- a/poetry.lock +++ b/poetry.lock @@ -90,13 +90,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, ] [[package]] From 3aa9d8267cad17aeec6793aefe89a1a85bb359f4 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:41:45 -0700 Subject: [PATCH 395/448] Added ticker news insights support (#710) --- .polygon/rest.json | 129 ++++++++++++++++++--------------- polygon/rest/models/tickers.py | 18 +++++ 2 files changed, 87 insertions(+), 60 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 05559f76..94dd8286 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -18312,7 +18312,7 @@ "operationId": "ListNews", "parameters": [ { - "description": "Return results that contain this ticker.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "in": "query", "name": "ticker", "schema": { @@ -18496,52 +18496,35 @@ "request_id": "831afdb0b8078549fed053476984947a", "results": [ { - "amp_url": "https://amp.benzinga.com/amp/content/20784086", - "article_url": "https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square", - "author": "Rachit Vats", - "description": "

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

\n

The investment firm’s Ark Innovation ETF (NYSE ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

\n

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE SKLZ), just a day after snapping 1.2 million shares of the stock.

\n

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

", - "id": "nJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA", - "image_url": "https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720", + "amp_url": "https://m.uk.investing.com/news/stock-market-news/markets-are-underestimating-fed-cuts-ubs-3559968?ampMode=1", + "article_url": "https://uk.investing.com/news/stock-market-news/markets-are-underestimating-fed-cuts-ubs-3559968", + "author": "Sam Boughedda", + "description": "UBS analysts warn that markets are underestimating the extent of future interest rate cuts by the Federal Reserve, as the weakening economy is likely to justify more cuts than currently anticipated.", + "id": "8ec638777ca03b553ae516761c2a22ba2fdd2f37befae3ab6fdab74e9e5193eb", + "image_url": "https://i-invdn-com.investing.com/news/LYNXNPEC4I0AL_L.jpg", + "insights": [ + { + "sentiment": "positive", + "sentiment_reasoning": "UBS analysts are providing a bullish outlook on the extent of future Federal Reserve rate cuts, suggesting that markets are underestimating the number of cuts that will occur.", + "ticker": "UBS" + } + ], "keywords": [ - "Sector ETFs", - "Penny Stocks", - "Cryptocurrency", - "Small Cap", - "Markets", - "Trading Ideas", - "ETFs" + "Federal Reserve", + "interest rates", + "economic data" ], - "published_utc": "2021-04-26T02:33:17Z", + "published_utc": "2024-06-24T18:33:53Z", "publisher": { - "favicon_url": "https://s3.polygon.io/public/public/assets/news/favicons/benzinga.ico", - "homepage_url": "https://www.benzinga.com/", - "logo_url": "https://s3.polygon.io/public/public/assets/news/logos/benzinga.svg", - "name": "Benzinga" + "favicon_url": "https://s3.polygon.io/public/assets/news/favicons/investing.ico", + "homepage_url": "https://www.investing.com/", + "logo_url": "https://s3.polygon.io/public/assets/news/logos/investing.png", + "name": "Investing.com" }, "tickers": [ - "DOCU", - "DDD", - "NIU", - "ARKF", - "NVDA", - "SKLZ", - "PCAR", - "MASS", - "PSTI", - "SPFR", - "TREE", - "PHR", - "IRDM", - "BEAM", - "ARKW", - "ARKK", - "ARKG", - "PSTG", - "SQ", - "IONS", - "SYRS" + "UBS" ], - "title": "Cathie Wood Adds More Coinbase, Skillz, Trims Square" + "title": "Markets are underestimating Fed cuts: UBS By Investing.com - Investing.com UK" } ], "status": "OK" @@ -18587,6 +18570,32 @@ "description": "The article's image URL.", "type": "string" }, + "insights": { + "description": "The insights related to the article.", + "items": { + "properties": { + "sentiment": { + "description": "The sentiment of the insight.", + "type": "string" + }, + "sentiment_reasoning": { + "description": "The reasoning behind the sentiment.", + "type": "string" + }, + "ticker": { + "description": "The ticker symbol associated with the insight.", + "type": "string" + } + }, + "required": [ + "ticker", + "sentiment", + "sentiment_reasoning" + ], + "type": "object" + }, + "type": "array" + }, "keywords": { "description": "The keywords associated with the article (which will vary depending on\nthe publishing source).", "items": { @@ -18667,7 +18676,7 @@ } }, "text/csv": { - "example": "id,publisher_name,publisher_homepage_url,publisher_logo_url,publisher_favicon_url,title,author,published_utc,article_url,tickers,amp_url,image_url,description,keywords\nnJsSJJdwViHZcw5367rZi7_qkXLfMzacXBfpv-vD9UA,Benzinga,https://www.benzinga.com/,https://s3.polygon.io/public/public/assets/news/logos/benzinga.svg,https://s3.polygon.io/public/public/assets/news/favicons/benzinga.ico,\"Cathie Wood Adds More Coinbase, Skillz, Trims Square\",Rachit Vats,2021-04-26T02:33:17Z,https://www.benzinga.com/markets/cryptocurrency/21/04/20784086/cathie-wood-adds-more-coinbase-skillz-trims-square,\"DOCU,DDD,NIU,ARKF,NVDA,SKLZ,PCAR,MASS,PSTI,SPFR,TREE,PHR,IRDM,BEAM,ARKW,ARKK,ARKG,PSTG,SQ,IONS,SYRS\",https://amp.benzinga.com/amp/content/20784086,https://cdn2.benzinga.com/files/imagecache/og_image_social_share_1200x630/images/story/2012/andre-francois-mckenzie-auhr4gcqcce-unsplash.jpg?width=720,\"

Cathie Wood-led Ark Investment Management on Friday snapped up another 221,167 shares of the cryptocurrency exchange Coinbase Global Inc (NASDAQ COIN) worth about $64.49 million on the stock’s Friday’s dip and also its fourth-straight loss.

The investment firm’s Ark Innovation ETF (NYSE ARKK) bought the shares of the company that closed 0.63% lower at $291.60 on Friday, giving the cryptocurrency exchange a market cap of $58.09 billion. Coinbase’s market cap has dropped from $85.8 billion on its blockbuster listing earlier this month.

The New York-based company also added another 3,873 shares of the mobile gaming company Skillz Inc (NYSE SKLZ), just a day after snapping 1.2 million shares of the stock.

ARKK bought the shares of the company which closed ...

Full story available on Benzinga.com

\",\"Sector ETFs,Penny Stocks,Cryptocurrency,Small Cap,Markets,Trading Ideas,ETFs\"\n", + "example": "id,publisher_name,publisher_homepage_url,publisher_logo_url,publisher_favicon_url,title,author,published_utc,article_url,ticker,amp_url,image_url,description,keywords,sentiment,sentiment_reasoning\n8ec638777ca03b553ae516761c2a22ba2fdd2f37befae3ab6fdab74e9e5193eb,Investing.com,https://www.investing.com/,https://s3.polygon.io/public/assets/news/logos/investing.png,https://s3.polygon.io/public/assets/news/favicons/investing.ico,Markets are underestimating Fed cuts: UBS By Investing.com - Investing.com UK,Sam Boughedda,1719254033000000000,https://uk.investing.com/news/stock-market-news/markets-are-underestimating-fed-cuts-ubs-3559968,UBS,https://m.uk.investing.com/news/stock-market-news/markets-are-underestimating-fed-cuts-ubs-3559968?ampMode=1,https://i-invdn-com.investing.com/news/LYNXNPEC4I0AL_L.jpg,\"UBS analysts warn that markets are underestimating the extent of future interest rate cuts by the Federal Reserve, as the weakening economy is likely to justify more cuts than currently anticipated.\",\"Federal Reserve,interest rates,economic data\",positive,\"UBS analysts are providing a bullish outlook on the extent of future Federal Reserve rate cuts, suggesting that markets are underestimating the number of cuts that will occur.\"\n", "schema": { "type": "string" } @@ -22864,11 +22873,11 @@ } }, { - "description": "Limit the number of results returned, default is 10 and max is 50000.", + "description": "Limit the number of results returned, default is 1000 and max is 50000.", "in": "query", "name": "limit", "schema": { - "default": 10, + "default": 1000, "example": 10, "maximum": 50000, "minimum": 1, @@ -22993,7 +23002,7 @@ }, "x-polygon-paginate": { "limit": { - "default": 10, + "default": 1000, "example": 10, "max": 50000 }, @@ -23091,11 +23100,11 @@ } }, { - "description": "Limit the number of results returned, default is 10 and max is 50000.", + "description": "Limit the number of results returned, default is 1000 and max is 50000.", "in": "query", "name": "limit", "schema": { - "default": 10, + "default": 1000, "example": 10, "maximum": 50000, "minimum": 1, @@ -23242,7 +23251,7 @@ }, "x-polygon-paginate": { "limit": { - "default": 10, + "default": 1000, "example": 10, "max": 50000 }, @@ -23333,11 +23342,11 @@ } }, { - "description": "Limit the number of results returned, default is 10 and max is 50000.", + "description": "Limit the number of results returned, default is 1000 and max is 50000.", "in": "query", "name": "limit", "schema": { - "default": 10, + "default": 1000, "example": 10, "maximum": 50000, "minimum": 1, @@ -23545,7 +23554,7 @@ }, "x-polygon-paginate": { "limit": { - "default": 10, + "default": 1000, "example": 10, "max": 50000 }, @@ -29071,11 +29080,11 @@ } }, { - "description": "Limit the number of results returned, default is 10 and max is 50000.", + "description": "Limit the number of results returned, default is 1000 and max is 50000.", "in": "query", "name": "limit", "schema": { - "default": 10, + "default": 1000, "example": 10, "maximum": 50000, "minimum": 1, @@ -29221,7 +29230,7 @@ }, "x-polygon-paginate": { "limit": { - "default": 10, + "default": 1000, "example": 10, "max": 50000 }, @@ -29319,11 +29328,11 @@ } }, { - "description": "Limit the number of results returned, default is 10 and max is 50000.", + "description": "Limit the number of results returned, default is 1000 and max is 50000.", "in": "query", "name": "limit", "schema": { - "default": 10, + "default": 1000, "example": 10, "maximum": 50000, "minimum": 1, @@ -29475,7 +29484,7 @@ }, "x-polygon-paginate": { "limit": { - "default": 10, + "default": 1000, "example": 10, "max": 50000 }, @@ -29566,11 +29575,11 @@ } }, { - "description": "Limit the number of results returned, default is 10 and max is 50000.", + "description": "Limit the number of results returned, default is 1000 and max is 50000.", "in": "query", "name": "limit", "schema": { - "default": 10, + "default": 1000, "example": 10, "maximum": 50000, "minimum": 1, @@ -29766,7 +29775,7 @@ }, "x-polygon-paginate": { "limit": { - "default": 10, + "default": 1000, "example": 10, "max": 50000 }, diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 9a2484ac..2554927e 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -32,6 +32,18 @@ def from_dict(d): return Branding(**d) +@modelclass +class Insight: + "Contains the insights related to the article." + sentiment: Optional[str] = None + sentiment_reasoning: Optional[str] = None + ticker: Optional[str] = None + + @staticmethod + def from_dict(d): + return Insight(**d) + + @modelclass class Publisher: "Contains publisher data for ticker news." @@ -152,6 +164,7 @@ class TickerNews: description: Optional[str] = None id: Optional[str] = None image_url: Optional[str] = None + insights: Optional[List[Insight]] = None keywords: Optional[List[str]] = None published_utc: Optional[str] = None publisher: Optional[Publisher] = None @@ -167,6 +180,11 @@ def from_dict(d): description=d.get("description", None), id=d.get("id", None), image_url=d.get("image_url", None), + insights=( + [Insight.from_dict(insight) for insight in d["insights"]] + if "insights" in d + else None + ), keywords=d.get("keywords", None), published_utc=d.get("published_utc", None), publisher=( From 48519710e59ec567a7723214f4692245e104cfb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 11:55:03 -0700 Subject: [PATCH 396/448] Bump mypy from 1.10.1 to 1.11.0 (#713) Bumps [mypy](https://github.com/python/mypy) from 1.10.1 to 1.11.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.10.1...v1.11) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 70 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5c87ae90..4b43ff21 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,44 +312,44 @@ files = [ [[package]] name = "mypy" -version = "1.10.1" +version = "1.11.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, - {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, - {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, - {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, - {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, - {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, - {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, - {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, - {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, - {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, - {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, - {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, - {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, - {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, - {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, - {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, - {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, - {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, - {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, + {file = "mypy-1.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3824187c99b893f90c845bab405a585d1ced4ff55421fdf5c84cb7710995229"}, + {file = "mypy-1.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96f8dbc2c85046c81bcddc246232d500ad729cb720da4e20fce3b542cab91287"}, + {file = "mypy-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a5d8d8dd8613a3e2be3eae829ee891b6b2de6302f24766ff06cb2875f5be9c6"}, + {file = "mypy-1.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72596a79bbfb195fd41405cffa18210af3811beb91ff946dbcb7368240eed6be"}, + {file = "mypy-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:35ce88b8ed3a759634cb4eb646d002c4cef0a38f20565ee82b5023558eb90c00"}, + {file = "mypy-1.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98790025861cb2c3db8c2f5ad10fc8c336ed2a55f4daf1b8b3f877826b6ff2eb"}, + {file = "mypy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25bcfa75b9b5a5f8d67147a54ea97ed63a653995a82798221cca2a315c0238c1"}, + {file = "mypy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bea2a0e71c2a375c9fa0ede3d98324214d67b3cbbfcbd55ac8f750f85a414e3"}, + {file = "mypy-1.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2b3d36baac48e40e3064d2901f2fbd2a2d6880ec6ce6358825c85031d7c0d4d"}, + {file = "mypy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8e2e43977f0e09f149ea69fd0556623919f816764e26d74da0c8a7b48f3e18a"}, + {file = "mypy-1.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d44c1e44a8be986b54b09f15f2c1a66368eb43861b4e82573026e04c48a9e20"}, + {file = "mypy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cea3d0fb69637944dd321f41bc896e11d0fb0b0aa531d887a6da70f6e7473aba"}, + {file = "mypy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a83ec98ae12d51c252be61521aa5731f5512231d0b738b4cb2498344f0b840cd"}, + {file = "mypy-1.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7b73a856522417beb78e0fb6d33ef89474e7a622db2653bc1285af36e2e3e3d"}, + {file = "mypy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:f2268d9fcd9686b61ab64f077be7ffbc6fbcdfb4103e5dd0cc5eaab53a8886c2"}, + {file = "mypy-1.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:940bfff7283c267ae6522ef926a7887305945f716a7704d3344d6d07f02df850"}, + {file = "mypy-1.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:14f9294528b5f5cf96c721f231c9f5b2733164e02c1c018ed1a0eff8a18005ac"}, + {file = "mypy-1.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b54c27783991399046837df5c7c9d325d921394757d09dbcbf96aee4649fe9"}, + {file = "mypy-1.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65f190a6349dec29c8d1a1cd4aa71284177aee5949e0502e6379b42873eddbe7"}, + {file = "mypy-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbe286303241fea8c2ea5466f6e0e6a046a135a7e7609167b07fd4e7baf151bf"}, + {file = "mypy-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104e9c1620c2675420abd1f6c44bab7dd33cc85aea751c985006e83dcd001095"}, + {file = "mypy-1.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f006e955718ecd8d159cee9932b64fba8f86ee6f7728ca3ac66c3a54b0062abe"}, + {file = "mypy-1.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:becc9111ca572b04e7e77131bc708480cc88a911adf3d0239f974c034b78085c"}, + {file = "mypy-1.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6801319fe76c3f3a3833f2b5af7bd2c17bb93c00026a2a1b924e6762f5b19e13"}, + {file = "mypy-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c1a184c64521dc549324ec6ef7cbaa6b351912be9cb5edb803c2808a0d7e85ac"}, + {file = "mypy-1.11.0-py3-none-any.whl", hash = "sha256:56913ec8c7638b0091ef4da6fcc9136896914a9d60d54670a75880c3e5b99ace"}, + {file = "mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538"}, ] [package.dependencies] mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" +typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] @@ -827,13 +827,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] @@ -963,4 +963,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e3fa63991d39989af47ef9380ec497c17c30d57bcf4a6c59d8e2146d22d27828" +content-hash = "7219da9017d63f148c248f80a66242a67ef5a0fbb826be70332651970a6a7e35" diff --git a/pyproject.toml b/pyproject.toml index dffc7ae4..f5f940f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] black = "^24.4.2" -mypy = "^1.10" +mypy = "^1.11" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^2.0.0" From c2f955ecd3a9878ac0166a997b97ec5e73d91f0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 11:59:18 -0700 Subject: [PATCH 397/448] Bump types-setuptools from 70.3.0.20240710 to 71.0.0.20240722 (#714) Bumps [types-setuptools](https://github.com/python/typeshed) from 70.3.0.20240710 to 71.0.0.20240722. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4b43ff21..b258dbe8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -805,13 +805,13 @@ files = [ [[package]] name = "types-setuptools" -version = "70.3.0.20240710" +version = "71.0.0.20240722" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-70.3.0.20240710.tar.gz", hash = "sha256:842cbf399812d2b65042c9d6ff35113bbf282dee38794779aa1f94e597bafc35"}, - {file = "types_setuptools-70.3.0.20240710-py3-none-any.whl", hash = "sha256:bd0db2a4b9f2c49ac5564be4e0fb3125c4c46b1f73eafdcbceffa5b005cceca4"}, + {file = "types-setuptools-71.0.0.20240722.tar.gz", hash = "sha256:8f1fd5281945ed8f5a896f05dd50bc31917d6e2487ff9508f4bac522d13ad395"}, + {file = "types_setuptools-71.0.0.20240722-py3-none-any.whl", hash = "sha256:04a383bd1a2dcdb6a85397516ce2d7b46617d89f1d758f686d0d9069943d9811"}, ] [[package]] @@ -963,4 +963,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "7219da9017d63f148c248f80a66242a67ef5a0fbb826be70332651970a6a7e35" +content-hash = "0d5a56908d1fdb653867db55416e55c841b5f5ac94f8607b51dddc177115d6d1" diff --git a/pyproject.toml b/pyproject.toml index f5f940f3..931d9805 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^70.3.0" +types-setuptools = "^71.0.0" pook = "^2.0.0" orjson = "^3.10.6" From 5a4e2041d5fde4a7536ce792634b66f805b54f62 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 29 Jul 2024 07:52:22 -0700 Subject: [PATCH 398/448] Add related companies demo (#717) * Added related companies example * Added image to readme --- examples/tools/related-companies/data.json | 1 + examples/tools/related-companies/index.html | 30 +++++++++++++ examples/tools/related-companies/readme.md | 36 ++++++++++++++++ .../related-companies-demo.py | 40 ++++++++++++++++++ .../related-companies/related-companies.png | Bin 0 -> 193270 bytes 5 files changed, 107 insertions(+) create mode 100644 examples/tools/related-companies/data.json create mode 100644 examples/tools/related-companies/index.html create mode 100644 examples/tools/related-companies/readme.md create mode 100644 examples/tools/related-companies/related-companies-demo.py create mode 100644 examples/tools/related-companies/related-companies.png diff --git a/examples/tools/related-companies/data.json b/examples/tools/related-companies/data.json new file mode 100644 index 00000000..2b63ea05 --- /dev/null +++ b/examples/tools/related-companies/data.json @@ -0,0 +1 @@ +{"nodes": [{"id": 1, "label": "MSFT"}, {"id": 2, "label": "GOOGL"}, {"id": 3, "label": "NVDA"}, {"id": 4, "label": "AMZN"}, {"id": 5, "label": "GOOG"}, {"id": 6, "label": "META"}, {"id": 7, "label": "TSLA"}, {"id": 8, "label": "AAPL"}, {"id": 9, "label": "CRM"}, {"id": 10, "label": "ORCL"}, {"id": 11, "label": "AMD"}, {"id": 12, "label": "NFLX"}, {"id": 13, "label": "WMT"}, {"id": 14, "label": "DIS"}, {"id": 15, "label": "SNAP"}, {"id": 16, "label": "SHOP"}, {"id": 17, "label": "INTC"}, {"id": 18, "label": "ANET"}, {"id": 19, "label": "RIVN"}, {"id": 20, "label": "GM"}, {"id": 21, "label": "F"}, {"id": 22, "label": "LCID"}, {"id": 23, "label": "WBD"}, {"id": 24, "label": "CMCSA"}, {"id": 25, "label": "PARA"}, {"id": 26, "label": "T"}, {"id": 27, "label": "ROKU"}], "edges": [{"from": 1, "to": 2}, {"from": 1, "to": 3}, {"from": 1, "to": 4}, {"from": 1, "to": 5}, {"from": 1, "to": 6}, {"from": 1, "to": 7}, {"from": 1, "to": 8}, {"from": 1, "to": 9}, {"from": 1, "to": 10}, {"from": 1, "to": 11}, {"from": 4, "to": 1}, {"from": 4, "to": 2}, {"from": 4, "to": 5}, {"from": 4, "to": 8}, {"from": 4, "to": 7}, {"from": 4, "to": 3}, {"from": 4, "to": 6}, {"from": 4, "to": 12}, {"from": 4, "to": 13}, {"from": 4, "to": 14}, {"from": 6, "to": 5}, {"from": 6, "to": 2}, {"from": 6, "to": 1}, {"from": 6, "to": 4}, {"from": 6, "to": 8}, {"from": 6, "to": 7}, {"from": 6, "to": 3}, {"from": 6, "to": 15}, {"from": 6, "to": 12}, {"from": 6, "to": 11}, {"from": 8, "to": 1}, {"from": 8, "to": 2}, {"from": 8, "to": 4}, {"from": 8, "to": 5}, {"from": 8, "to": 7}, {"from": 8, "to": 3}, {"from": 8, "to": 6}, {"from": 8, "to": 12}, {"from": 8, "to": 14}, {"from": 8, "to": 11}, {"from": 5, "to": 2}, {"from": 5, "to": 1}, {"from": 5, "to": 6}, {"from": 5, "to": 4}, {"from": 5, "to": 8}, {"from": 5, "to": 7}, {"from": 5, "to": 3}, {"from": 5, "to": 15}, {"from": 5, "to": 12}, {"from": 5, "to": 16}, {"from": 3, "to": 11}, {"from": 3, "to": 6}, {"from": 3, "to": 2}, {"from": 3, "to": 7}, {"from": 3, "to": 5}, {"from": 3, "to": 1}, {"from": 3, "to": 8}, {"from": 3, "to": 4}, {"from": 3, "to": 17}, {"from": 3, "to": 18}, {"from": 7, "to": 19}, {"from": 7, "to": 2}, {"from": 7, "to": 4}, {"from": 7, "to": 20}, {"from": 7, "to": 21}, {"from": 7, "to": 22}, {"from": 7, "to": 5}, {"from": 7, "to": 6}, {"from": 7, "to": 8}, {"from": 7, "to": 3}, {"from": 14, "to": 12}, {"from": 14, "to": 23}, {"from": 14, "to": 4}, {"from": 14, "to": 24}, {"from": 14, "to": 25}, {"from": 14, "to": 8}, {"from": 14, "to": 2}, {"from": 14, "to": 26}, {"from": 14, "to": 5}, {"from": 14, "to": 27}]} \ No newline at end of file diff --git a/examples/tools/related-companies/index.html b/examples/tools/related-companies/index.html new file mode 100644 index 00000000..1b5ae182 --- /dev/null +++ b/examples/tools/related-companies/index.html @@ -0,0 +1,30 @@ + + + + Vis Network | Related Companies + + + + + +
+ + diff --git a/examples/tools/related-companies/readme.md b/examples/tools/related-companies/readme.md new file mode 100644 index 00000000..9f107550 --- /dev/null +++ b/examples/tools/related-companies/readme.md @@ -0,0 +1,36 @@ +# See Connections with the Related Companies API + +This repository contains the Python script and HTML file used in our tutorial to demonstrate how to identify and visualize relationships between companies using Polygon.io's Related Companies API. The tutorial showcases how to fetch related company data and create a dynamic network graph using Python and vis.js, providing insights into the interconnected corporate landscape. + +![Related Companies](./related-companies.png) + +Please see the [tutorial](https://polygon.io/blog/related-companies-api) for more details. + +### Prerequisites + +- Python 3.8+ +- Have Polygon.io's [python client](https://github.com/polygon-io/client-python) installed +- An active Polygon.io account with an API key + +### Repository Contents + +- `related-companies-demo.py`: Python script to fetch and process data from the Related Companies API. +- `index.html`: HTML file for visualizing the data as a network graph using vis.js. + +### Running the Example + +To run the Python script, ensure you have Python installed and your API key ready. Execute the following command: + +``` +python related-companies-demo.py +``` + +The script will generate a `data.json` file, which contains the nodes and edges for the network graph. + +To visualize the relationships: + +1. Take the `nodes` and `edges` from the `data.json` file and replace them in the `index.html` file +2. Open `index.html` in your web browser. +3. The web page should display the network graph. + +For a complete step-by-step guide on setting up and exploring the capabilities of the Related Companies API, refer to our detailed [tutorial](https://polygon.io/blog/related-companies-api). \ No newline at end of file diff --git a/examples/tools/related-companies/related-companies-demo.py b/examples/tools/related-companies/related-companies-demo.py new file mode 100644 index 00000000..221d5f0f --- /dev/null +++ b/examples/tools/related-companies/related-companies-demo.py @@ -0,0 +1,40 @@ +from polygon import RESTClient +import json + + +def get_related_tickers(): + client = RESTClient(trace=True) + + # Fetch a limited list of tickers to keep the example manageable + main_tickers = ["MSFT", "AMZN", "META", "AAPL", "GOOG", "NVDA", "TSLA", "DIS"] + + # Prepare data structures for nodes and edges + nodes = [] + edges = [] + id_map = {} + current_id = 1 + + # Iterate over each main ticker and find related tickers + for ticker in main_tickers: + if ticker not in id_map: + id_map[ticker] = current_id + nodes.append({"id": current_id, "label": ticker}) + current_id += 1 + + related_companies = client.get_related_companies(ticker) + for company in related_companies: + related_ticker = company.ticker + if related_ticker not in id_map: + id_map[related_ticker] = current_id + nodes.append({"id": current_id, "label": related_ticker}) + current_id += 1 + + edges.append({"from": id_map[ticker], "to": id_map[related_ticker]}) + + # Save the nodes and edges to a JSON file for web visualization + with open("data.json", "w") as f: + json.dump({"nodes": nodes, "edges": edges}, f) + + +if __name__ == "__main__": + get_related_tickers() diff --git a/examples/tools/related-companies/related-companies.png b/examples/tools/related-companies/related-companies.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9b14c73a1e281835da8e68ee7b9e9dbe13ef23 GIT binary patch literal 193270 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 z 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 XvkAWYr>|453-Ju7^w=lA~rQ~o&l literal 0 HcmV?d00001 From 657f662e6202a304618a89573232000aef08d82f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 07:25:51 -0700 Subject: [PATCH 399/448] Bump types-setuptools from 71.0.0.20240722 to 71.1.0.20240726 (#720) Bumps [types-setuptools](https://github.com/python/typeshed) from 71.0.0.20240722 to 71.1.0.20240726. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index b258dbe8..e5f2b0fa 100644 --- a/poetry.lock +++ b/poetry.lock @@ -805,13 +805,13 @@ files = [ [[package]] name = "types-setuptools" -version = "71.0.0.20240722" +version = "71.1.0.20240726" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-71.0.0.20240722.tar.gz", hash = "sha256:8f1fd5281945ed8f5a896f05dd50bc31917d6e2487ff9508f4bac522d13ad395"}, - {file = "types_setuptools-71.0.0.20240722-py3-none-any.whl", hash = "sha256:04a383bd1a2dcdb6a85397516ce2d7b46617d89f1d758f686d0d9069943d9811"}, + {file = "types-setuptools-71.1.0.20240726.tar.gz", hash = "sha256:85ba28e9461bb1be86ebba4db0f1c2408f2b11115b1966334ea9dc464e29303e"}, + {file = "types_setuptools-71.1.0.20240726-py3-none-any.whl", hash = "sha256:a7775376f36e0ff09bcad236bf265777590a66b11623e48c20bfc30f1444ea36"}, ] [[package]] @@ -963,4 +963,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "0d5a56908d1fdb653867db55416e55c841b5f5ac94f8607b51dddc177115d6d1" +content-hash = "dd52ab51430e0d0f4fcd405037304b756c019837bec333e0c0b53a2c2e0a9bef" diff --git a/pyproject.toml b/pyproject.toml index 931d9805..ddd0697e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^71.0.0" +types-setuptools = "^71.1.0" pook = "^2.0.0" orjson = "^3.10.6" From 53c5a1181b89cf751633aad6bf0725119aaff453 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 00:48:54 -0700 Subject: [PATCH 400/448] Bump mypy from 1.11.0 to 1.11.1 (#723) Bumps [mypy](https://github.com/python/mypy) from 1.11.0 to 1.11.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.11...v1.11.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index e5f2b0fa..f1d1dbe0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.11.0" +version = "1.11.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3824187c99b893f90c845bab405a585d1ced4ff55421fdf5c84cb7710995229"}, - {file = "mypy-1.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:96f8dbc2c85046c81bcddc246232d500ad729cb720da4e20fce3b542cab91287"}, - {file = "mypy-1.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a5d8d8dd8613a3e2be3eae829ee891b6b2de6302f24766ff06cb2875f5be9c6"}, - {file = "mypy-1.11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72596a79bbfb195fd41405cffa18210af3811beb91ff946dbcb7368240eed6be"}, - {file = "mypy-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:35ce88b8ed3a759634cb4eb646d002c4cef0a38f20565ee82b5023558eb90c00"}, - {file = "mypy-1.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:98790025861cb2c3db8c2f5ad10fc8c336ed2a55f4daf1b8b3f877826b6ff2eb"}, - {file = "mypy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25bcfa75b9b5a5f8d67147a54ea97ed63a653995a82798221cca2a315c0238c1"}, - {file = "mypy-1.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bea2a0e71c2a375c9fa0ede3d98324214d67b3cbbfcbd55ac8f750f85a414e3"}, - {file = "mypy-1.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2b3d36baac48e40e3064d2901f2fbd2a2d6880ec6ce6358825c85031d7c0d4d"}, - {file = "mypy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:d8e2e43977f0e09f149ea69fd0556623919f816764e26d74da0c8a7b48f3e18a"}, - {file = "mypy-1.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d44c1e44a8be986b54b09f15f2c1a66368eb43861b4e82573026e04c48a9e20"}, - {file = "mypy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cea3d0fb69637944dd321f41bc896e11d0fb0b0aa531d887a6da70f6e7473aba"}, - {file = "mypy-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a83ec98ae12d51c252be61521aa5731f5512231d0b738b4cb2498344f0b840cd"}, - {file = "mypy-1.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7b73a856522417beb78e0fb6d33ef89474e7a622db2653bc1285af36e2e3e3d"}, - {file = "mypy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:f2268d9fcd9686b61ab64f077be7ffbc6fbcdfb4103e5dd0cc5eaab53a8886c2"}, - {file = "mypy-1.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:940bfff7283c267ae6522ef926a7887305945f716a7704d3344d6d07f02df850"}, - {file = "mypy-1.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:14f9294528b5f5cf96c721f231c9f5b2733164e02c1c018ed1a0eff8a18005ac"}, - {file = "mypy-1.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7b54c27783991399046837df5c7c9d325d921394757d09dbcbf96aee4649fe9"}, - {file = "mypy-1.11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:65f190a6349dec29c8d1a1cd4aa71284177aee5949e0502e6379b42873eddbe7"}, - {file = "mypy-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbe286303241fea8c2ea5466f6e0e6a046a135a7e7609167b07fd4e7baf151bf"}, - {file = "mypy-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:104e9c1620c2675420abd1f6c44bab7dd33cc85aea751c985006e83dcd001095"}, - {file = "mypy-1.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f006e955718ecd8d159cee9932b64fba8f86ee6f7728ca3ac66c3a54b0062abe"}, - {file = "mypy-1.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:becc9111ca572b04e7e77131bc708480cc88a911adf3d0239f974c034b78085c"}, - {file = "mypy-1.11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6801319fe76c3f3a3833f2b5af7bd2c17bb93c00026a2a1b924e6762f5b19e13"}, - {file = "mypy-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:c1a184c64521dc549324ec6ef7cbaa6b351912be9cb5edb803c2808a0d7e85ac"}, - {file = "mypy-1.11.0-py3-none-any.whl", hash = "sha256:56913ec8c7638b0091ef4da6fcc9136896914a9d60d54670a75880c3e5b99ace"}, - {file = "mypy-1.11.0.tar.gz", hash = "sha256:93743608c7348772fdc717af4aeee1997293a1ad04bc0ea6efa15bf65385c538"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, + {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, + {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, + {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, + {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, + {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, + {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, + {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, + {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, + {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, + {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, + {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, + {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, + {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, + {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, + {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, + {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, + {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, ] [package.dependencies] From efa133b23c931e5718cf465f28e34df24d163094 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 01:08:31 -0700 Subject: [PATCH 401/448] Bump black from 24.4.2 to 24.8.0 (#724) Bumps [black](https://github.com/psf/black) from 24.4.2 to 24.8.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/24.4.2...24.8.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 48 ++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/poetry.lock b/poetry.lock index f1d1dbe0..bcd6bc43 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,33 +44,33 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "24.4.2" +version = "24.8.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, - {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, - {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, - {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, - {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, - {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, - {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, - {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, - {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, - {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, - {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, - {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, - {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, - {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, - {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, - {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, - {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, - {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, - {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, - {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, - {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, - {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, + {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, + {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, + {file = "black-24.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42"}, + {file = "black-24.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a"}, + {file = "black-24.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1"}, + {file = "black-24.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af"}, + {file = "black-24.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4"}, + {file = "black-24.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af"}, + {file = "black-24.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368"}, + {file = "black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed"}, + {file = "black-24.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018"}, + {file = "black-24.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2"}, + {file = "black-24.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:505289f17ceda596658ae81b61ebbe2d9b25aa78067035184ed0a9d855d18afd"}, + {file = "black-24.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b19c9ad992c7883ad84c9b22aaa73562a16b819c1d8db7a1a1a49fb7ec13c7d2"}, + {file = "black-24.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f13f7f386f86f8121d76599114bb8c17b69d962137fc70efe56137727c7047e"}, + {file = "black-24.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:f490dbd59680d809ca31efdae20e634f3fae27fba3ce0ba3208333b713bc3920"}, + {file = "black-24.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eab4dd44ce80dea27dc69db40dab62d4ca96112f87996bca68cd75639aeb2e4c"}, + {file = "black-24.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3c4285573d4897a7610054af5a890bde7c65cb466040c5f0c8b732812d7f0e5e"}, + {file = "black-24.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e84e33b37be070ba135176c123ae52a51f82306def9f7d063ee302ecab2cf47"}, + {file = "black-24.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:73bbf84ed136e45d451a260c6b73ed674652f90a2b3211d6a35e78054563a9bb"}, + {file = "black-24.8.0-py3-none-any.whl", hash = "sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed"}, + {file = "black-24.8.0.tar.gz", hash = "sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f"}, ] [package.dependencies] @@ -963,4 +963,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "dd52ab51430e0d0f4fcd405037304b756c019837bec333e0c0b53a2c2e0a9bef" +content-hash = "727e999503d474aca451156967f9dde6653456d4b13553d2838606cb3f4c6a85" diff --git a/pyproject.toml b/pyproject.toml index ddd0697e..dba65afe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ websockets = ">=10.3,<13.0" certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] -black = "^24.4.2" +black = "^24.8.0" mypy = "^1.11" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" From b88c1f2308ad888ced3597b5ba5a14ae4c114bd0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:40:39 +0000 Subject: [PATCH 402/448] Bump orjson from 3.10.6 to 3.10.7 (#727) --- poetry.lock | 112 ++++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 60 insertions(+), 54 deletions(-) diff --git a/poetry.lock b/poetry.lock index bcd6bc43..fa02ba6b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,62 +384,68 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.6" +version = "3.10.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, - {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, - {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, - {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, - {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, - {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, - {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, - {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, - {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, - {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, - {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, - {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, - {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, - {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, - {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, - {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, + {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, + {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, + {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, + {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, + {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, + {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, + {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, + {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, + {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, + {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, + {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, + {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, + {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, + {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, + {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, + {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, + {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, + {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, + {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, + {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, ] [[package]] @@ -963,4 +969,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "727e999503d474aca451156967f9dde6653456d4b13553d2838606cb3f4c6a85" +content-hash = "c6ddcb49a381dd1d80b6d99fbf334924b3cc748b3a00ab8234440f955b45963c" diff --git a/pyproject.toml b/pyproject.toml index dba65afe..fdf6139c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^71.1.0" pook = "^2.0.0" -orjson = "^3.10.6" +orjson = "^3.10.7" [build-system] requires = ["poetry-core>=1.0.0"] From 2ef5fdaaebb1491ad4f4f99c84bc95cabd2cef83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 09:48:06 -0700 Subject: [PATCH 403/448] Bump types-setuptools from 71.1.0.20240726 to 71.1.0.20240806 (#726) Bumps [types-setuptools](https://github.com/python/typeshed) from 71.1.0.20240726 to 71.1.0.20240806. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index fa02ba6b..7710783e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -811,13 +811,13 @@ files = [ [[package]] name = "types-setuptools" -version = "71.1.0.20240726" +version = "71.1.0.20240806" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-71.1.0.20240726.tar.gz", hash = "sha256:85ba28e9461bb1be86ebba4db0f1c2408f2b11115b1966334ea9dc464e29303e"}, - {file = "types_setuptools-71.1.0.20240726-py3-none-any.whl", hash = "sha256:a7775376f36e0ff09bcad236bf265777590a66b11623e48c20bfc30f1444ea36"}, + {file = "types-setuptools-71.1.0.20240806.tar.gz", hash = "sha256:ae5e7b4d643ab9e99fc00ac00041804118cabe72a56183c30d524fb064897ad6"}, + {file = "types_setuptools-71.1.0.20240806-py3-none-any.whl", hash = "sha256:3bd8dd02039be0bb79ad880d8893b8eefcb022fabbeeb61245c61b20c9ab1ed0"}, ] [[package]] From b40efbb23ee9b86bca4c50a513cc05af581d3958 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 05:59:37 -0700 Subject: [PATCH 404/448] Bump types-setuptools from 71.1.0.20240806 to 71.1.0.20240818 (#731) Bumps [types-setuptools](https://github.com/python/typeshed) from 71.1.0.20240806 to 71.1.0.20240818. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7710783e..02e4f5d8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -811,13 +811,13 @@ files = [ [[package]] name = "types-setuptools" -version = "71.1.0.20240806" +version = "71.1.0.20240818" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-71.1.0.20240806.tar.gz", hash = "sha256:ae5e7b4d643ab9e99fc00ac00041804118cabe72a56183c30d524fb064897ad6"}, - {file = "types_setuptools-71.1.0.20240806-py3-none-any.whl", hash = "sha256:3bd8dd02039be0bb79ad880d8893b8eefcb022fabbeeb61245c61b20c9ab1ed0"}, + {file = "types-setuptools-71.1.0.20240818.tar.gz", hash = "sha256:f62eaffaa39774462c65fbb49368c4dc1d91a90a28371cb14e1af090ff0e41e3"}, + {file = "types_setuptools-71.1.0.20240818-py3-none-any.whl", hash = "sha256:c4f95302f88369ac0ac46c67ddbfc70c6c4dbbb184d9fed356244217a2934025"}, ] [[package]] From 72d43180dff56b2a93948f8047704245aad8986a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:02:53 -0700 Subject: [PATCH 405/448] Bump mypy from 1.11.1 to 1.11.2 (#735) Bumps [mypy](https://github.com/python/mypy) from 1.11.1 to 1.11.2. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.11.1...v1.11.2) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index 02e4f5d8..2b4ec39c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,38 @@ files = [ [[package]] name = "mypy" -version = "1.11.1" +version = "1.11.2" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, - {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, - {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, - {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, - {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, - {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, - {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, - {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, - {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, - {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, - {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, - {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, - {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, - {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, - {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, - {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, - {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, - {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, - {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, + {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, + {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, + {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, + {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, + {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, + {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, + {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, + {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, + {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, + {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, + {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, + {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, + {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, + {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, + {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, + {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, + {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, ] [package.dependencies] From 7fe4e37107f5017552de5f3562396706b46a217c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 12:22:05 -0700 Subject: [PATCH 406/448] Bump types-setuptools from 71.1.0.20240818 to 73.0.0.20240822 (#733) Bumps [types-setuptools](https://github.com/python/typeshed) from 71.1.0.20240818 to 73.0.0.20240822. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2b4ec39c..80a4da1d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -811,13 +811,13 @@ files = [ [[package]] name = "types-setuptools" -version = "71.1.0.20240818" +version = "73.0.0.20240822" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-71.1.0.20240818.tar.gz", hash = "sha256:f62eaffaa39774462c65fbb49368c4dc1d91a90a28371cb14e1af090ff0e41e3"}, - {file = "types_setuptools-71.1.0.20240818-py3-none-any.whl", hash = "sha256:c4f95302f88369ac0ac46c67ddbfc70c6c4dbbb184d9fed356244217a2934025"}, + {file = "types-setuptools-73.0.0.20240822.tar.gz", hash = "sha256:3a060681098eb3fbc2fea0a86f7f6af6aa1ca71906039d88d891ea2cecdd4dbf"}, + {file = "types_setuptools-73.0.0.20240822-py3-none-any.whl", hash = "sha256:b9eba9b68546031317a0fa506d4973641d987d74f79e7dd8369ad4f7a93dea17"}, ] [[package]] @@ -969,4 +969,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "c6ddcb49a381dd1d80b6d99fbf334924b3cc748b3a00ab8234440f955b45963c" +content-hash = "178096d92862139d0e26ac6cba4bb8e92dcf546c0fc46784f2d4dffc0e76da8a" diff --git a/pyproject.toml b/pyproject.toml index fdf6139c..e715e604 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^71.1.0" +types-setuptools = "^73.0.0" pook = "^2.0.0" orjson = "^3.10.7" From 2931b2d045bce86f0d3c99cb7c4ad1e15a42a096 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:04:00 -0700 Subject: [PATCH 407/448] Add dividend and split ids (#736) * Add dividend and split ids * Added spec updates --- .polygon/rest.json | 22 +++++++++++++++++++--- polygon/rest/models/dividends.py | 1 + polygon/rest/models/splits.py | 1 + 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 94dd8286..4eb0f967 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -24328,7 +24328,7 @@ "operationId": "ListDividends", "parameters": [ { - "description": "Return the dividends that contain this ticker.", + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", "in": "query", "name": "ticker", "schema": { @@ -24708,6 +24708,7 @@ "dividend_type": "CD", "ex_dividend_date": "2021-11-05", "frequency": 4, + "id": "E8e3c4f794613e9205e2f178a36c53fcc57cdabb55e1988c87b33f9e52e221444", "pay_date": "2021-11-11", "record_date": "2021-11-08", "ticker": "AAPL" @@ -24718,6 +24719,7 @@ "dividend_type": "CD", "ex_dividend_date": "2021-08-06", "frequency": 4, + "id": "E6436c5475706773f03490acf0b63fdb90b2c72bfeed329a6eb4afc080acd80ae", "pay_date": "2021-08-12", "record_date": "2021-08-09", "ticker": "AAPL" @@ -24806,6 +24808,10 @@ ] } }, + "id": { + "description": "The unique identifier of the dividend.", + "type": "string" + }, "pay_date": { "description": "The date that the dividend is paid out.", "type": "string" @@ -24832,7 +24838,8 @@ "ex_dividend_date", "frequency", "cash_amount", - "dividend_type" + "dividend_type", + "id" ], "type": "object", "x-polygon-go-struct-tags": { @@ -25841,12 +25848,14 @@ "results": [ { "execution_date": "2020-08-31", + "id": "E36416cce743c3964c5da63e1ef1626c0aece30fb47302eea5a49c0055c04e8d0", "split_from": 1, "split_to": 4, "ticker": "AAPL" }, { "execution_date": "2005-02-28", + "id": "E90a77bdf742661741ed7c8fc086415f0457c2816c45899d73aaa88bdc8ff6025", "split_from": 1, "split_to": 2, "ticker": "AAPL" @@ -25870,6 +25879,10 @@ "description": "The execution date of the stock split. On this date the stock split was applied.", "type": "string" }, + "id": { + "description": "The unique identifier for this stock split.", + "type": "string" + }, "split_from": { "description": "The second number in the split ratio.\n\nFor example: In a 2-for-1 split, split_from would be 1.", "format": "float", @@ -25887,7 +25900,10 @@ }, "required": [ "split_from", - "split_to" + "split_to", + "id", + "ticker", + "execution_date" ], "type": "object" }, diff --git a/polygon/rest/models/dividends.py b/polygon/rest/models/dividends.py index ef9adff0..68db98a9 100644 --- a/polygon/rest/models/dividends.py +++ b/polygon/rest/models/dividends.py @@ -5,6 +5,7 @@ @modelclass class Dividend: "Dividend contains data for a historical cash dividend, including the ticker symbol, declaration date, ex-dividend date, record date, pay date, frequency, and amount." + id: Optional[int] = None cash_amount: Optional[float] = None currency: Optional[str] = None declaration_date: Optional[str] = None diff --git a/polygon/rest/models/splits.py b/polygon/rest/models/splits.py index 93244c50..5fb27129 100644 --- a/polygon/rest/models/splits.py +++ b/polygon/rest/models/splits.py @@ -5,6 +5,7 @@ @modelclass class Split: "Split contains data for a historical stock split, including the ticker symbol, the execution date, and the factors of the split ratio." + id: Optional[int] = None execution_date: Optional[str] = None split_from: Optional[int] = None split_to: Optional[int] = None From 362af904352f4118fcb1676cc44ac83058330fba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:11:19 -0700 Subject: [PATCH 408/448] Bump certifi from 2024.7.4 to 2024.8.30 (#739) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.7.4 to 2024.8.30. - [Commits](https://github.com/certifi/python-certifi/compare/2024.07.04...2024.08.30) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 80a4da1d..9302736c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -90,13 +90,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] From df58cad69b0e83ac9558e9ccd3232c6d00a18b83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:14:04 -0700 Subject: [PATCH 409/448] Bump types-setuptools from 73.0.0.20240822 to 74.0.0.20240831 (#740) Bumps [types-setuptools](https://github.com/python/typeshed) from 73.0.0.20240822 to 74.0.0.20240831. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9302736c..22d7e54e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -811,13 +811,13 @@ files = [ [[package]] name = "types-setuptools" -version = "73.0.0.20240822" +version = "74.0.0.20240831" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-73.0.0.20240822.tar.gz", hash = "sha256:3a060681098eb3fbc2fea0a86f7f6af6aa1ca71906039d88d891ea2cecdd4dbf"}, - {file = "types_setuptools-73.0.0.20240822-py3-none-any.whl", hash = "sha256:b9eba9b68546031317a0fa506d4973641d987d74f79e7dd8369ad4f7a93dea17"}, + {file = "types-setuptools-74.0.0.20240831.tar.gz", hash = "sha256:8b4a544cc91d42a019dc1e41fd397608b4bc7e20c7d7d5bc326589ffd9e8f8a1"}, + {file = "types_setuptools-74.0.0.20240831-py3-none-any.whl", hash = "sha256:4d9d18ea9214828d695a384633130009f5dee2681a157ee873d3680b62931590"}, ] [[package]] @@ -969,4 +969,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "178096d92862139d0e26ac6cba4bb8e92dcf546c0fc46784f2d4dffc0e76da8a" +content-hash = "a34da38dfba3acda825e45480cb029afcb8147842b1f2a3e270f61155b36b84f" diff --git a/pyproject.toml b/pyproject.toml index e715e604..93cf0e65 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^73.0.0" +types-setuptools = "^74.0.0" pook = "^2.0.0" orjson = "^3.10.7" From 95ef6e8654373f307aa3104abf604ae1716fd50e Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 5 Sep 2024 08:31:29 -0700 Subject: [PATCH 410/448] Updated ws spec to latest (#741) --- .polygon/websocket.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.polygon/websocket.json b/.polygon/websocket.json index 8d7d539b..f565e7d1 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -269,7 +269,7 @@ }, "c": { "type": "array", - "description": "The trade conditions. See Conditions and Indicators\" for Polygon.io's trade conditions glossary.\n", + "description": "The trade conditions. See Conditions and Indicators for Polygon.io's trade conditions glossary.\n", "items": { "type": "integer", "description": "The ID of the condition." @@ -3964,7 +3964,7 @@ }, "c": { "type": "array", - "description": "The trade conditions. See Conditions and Indicators\" for Polygon.io's trade conditions glossary.\n", + "description": "The trade conditions. See Conditions and Indicators for Polygon.io's trade conditions glossary.\n", "items": { "type": "integer", "description": "The ID of the condition." From 293e2a43485c40f3761ce63f546c13d83a738f8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:17:13 -0700 Subject: [PATCH 411/448] Bump types-setuptools from 74.0.0.20240831 to 74.1.0.20240907 (#744) Bumps [types-setuptools](https://github.com/python/typeshed) from 74.0.0.20240831 to 74.1.0.20240907. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 22d7e54e..3f759304 100644 --- a/poetry.lock +++ b/poetry.lock @@ -811,13 +811,13 @@ files = [ [[package]] name = "types-setuptools" -version = "74.0.0.20240831" +version = "74.1.0.20240907" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-74.0.0.20240831.tar.gz", hash = "sha256:8b4a544cc91d42a019dc1e41fd397608b4bc7e20c7d7d5bc326589ffd9e8f8a1"}, - {file = "types_setuptools-74.0.0.20240831-py3-none-any.whl", hash = "sha256:4d9d18ea9214828d695a384633130009f5dee2681a157ee873d3680b62931590"}, + {file = "types-setuptools-74.1.0.20240907.tar.gz", hash = "sha256:0abdb082552ca966c1e5fc244e4853adc62971f6cd724fb1d8a3713b580e5a65"}, + {file = "types_setuptools-74.1.0.20240907-py3-none-any.whl", hash = "sha256:15b38c8e63ca34f42f6063ff4b1dd662ea20086166d5ad6a102e670a52574120"}, ] [[package]] @@ -969,4 +969,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "a34da38dfba3acda825e45480cb029afcb8147842b1f2a3e270f61155b36b84f" +content-hash = "9558ba75da8bc1c8f294ecb05556f1de044b126c01f638b2a0bc0e2ab47cfc1d" diff --git a/pyproject.toml b/pyproject.toml index 93cf0e65..30c395b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^2.0.0" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^74.0.0" +types-setuptools = "^74.1.0" pook = "^2.0.0" orjson = "^3.10.7" From d9a3e393fa085cdb491143a4271d1869a90fe08f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 09:48:14 -0700 Subject: [PATCH 412/448] Bump urllib3 from 2.2.2 to 2.2.3 (#747) Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.2 to 2.2.3. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3) --- updated-dependencies: - dependency-name: urllib3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3f759304..a38a516a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -844,13 +844,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] From 39b3d5475832a932aa6f0ba9a369a22f38fbf138 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:14:48 -0700 Subject: [PATCH 413/448] Bump websockets from 12.0 to 13.1 (#751) Bumps [websockets](https://github.com/python-websockets/websockets) from 12.0 to 13.1. - [Release notes](https://github.com/python-websockets/websockets/releases) - [Commits](https://github.com/python-websockets/websockets/compare/12.0...13.1) --- updated-dependencies: - dependency-name: websockets dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 162 +++++++++++++++++++++++++++---------------------- pyproject.toml | 2 +- 2 files changed, 89 insertions(+), 75 deletions(-) diff --git a/poetry.lock b/poetry.lock index a38a516a..8414eda6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -861,83 +861,97 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "websockets" -version = "12.0" +version = "13.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.8" files = [ - {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, - {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, - {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, - {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, - {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, - {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, - {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, - {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, - {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, - {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, - {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, - {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, - {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, - {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, - {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, - {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, - {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, - {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, - {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, - {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, - {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, - {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, - {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, - {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, - {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, + {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, + {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, + {file = "websockets-13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f779498eeec470295a2b1a5d97aa1bc9814ecd25e1eb637bd9d1c73a327387f6"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676df3fe46956fbb0437d8800cd5f2b6d41143b6e7e842e60554398432cf29b"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7affedeb43a70351bb811dadf49493c9cfd1ed94c9c70095fd177e9cc1541fa"}, + {file = "websockets-13.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1971e62d2caa443e57588e1d82d15f663b29ff9dfe7446d9964a4b6f12c1e700"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5f2e75431f8dc4a47f31565a6e1355fb4f2ecaa99d6b89737527ea917066e26c"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58cf7e75dbf7e566088b07e36ea2e3e2bd5676e22216e4cad108d4df4a7402a0"}, + {file = "websockets-13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c90d6dec6be2c7d03378a574de87af9b1efea77d0c52a8301dd831ece938452f"}, + {file = "websockets-13.1-cp310-cp310-win32.whl", hash = "sha256:730f42125ccb14602f455155084f978bd9e8e57e89b569b4d7f0f0c17a448ffe"}, + {file = "websockets-13.1-cp310-cp310-win_amd64.whl", hash = "sha256:5993260f483d05a9737073be197371940c01b257cc45ae3f1d5d7adb371b266a"}, + {file = "websockets-13.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:61fc0dfcda609cda0fc9fe7977694c0c59cf9d749fbb17f4e9483929e3c48a19"}, + {file = "websockets-13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ceec59f59d092c5007e815def4ebb80c2de330e9588e101cf8bd94c143ec78a5"}, + {file = "websockets-13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1dca61c6db1166c48b95198c0b7d9c990b30c756fc2923cc66f68d17dc558fd"}, + {file = "websockets-13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308e20f22c2c77f3f39caca508e765f8725020b84aa963474e18c59accbf4c02"}, + {file = "websockets-13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d516c325e6540e8a57b94abefc3459d7dab8ce52ac75c96cad5549e187e3a7"}, + {file = "websockets-13.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c6e35319b46b99e168eb98472d6c7d8634ee37750d7693656dc766395df096"}, + {file = "websockets-13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f9fee94ebafbc3117c30be1844ed01a3b177bb6e39088bc6b2fa1dc15572084"}, + {file = "websockets-13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7c1e90228c2f5cdde263253fa5db63e6653f1c00e7ec64108065a0b9713fa1b3"}, + {file = "websockets-13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6548f29b0e401eea2b967b2fdc1c7c7b5ebb3eeb470ed23a54cd45ef078a0db9"}, + {file = "websockets-13.1-cp311-cp311-win32.whl", hash = "sha256:c11d4d16e133f6df8916cc5b7e3e96ee4c44c936717d684a94f48f82edb7c92f"}, + {file = "websockets-13.1-cp311-cp311-win_amd64.whl", hash = "sha256:d04f13a1d75cb2b8382bdc16ae6fa58c97337253826dfe136195b7f89f661557"}, + {file = "websockets-13.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9d75baf00138f80b48f1eac72ad1535aac0b6461265a0bcad391fc5aba875cfc"}, + {file = "websockets-13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9b6f347deb3dcfbfde1c20baa21c2ac0751afaa73e64e5b693bb2b848efeaa49"}, + {file = "websockets-13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de58647e3f9c42f13f90ac7e5f58900c80a39019848c5547bc691693098ae1bd"}, + {file = "websockets-13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1b54689e38d1279a51d11e3467dd2f3a50f5f2e879012ce8f2d6943f00e83f0"}, + {file = "websockets-13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf1781ef73c073e6b0f90af841aaf98501f975d306bbf6221683dd594ccc52b6"}, + {file = "websockets-13.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d23b88b9388ed85c6faf0e74d8dec4f4d3baf3ecf20a65a47b836d56260d4b9"}, + {file = "websockets-13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3c78383585f47ccb0fcf186dcb8a43f5438bd7d8f47d69e0b56f71bf431a0a68"}, + {file = "websockets-13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d6d300f8ec35c24025ceb9b9019ae9040c1ab2f01cddc2bcc0b518af31c75c14"}, + {file = "websockets-13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a9dcaf8b0cc72a392760bb8755922c03e17a5a54e08cca58e8b74f6902b433cf"}, + {file = "websockets-13.1-cp312-cp312-win32.whl", hash = "sha256:2f85cf4f2a1ba8f602298a853cec8526c2ca42a9a4b947ec236eaedb8f2dc80c"}, + {file = "websockets-13.1-cp312-cp312-win_amd64.whl", hash = "sha256:38377f8b0cdeee97c552d20cf1865695fcd56aba155ad1b4ca8779a5b6ef4ac3"}, + {file = "websockets-13.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a9ab1e71d3d2e54a0aa646ab6d4eebfaa5f416fe78dfe4da2839525dc5d765c6"}, + {file = "websockets-13.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b9d7439d7fab4dce00570bb906875734df13d9faa4b48e261c440a5fec6d9708"}, + {file = "websockets-13.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:327b74e915cf13c5931334c61e1a41040e365d380f812513a255aa804b183418"}, + {file = "websockets-13.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:325b1ccdbf5e5725fdcb1b0e9ad4d2545056479d0eee392c291c1bf76206435a"}, + {file = "websockets-13.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:346bee67a65f189e0e33f520f253d5147ab76ae42493804319b5716e46dddf0f"}, + {file = "websockets-13.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91a0fa841646320ec0d3accdff5b757b06e2e5c86ba32af2e0815c96c7a603c5"}, + {file = "websockets-13.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:18503d2c5f3943e93819238bf20df71982d193f73dcecd26c94514f417f6b135"}, + {file = "websockets-13.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9cd1af7e18e5221d2878378fbc287a14cd527fdd5939ed56a18df8a31136bb2"}, + {file = "websockets-13.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:70c5be9f416aa72aab7a2a76c90ae0a4fe2755c1816c153c1a2bcc3333ce4ce6"}, + {file = "websockets-13.1-cp313-cp313-win32.whl", hash = "sha256:624459daabeb310d3815b276c1adef475b3e6804abaf2d9d2c061c319f7f187d"}, + {file = "websockets-13.1-cp313-cp313-win_amd64.whl", hash = "sha256:c518e84bb59c2baae725accd355c8dc517b4a3ed8db88b4bc93c78dae2974bf2"}, + {file = "websockets-13.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c7934fd0e920e70468e676fe7f1b7261c1efa0d6c037c6722278ca0228ad9d0d"}, + {file = "websockets-13.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:149e622dc48c10ccc3d2760e5f36753db9cacf3ad7bc7bbbfd7d9c819e286f23"}, + {file = "websockets-13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a569eb1b05d72f9bce2ebd28a1ce2054311b66677fcd46cf36204ad23acead8c"}, + {file = "websockets-13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95df24ca1e1bd93bbca51d94dd049a984609687cb2fb08a7f2c56ac84e9816ea"}, + {file = "websockets-13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8dbb1bf0c0a4ae8b40bdc9be7f644e2f3fb4e8a9aca7145bfa510d4a374eeb7"}, + {file = "websockets-13.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035233b7531fb92a76beefcbf479504db8c72eb3bff41da55aecce3a0f729e54"}, + {file = "websockets-13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e4450fc83a3df53dec45922b576e91e94f5578d06436871dce3a6be38e40f5db"}, + {file = "websockets-13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:463e1c6ec853202dd3657f156123d6b4dad0c546ea2e2e38be2b3f7c5b8e7295"}, + {file = "websockets-13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6d6855bbe70119872c05107e38fbc7f96b1d8cb047d95c2c50869a46c65a8e96"}, + {file = "websockets-13.1-cp38-cp38-win32.whl", hash = "sha256:204e5107f43095012b00f1451374693267adbb832d29966a01ecc4ce1db26faf"}, + {file = "websockets-13.1-cp38-cp38-win_amd64.whl", hash = "sha256:485307243237328c022bc908b90e4457d0daa8b5cf4b3723fd3c4a8012fce4c6"}, + {file = "websockets-13.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b37c184f8b976f0c0a231a5f3d6efe10807d41ccbe4488df8c74174805eea7d"}, + {file = "websockets-13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:163e7277e1a0bd9fb3c8842a71661ad19c6aa7bb3d6678dc7f89b17fbcc4aeb7"}, + {file = "websockets-13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b889dbd1342820cc210ba44307cf75ae5f2f96226c0038094455a96e64fb07a"}, + {file = "websockets-13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:586a356928692c1fed0eca68b4d1c2cbbd1ca2acf2ac7e7ebd3b9052582deefa"}, + {file = "websockets-13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7bd6abf1e070a6b72bfeb71049d6ad286852e285f146682bf30d0296f5fbadfa"}, + {file = "websockets-13.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2aad13a200e5934f5a6767492fb07151e1de1d6079c003ab31e1823733ae79"}, + {file = "websockets-13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:df01aea34b6e9e33572c35cd16bae5a47785e7d5c8cb2b54b2acdb9678315a17"}, + {file = "websockets-13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e54affdeb21026329fb0744ad187cf812f7d3c2aa702a5edb562b325191fcab6"}, + {file = "websockets-13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9ef8aa8bdbac47f4968a5d66462a2a0935d044bf35c0e5a8af152d58516dbeb5"}, + {file = "websockets-13.1-cp39-cp39-win32.whl", hash = "sha256:deeb929efe52bed518f6eb2ddc00cc496366a14c726005726ad62c2dd9017a3c"}, + {file = "websockets-13.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c65ffa900e7cc958cd088b9a9157a8141c991f8c53d11087e6fb7277a03f81d"}, + {file = "websockets-13.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5dd6da9bec02735931fccec99d97c29f47cc61f644264eb995ad6c0c27667238"}, + {file = "websockets-13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:2510c09d8e8df777177ee3d40cd35450dc169a81e747455cc4197e63f7e7bfe5"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1c3cf67185543730888b20682fb186fc8d0fa6f07ccc3ef4390831ab4b388d9"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcc03c8b72267e97b49149e4863d57c2d77f13fae12066622dc78fe322490fe6"}, + {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:004280a140f220c812e65f36944a9ca92d766b6cc4560be652a0a3883a79ed8a"}, + {file = "websockets-13.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e2620453c075abeb0daa949a292e19f56de518988e079c36478bacf9546ced23"}, + {file = "websockets-13.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9156c45750b37337f7b0b00e6248991a047be4aa44554c9886fe6bdd605aab3b"}, + {file = "websockets-13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80c421e07973a89fbdd93e6f2003c17d20b69010458d3a8e37fb47874bd67d51"}, + {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82d0ba76371769d6a4e56f7e83bb8e81846d17a6190971e38b5de108bde9b0d7"}, + {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9875a0143f07d74dc5e1ded1c4581f0d9f7ab86c78994e2ed9e95050073c94d"}, + {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11e38ad8922c7961447f35c7b17bffa15de4d17c70abd07bfbe12d6faa3e027"}, + {file = "websockets-13.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4059f790b6ae8768471cddb65d3c4fe4792b0ab48e154c9f0a04cefaabcd5978"}, + {file = "websockets-13.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:25c35bf84bf7c7369d247f0b8cfa157f989862c49104c5cf85cb5436a641d93e"}, + {file = "websockets-13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:83f91d8a9bb404b8c2c41a707ac7f7f75b9442a0a876df295de27251a856ad09"}, + {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a43cfdcddd07f4ca2b1afb459824dd3c6d53a51410636a2c7fc97b9a8cf4842"}, + {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a2ef1381632a2f0cb4efeff34efa97901c9fbc118e01951ad7cfc10601a9bb"}, + {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bf774c754c35dbb487360b12c5727adab887f1622b8aed5755880a21c4a20"}, + {file = "websockets-13.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:95858ca14a9f6fa8413d29e0a585b31b278388aa775b8a81fa24830123874678"}, + {file = "websockets-13.1-py3-none-any.whl", hash = "sha256:a9a396a6ad26130cdae92ae10c36af09d9bfe6cafe69670fd3b6da9b07b4044f"}, + {file = "websockets-13.1.tar.gz", hash = "sha256:a3b3366087c1bc0a2795111edcadddb8b3b59509d5db5d7ea3fdd69f954a8878"}, ] [[package]] @@ -969,4 +983,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "9558ba75da8bc1c8f294ecb05556f1de044b126c01f638b2a0bc0e2ab47cfc1d" +content-hash = "16ce959b3125225677cc5534a9dd13ef463ff413838e4712f6c8657708911961" diff --git a/pyproject.toml b/pyproject.toml index 30c395b6..183611be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ packages = [ [tool.poetry.dependencies] python = "^3.8" urllib3 = ">=1.26.9,<3.0.0" -websockets = ">=10.3,<13.0" +websockets = ">=10.3,<14.0" certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] From 4ec616fba2dd61cfb5a8b5fde5b907d3edf77882 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:19:24 -0700 Subject: [PATCH 414/448] Bump sphinx-rtd-theme from 2.0.0 to 3.0.1 (#759) Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 2.0.0 to 3.0.1. - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/2.0.0...3.0.1) --- updated-dependencies: - dependency-name: sphinx-rtd-theme dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 16 ++++++++-------- pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8414eda6..1b7841cc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -667,22 +667,22 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.4.2)", "diff-cover (>=8.0.3)", [[package]] name = "sphinx-rtd-theme" -version = "2.0.0" +version = "3.0.1" description = "Read the Docs theme for Sphinx" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586"}, - {file = "sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"}, + {file = "sphinx_rtd_theme-3.0.1-py2.py3-none-any.whl", hash = "sha256:921c0ece75e90633ee876bd7b148cfaad136b481907ad154ac3669b6fc957916"}, + {file = "sphinx_rtd_theme-3.0.1.tar.gz", hash = "sha256:a4c5745d1b06dfcb80b7704fe532eb765b44065a8fad9851e4258c8804140703"}, ] [package.dependencies] -docutils = "<0.21" -sphinx = ">=5,<8" +docutils = ">0.18,<0.22" +sphinx = ">=6,<9" sphinxcontrib-jquery = ">=4,<5" [package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] +dev = ["bump2version", "transifex-client", "twine", "wheel"] [[package]] name = "sphinxcontrib-applehelp" @@ -983,4 +983,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "16ce959b3125225677cc5534a9dd13ef463ff413838e4712f6c8657708911961" +content-hash = "dade83f0be3416b5ec775808a02e09b23f46dddf7dadf735c8ce2ac423f397f7" diff --git a/pyproject.toml b/pyproject.toml index 183611be..4b388065 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ black = "^24.8.0" mypy = "^1.11" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" -sphinx-rtd-theme = "^2.0.0" +sphinx-rtd-theme = "^3.0.1" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" From 435f785b52f4d20592d613fab230c1e90fd6e308 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 15:33:31 -0700 Subject: [PATCH 415/448] Bump types-setuptools from 74.1.0.20240907 to 75.1.0.20240917 (#752) Bumps [types-setuptools](https://github.com/python/typeshed) from 74.1.0.20240907 to 75.1.0.20240917. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1b7841cc..6bb7182c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -811,13 +811,13 @@ files = [ [[package]] name = "types-setuptools" -version = "74.1.0.20240907" +version = "75.1.0.20240917" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-74.1.0.20240907.tar.gz", hash = "sha256:0abdb082552ca966c1e5fc244e4853adc62971f6cd724fb1d8a3713b580e5a65"}, - {file = "types_setuptools-74.1.0.20240907-py3-none-any.whl", hash = "sha256:15b38c8e63ca34f42f6063ff4b1dd662ea20086166d5ad6a102e670a52574120"}, + {file = "types-setuptools-75.1.0.20240917.tar.gz", hash = "sha256:12f12a165e7ed383f31def705e5c0fa1c26215dd466b0af34bd042f7d5331f55"}, + {file = "types_setuptools-75.1.0.20240917-py3-none-any.whl", hash = "sha256:06f78307e68d1bbde6938072c57b81cf8a99bc84bd6dc7e4c5014730b097dc0c"}, ] [[package]] @@ -983,4 +983,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "dade83f0be3416b5ec775808a02e09b23f46dddf7dadf735c8ce2ac423f397f7" +content-hash = "8ba6db5af50543ec90432b2ad8f573275a95135148d7b520694496ed51eb3535" diff --git a/pyproject.toml b/pyproject.toml index 4b388065..b0b64686 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^3.0.1" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^74.1.0" +types-setuptools = "^75.1.0" pook = "^2.0.0" orjson = "^3.10.7" From 850c3043b2abea04ba81c575fcca105035abc916 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 20:32:33 -0700 Subject: [PATCH 416/448] Bump mypy from 1.11.2 to 1.12.1 (#770) Bumps [mypy](https://github.com/python/mypy) from 1.11.2 to 1.12.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.11.2...v1.12.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 63 +++++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6bb7182c..a7c4353d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,38 +312,43 @@ files = [ [[package]] name = "mypy" -version = "1.11.2" +version = "1.12.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, + {file = "mypy-1.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801"}, + {file = "mypy-1.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5"}, + {file = "mypy-1.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1"}, + {file = "mypy-1.12.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627"}, + {file = "mypy-1.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20"}, + {file = "mypy-1.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735"}, + {file = "mypy-1.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66"}, + {file = "mypy-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6"}, + {file = "mypy-1.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931"}, + {file = "mypy-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811"}, + {file = "mypy-1.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f"}, + {file = "mypy-1.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0"}, + {file = "mypy-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042"}, + {file = "mypy-1.12.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179"}, + {file = "mypy-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a"}, + {file = "mypy-1.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc"}, + {file = "mypy-1.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635"}, + {file = "mypy-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81"}, + {file = "mypy-1.12.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4"}, + {file = "mypy-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02"}, + {file = "mypy-1.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8"}, + {file = "mypy-1.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a"}, + {file = "mypy-1.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d"}, + {file = "mypy-1.12.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004"}, + {file = "mypy-1.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe"}, + {file = "mypy-1.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19"}, + {file = "mypy-1.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e"}, + {file = "mypy-1.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d"}, + {file = "mypy-1.12.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd"}, + {file = "mypy-1.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810"}, + {file = "mypy-1.12.1-py3-none-any.whl", hash = "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e"}, + {file = "mypy-1.12.1.tar.gz", hash = "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"}, ] [package.dependencies] @@ -983,4 +988,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "8ba6db5af50543ec90432b2ad8f573275a95135148d7b520694496ed51eb3535" +content-hash = "21290a9d5e817ae5903571bd5e7cb6bf580ce43e73de9080e93be06af9887999" diff --git a/pyproject.toml b/pyproject.toml index b0b64686..187d93e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] black = "^24.8.0" -mypy = "^1.11" +mypy = "^1.12" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^3.0.1" From 49221494705cf8ffd682ce43f3afc0914c87dbbc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 21:03:28 -0700 Subject: [PATCH 417/448] Bump types-setuptools from 75.1.0.20240917 to 75.2.0.20241019 (#769) Bumps [types-setuptools](https://github.com/python/typeshed) from 75.1.0.20240917 to 75.2.0.20241019. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index a7c4353d..e15b2b06 100644 --- a/poetry.lock +++ b/poetry.lock @@ -816,13 +816,13 @@ files = [ [[package]] name = "types-setuptools" -version = "75.1.0.20240917" +version = "75.2.0.20241019" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-75.1.0.20240917.tar.gz", hash = "sha256:12f12a165e7ed383f31def705e5c0fa1c26215dd466b0af34bd042f7d5331f55"}, - {file = "types_setuptools-75.1.0.20240917-py3-none-any.whl", hash = "sha256:06f78307e68d1bbde6938072c57b81cf8a99bc84bd6dc7e4c5014730b097dc0c"}, + {file = "types-setuptools-75.2.0.20241019.tar.gz", hash = "sha256:86ea31b5f6df2c6b8f2dc8ae3f72b213607f62549b6fa2ed5866e5299f968694"}, + {file = "types_setuptools-75.2.0.20241019-py3-none-any.whl", hash = "sha256:2e48ff3acd4919471e80d5e3f049cce5c177e108d5d36d2d4cee3fa4d4104258"}, ] [[package]] @@ -988,4 +988,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "21290a9d5e817ae5903571bd5e7cb6bf580ce43e73de9080e93be06af9887999" +content-hash = "1280173331a0e498864db3e9f55fda22bd8254c44bf06487e34096d554341396" diff --git a/pyproject.toml b/pyproject.toml index 187d93e2..1ffcf71d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^3.0.1" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^75.1.0" +types-setuptools = "^75.2.0" pook = "^2.0.0" orjson = "^3.10.7" From f0b59296e2cfa723b07a3e987ebc25f1cbfcac5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 21:09:55 -0700 Subject: [PATCH 418/448] Bump orjson from 3.10.7 to 3.10.9 (#768) Bumps [orjson](https://github.com/ijl/orjson) from 3.10.7 to 3.10.9. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.10.7...3.10.9) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 118 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/poetry.lock b/poetry.lock index e15b2b06..14d1093b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -389,68 +389,68 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.7" +version = "3.10.9" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, - {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, - {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, - {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, - {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, - {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, - {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, - {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, - {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, - {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, - {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, - {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, - {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, - {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, - {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, - {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, - {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, - {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, - {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, - {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, - {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, - {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, - {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, - {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, - {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, - {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, - {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, - {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, - {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, - {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, - {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, + {file = "orjson-3.10.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a377186a11b48c55969e34f0aa414c2826a234f212d6f2b312ba512e3cdb2c6f"}, + {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bf37bf0ca538065c34efe1803378b2dadd7e05b06610a086c2857f15ee59e12"}, + {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d9d83a91168aa48309acba804e393b7d9216b66f15e38f339b9fbb00db8986d"}, + {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0014038a17a1fe273da0a5489787677ef5a64566ab383ad6d929e44ed5683f4"}, + {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6ae1b1733e4528e45675ed09a732b6ac37d716bce2facaf467f84ce774adecd"}, + {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe91c2259c4a859356b6db1c6e649b40577492f66d483da8b8af6da0f87c00e3"}, + {file = "orjson-3.10.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a04f912c32463386ba117591c99a3d9e40b3b69bed9c5123d89dff06f0f5a4b0"}, + {file = "orjson-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae82ca347829ca47431767b079f96bb977f592189250ccdede676339a80c8982"}, + {file = "orjson-3.10.9-cp310-none-win32.whl", hash = "sha256:fd5083906825d7f5d23089425ce5424d783d6294020bcabb8518a3e1f97833e5"}, + {file = "orjson-3.10.9-cp310-none-win_amd64.whl", hash = "sha256:e9ff9521b5be0340c8e686bcfe2619777fd7583f71e7b494601cc91ad3919d2e"}, + {file = "orjson-3.10.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f3bd9df47385b8fabb3b2ee1e83f9960b8accc1905be971a1c257f16c32b491e"}, + {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4948961b6bce1e2086b2cf0b56cc454cdab589d40c7f85be71fb5a5556c51d3"}, + {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a9fc7a6cf2b229ddc323e136df13b3fb4466c50d84ed600cd0898223dd2fea3"}, + {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2314846e1029a2d2b899140f350eaaf3a73281df43ba84ac44d94ca861b5b269"}, + {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f52d993504827503411df2d60e60acf52885561458d6273f99ecd172f31c4352"}, + {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e29bbf08d907756c145a3a3a1f7ce2f11f15e3edbd3342842589d6030981b76f"}, + {file = "orjson-3.10.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ae82992c00b480c3cc7dac6739324554be8c5d8e858a90044928506a3333ef4"}, + {file = "orjson-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6fdf8d32b6d94019dc15163542d345e9ce4c4661f56b318608aa3088a1a3a23b"}, + {file = "orjson-3.10.9-cp311-none-win32.whl", hash = "sha256:01f5fef452b4d7615f2e94153479370a4b59e0c964efb32dd902978f807a45cd"}, + {file = "orjson-3.10.9-cp311-none-win_amd64.whl", hash = "sha256:95361c4197c7ce9afdf56255de6f4e2474c39d16a277cce31d1b99a2520486d8"}, + {file = "orjson-3.10.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:43ad5560db54331c007dc38be5ba7706cb72974a29ae8227019d89305d750a6f"}, + {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1471c3274b1a4a9b8f4b9ed6effaea9ad885796373797515c44b365b375c256d"}, + {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:41d8cac575acd15918903d74cfaabb5dbe57b357b93341332f647d1013928dcc"}, + {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2920c8754f1aedc98bd357ec172af18ce48f5f1017a92244c85fe41d16d3c6e0"}, + {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7fa3ff6a0d9d15a0d0d2254cca16cd919156a18423654ce5574591392fe9914"}, + {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e91b90c0c26bd79593967c1adef421bcff88c9e723d49c93bb7ad8af80bc6b"}, + {file = "orjson-3.10.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f11949024f785ace1a516db32fa6255f6227226b2c988abf66f5aee61d43d8f7"}, + {file = "orjson-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:060e020d85d0ec145bc1b536b1fd9c10a0519c91991ead9724d6f759ebe26b9a"}, + {file = "orjson-3.10.9-cp312-none-win32.whl", hash = "sha256:71f73439999fe662843da3607cdf6e75b1551c330f487e5801d463d969091c63"}, + {file = "orjson-3.10.9-cp312-none-win_amd64.whl", hash = "sha256:12e2efe81356b8448f1cd130f8d75d3718de583112d71f2e2f8baa81bd835bb9"}, + {file = "orjson-3.10.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0ab6e3ad10e964392f0e838751bcce2ef9c8fa8be7deddffff83088e5791566d"}, + {file = "orjson-3.10.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68ef65223baab00f469c8698f771ab3e6ccf6af2a987e77de5b566b4ec651150"}, + {file = "orjson-3.10.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6f130848205fea90a2cb9fa2b11cafff9a9f31f4efad225800bc8b9e4a702f24"}, + {file = "orjson-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2ea7a98f3295ed8adb6730a5788cc78dafea28300d19932a1d2143457f7db802"}, + {file = "orjson-3.10.9-cp313-none-win32.whl", hash = "sha256:bdce39f96149a74fddeb2674c54f1da5e57724d32952eb6df2ac719b66d453cc"}, + {file = "orjson-3.10.9-cp313-none-win_amd64.whl", hash = "sha256:d11383701d4b58e795039b662ada46987744293d57bfa2719e7379b8d67bc796"}, + {file = "orjson-3.10.9-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1c3a1e845916a3739ab4162bb48dee66e0e727a19faf397176a7db0d9826cc3c"}, + {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:063ca59d93d93d1387f0c4bb766c6d4f5b0e423fe7c366d0bd4401a56d1669d1"}, + {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:938b7fcd79cf06fe348fb24b6163fbaa2fdc9fbed8b1f06318f24467f1487e63"}, + {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc32a9e43c7693011ccde6f8eff8cba75ca0d2a55de11092faa4a716101e67f5"}, + {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b3069b7e2f57f3eef2282029b9c2ba21f08a55f1018e483663a3356f046af4c"}, + {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4289b5d1f88fd05dcafdd7a1f3b17bb722e77712b7618f98e86bdda560e0a1a"}, + {file = "orjson-3.10.9-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:74f5a7a7f282d326be71b722b0c350da7af6f5f15b9378da177e0e4a09bd91a3"}, + {file = "orjson-3.10.9-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:80e0c013e50cf7198319d8137931684eb9f32daa067e8276d9dbdd4010bb4add"}, + {file = "orjson-3.10.9-cp38-none-win32.whl", hash = "sha256:9d989152df8f60a76867354e0e08d896292ab9fb96a7ef89a5b3838de174522c"}, + {file = "orjson-3.10.9-cp38-none-win_amd64.whl", hash = "sha256:485358fe9892d6bfd88e5885b66bf88496e1842c8f35f61682ff9928b12a6cf0"}, + {file = "orjson-3.10.9-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ca54e6f320e33c8a6e471c424ee16576361d905c15d69e134c2906d3fcb31795"}, + {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9a9eb03a29c9b30b6c8bb35e5fa20d96589a76e0042005be59b7c3af10a7e43"}, + {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:731e8859fc99b398c286320726906404091141e9223dd5e9e6917f7e32e1cc68"}, + {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75b061c11f5aab979a95927a76394b4a85e3e4d63d0a2a16b56a4f7c6503afab"}, + {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b61b08f6397f004570fd6a840f4a58946b63b4c7029408cdedb45fe85c7d17f7"}, + {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4f5e0360b7f0aba91dafe12469108109a0e8973956d4a9865ca262a6881406"}, + {file = "orjson-3.10.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e403429e2947a059545e305d97e4b0eb90d3bb44b396d6f327d7ae2018391e13"}, + {file = "orjson-3.10.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0e492b93e122264c2dc78700859122631a4715bda88fabf57d9226954cfe7ec5"}, + {file = "orjson-3.10.9-cp39-none-win32.whl", hash = "sha256:bfba9605e85bfd19b83a21c2c25c2bed2000d5f097f3fa3ad5b5f8a7263a3148"}, + {file = "orjson-3.10.9-cp39-none-win_amd64.whl", hash = "sha256:77d277fa138d4bf145e8b24042004891c188c52ac8492724a183f42b0031cf0c"}, + {file = "orjson-3.10.9.tar.gz", hash = "sha256:c378074e0c46035dc66e57006993233ec66bf8487d501bab41649b4b7289ed4d"}, ] [[package]] @@ -988,4 +988,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "1280173331a0e498864db3e9f55fda22bd8254c44bf06487e34096d554341396" +content-hash = "c16a9ab276c6bf2483af108f69d559f48eeb2dd9480c2991813c774f3717f696" diff --git a/pyproject.toml b/pyproject.toml index 1ffcf71d..ebdc10c0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^75.2.0" pook = "^2.0.0" -orjson = "^3.10.7" +orjson = "^3.10.9" [build-system] requires = ["poetry-core>=1.0.0"] From 36250182f930a44db0cb7d5bd62f4e2adda88619 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 21:13:27 -0700 Subject: [PATCH 419/448] Bump pook from 2.0.0 to 2.0.1 (#765) Bumps [pook](https://github.com/h2non/pook) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/h2non/pook/releases) - [Changelog](https://github.com/h2non/pook/blob/master/History.rst) - [Commits](https://github.com/h2non/pook/compare/v2.0.0...v2.0.1) --- updated-dependencies: - dependency-name: pook dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 14d1093b..6c9cf217 100644 --- a/poetry.lock +++ b/poetry.lock @@ -503,13 +503,13 @@ test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock [[package]] name = "pook" -version = "2.0.0" +version = "2.0.1" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = ">=3.8" files = [ - {file = "pook-2.0.0-py3-none-any.whl", hash = "sha256:b3993cf00b8335f19b407fca39febd048c97749eb7c06eaddd9fbaff3b0a1ac3"}, - {file = "pook-2.0.0.tar.gz", hash = "sha256:b106ebc088417fa7b68d1f6ee21a9720fd171ea96d4b86ef308eaffac1e5c4f8"}, + {file = "pook-2.0.1-py3-none-any.whl", hash = "sha256:30d73c95e0520f45c1e3889f3bf486e990b6f04b4915aa9daf86cf0d8136b2e1"}, + {file = "pook-2.0.1.tar.gz", hash = "sha256:e04c0e698f256438b4dfbf3ab1b27559f0ec25e42176823167f321f4e8b9c9e4"}, ] [package.dependencies] @@ -988,4 +988,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "c16a9ab276c6bf2483af108f69d559f48eeb2dd9480c2991813c774f3717f696" +content-hash = "bc73d9f5843ac26c73d8a9f755037f1deac6b9d5d84e9d111492bea26841e747" diff --git a/pyproject.toml b/pyproject.toml index ebdc10c0..168dc906 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ sphinx-rtd-theme = "^3.0.1" sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^75.2.0" -pook = "^2.0.0" +pook = "^2.0.1" orjson = "^3.10.9" [build-system] From 53808f8a5b81841447867b28856ea0a75573b30b Mon Sep 17 00:00:00 2001 From: Hunter <6395201+HunterL@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:26:17 -0400 Subject: [PATCH 420/448] add regular_trading_change and regular_trading_change_percent to the universal snapshot session response (#771) --- polygon/rest/models/snapshot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index ceb5f7f8..3d38abe2 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -308,6 +308,8 @@ class UniversalSnapshotSession: change_percent: Optional[float] = None early_trading_change: Optional[float] = None early_trading_change_percent: Optional[float] = None + regular_trading_change: Optional[float] = None + regular_trading_change_percent: Optional[float] = None late_trading_change: Optional[float] = None late_trading_change_percent: Optional[float] = None open: Optional[float] = None From 8034ba4d920df82bd838147e41404f6c45b5b47c Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:47:36 -0800 Subject: [PATCH 421/448] Add Hunting Anomalies in the Stock Market scripts (#780) * Add Hunting Anomalies in the Stock Market scripts * Fix lint * Ignore type and fix typo * Fix type def from linter * Removed json dump --- examples/tools/hunting-anomalies/README.md | 49 +++ .../aggregates_day/README.md | 1 + .../hunting-anomalies/build-lookup-table.py | 91 ++++++ .../hunting-anomalies/gui-lookup-table.py | 302 ++++++++++++++++++ .../hunting-anomalies/query-lookup-table.py | 63 ++++ 5 files changed, 506 insertions(+) create mode 100644 examples/tools/hunting-anomalies/README.md create mode 100644 examples/tools/hunting-anomalies/aggregates_day/README.md create mode 100644 examples/tools/hunting-anomalies/build-lookup-table.py create mode 100644 examples/tools/hunting-anomalies/gui-lookup-table.py create mode 100644 examples/tools/hunting-anomalies/query-lookup-table.py diff --git a/examples/tools/hunting-anomalies/README.md b/examples/tools/hunting-anomalies/README.md new file mode 100644 index 00000000..4b36f1b5 --- /dev/null +++ b/examples/tools/hunting-anomalies/README.md @@ -0,0 +1,49 @@ +# Hunting Anomalies in the Stock Market + +This repository contains all the necessary scripts and data directories used in the [Hunting Anomalies in the Stock Market](https://polygon.io/blog/hunting-anomalies-in-stock-market/) tutorial, hosted on Polygon.io's blog. The tutorial demonstrates how to detect statistical anomalies in historical US stock market data through a comprehensive workflow that involves downloading data, building a lookup table, querying for anomalies, and visualizing them through a web interface. + +### Prerequisites + +- Python 3.8+ +- Access to Polygon.io's historical data via Flat Files +- An active Polygon.io API key, obtainable by signing up for a Stocks paid plan + +### Repository Contents + +- `README.md`: This file, outlining setup and execution instructions. +- `aggregates_day`: Directory where downloaded CSV data files are stored. +- `build-lookup-table.py`: Python script to build a lookup table from the historical data. +- `query-lookup-table.py`: Python script to query the lookup table for anomalies. +- `gui-lookup-table.py`: Python script for a browser-based interface to explore anomalies visually. + +### Running the Tutorial + +1. **Ensure Python 3.8+ is installed:** Check your Python version and ensure all required libraries (polygon-api-client, pandas, pickle, and argparse) are installed. + +2. **Set up your API key:** Make sure you have an active paid Polygon.io Stock subscription for accessing Flat Files. Set up your API key in your environment or directly in the scripts where required. + +3. **Download Historical Data:** Use the MinIO client to download historical stock market data. Adjust the commands and paths based on the data you are interested in. + ```bash + mc alias set s3polygon https://files.polygon.io YOUR_ACCESS_KEY YOUR_SECRET_KEY + mc cp --recursive s3polygon/flatfiles/us_stocks_sip/day_aggs_v1/2024/08/ ./aggregates_day/ + mc cp --recursive s3polygon/flatfiles/us_stocks_sip/day_aggs_v1/2024/09/ ./aggregates_day/ + mc cp --recursive s3polygon/flatfiles/us_stocks_sip/day_aggs_v1/2024/10/ ./aggregates_day/ + gunzip ./aggregates_day/*.gz + ``` + +4. **Build the Lookup Table:** This script processes the downloaded data and builds a lookup table, saving it as `lookup_table.pkl`. + ```bash + python build-lookup-table.py + ``` + +5. **Query Anomalies:** Replace `2024-10-18` with the date you want to analyze for anomalies. + ```bash + python query-lookup-table.py 2024-10-18 + ``` + +6. **Run the GUI:** Access the web interface at `http://localhost:8888` to explore the anomalies visually. + ```bash + python gui-lookup-table.py + ``` + +For a complete step-by-step guide on each phase of the anomaly detection process, including additional configurations and troubleshooting, refer to the detailed [tutorial on our blog](https://polygon.io/blog/hunting-anomalies-in-stock-market/). diff --git a/examples/tools/hunting-anomalies/aggregates_day/README.md b/examples/tools/hunting-anomalies/aggregates_day/README.md new file mode 100644 index 00000000..a0ade480 --- /dev/null +++ b/examples/tools/hunting-anomalies/aggregates_day/README.md @@ -0,0 +1 @@ +Download flat files into here. diff --git a/examples/tools/hunting-anomalies/build-lookup-table.py b/examples/tools/hunting-anomalies/build-lookup-table.py new file mode 100644 index 00000000..16abca2d --- /dev/null +++ b/examples/tools/hunting-anomalies/build-lookup-table.py @@ -0,0 +1,91 @@ +import os +import pandas as pd # type: ignore +from collections import defaultdict +import pickle +import json +from typing import DefaultDict, Dict, Any, BinaryIO + +# Directory containing the daily CSV files +data_dir = "./aggregates_day/" + +# Initialize a dictionary to hold trades data +trades_data = defaultdict(list) + +# List all CSV files in the directory +files = sorted([f for f in os.listdir(data_dir) if f.endswith(".csv")]) + +print("Starting to process files...") + +# Process each file (assuming files are named in order) +for file in files: + print(f"Processing {file}") + file_path = os.path.join(data_dir, file) + df = pd.read_csv(file_path) + # For each stock, store the date and relevant data + for _, row in df.iterrows(): + ticker = row["ticker"] + date = pd.to_datetime(row["window_start"], unit="ns").date() + trades = row["transactions"] + close_price = row["close"] # Ensure 'close' column exists in your CSV + trades_data[ticker].append( + {"date": date, "trades": trades, "close_price": close_price} + ) + +print("Finished processing files.") +print("Building lookup table...") + +# Now, build the lookup table with rolling averages and percentage price change +lookup_table: DefaultDict[str, Dict[str, Any]] = defaultdict( + dict +) # Nested dict: ticker -> date -> stats + +for ticker, records in trades_data.items(): + # Convert records to DataFrame + df_ticker = pd.DataFrame(records) + # Sort records by date + df_ticker.sort_values("date", inplace=True) + df_ticker.set_index("date", inplace=True) + + # Calculate the percentage change in close_price + df_ticker["price_diff"] = ( + df_ticker["close_price"].pct_change() * 100 + ) # Multiply by 100 for percentage + + # Shift trades to exclude the current day from rolling calculations + df_ticker["trades_shifted"] = df_ticker["trades"].shift(1) + # Calculate rolling average and standard deviation over the previous 5 days + df_ticker["avg_trades"] = df_ticker["trades_shifted"].rolling(window=5).mean() + df_ticker["std_trades"] = df_ticker["trades_shifted"].rolling(window=5).std() + # Store the data in the lookup table + for date, row in df_ticker.iterrows(): + # Convert date to string for JSON serialization + date_str = date.strftime("%Y-%m-%d") + # Ensure rolling stats are available + if pd.notnull(row["avg_trades"]) and pd.notnull(row["std_trades"]): + lookup_table[ticker][date_str] = { + "trades": row["trades"], + "close_price": row["close_price"], + "price_diff": row["price_diff"], + "avg_trades": row["avg_trades"], + "std_trades": row["std_trades"], + } + else: + # Store data without rolling stats if not enough data points + lookup_table[ticker][date_str] = { + "trades": row["trades"], + "close_price": row["close_price"], + "price_diff": row["price_diff"], + "avg_trades": None, + "std_trades": None, + } + +print("Lookup table built successfully.") + +# Convert defaultdict to regular dict for JSON serialization +lookup_table_dict = {k: v for k, v in lookup_table.items()} + +# Save the lookup table to a file for later use +with open("lookup_table.pkl", "wb") as f: # type: BinaryIO + pickle.dump(lookup_table_dict, f) + +print("Lookup table saved to 'lookup_table.pkl'.") diff --git a/examples/tools/hunting-anomalies/gui-lookup-table.py b/examples/tools/hunting-anomalies/gui-lookup-table.py new file mode 100644 index 00000000..df58746c --- /dev/null +++ b/examples/tools/hunting-anomalies/gui-lookup-table.py @@ -0,0 +1,302 @@ +import os +import pickle +import json +from datetime import datetime +from polygon import RESTClient +from polygon.rest.models import Agg +import http.server +import socketserver +import traceback +from urllib.parse import urlparse, parse_qs + +PORT = 8888 + +# Load the lookup_table +with open("lookup_table.pkl", "rb") as f: + lookup_table = pickle.load(f) + + +class handler(http.server.SimpleHTTPRequestHandler): + def do_GET(self): + # Parse the path and query parameters + parsed_path = urlparse(self.path) + path = parsed_path.path + query_params = parse_qs(parsed_path.query) + + if path == "/": + # Handle the root path + # Get the date parameter if provided + date_param = query_params.get("date", [None])[0] + + # Get all dates from the lookup table + all_dates = set() + for ticker_data in lookup_table.values(): + all_dates.update(ticker_data.keys()) + all_dates = sorted(all_dates) + + # If date is None, get the latest date from the lookup table + if date_param is None: + if all_dates: + latest_date = max(all_dates) + else: + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + html_content = ( + "

No data available.

" + ) + self.wfile.write(html_content.encode()) + return + else: + latest_date = date_param + + # Ensure latest_date is in all_dates + if latest_date not in all_dates: + # Handle the case where the provided date is invalid + self.send_response(400) + self.send_header("Content-type", "text/html") + self.end_headers() + error_html = f"

Error: No data available for date {latest_date}

" + self.wfile.write(error_html.encode()) + return + + # Now, get the anomalies for the latest_date + anomalies = [] + for ticker, date_data in lookup_table.items(): + if latest_date in date_data: + data = date_data[latest_date] + trades = data["trades"] + avg_trades = data["avg_trades"] + std_trades = data["std_trades"] + if ( + avg_trades is not None + and std_trades is not None + and std_trades > 0 + ): + z_score = (trades - avg_trades) / std_trades + threshold_multiplier = 3 # Adjust as needed + if z_score > threshold_multiplier: + anomalies.append( + { + "ticker": ticker, + "date": latest_date, + "trades": trades, + "avg_trades": avg_trades, + "std_trades": std_trades, + "z_score": z_score, + "close_price": data["close_price"], + "price_diff": data["price_diff"], + } + ) + # Sort anomalies by trades in descending order + anomalies.sort(key=lambda x: x["trades"], reverse=True) + # Generate the HTML to display the anomalies + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + # Build the HTML content + html_content = 'Anomalies for {}'.format( + latest_date + ) + html_content += '

Anomalies for {}

'.format( + latest_date + ) + # Add navigation links (prev and next dates) + current_index = all_dates.index(latest_date) + prev_date = all_dates[current_index - 1] if current_index > 0 else None + next_date = ( + all_dates[current_index + 1] + if current_index < len(all_dates) - 1 + else None + ) + html_content += "

" + if prev_date: + html_content += 'Previous Date '.format( + prev_date + ) + if next_date: + html_content += 'Next Date '.format(next_date) + html_content += "

" + # Display the anomalies in a table + html_content += ( + '' + ) + html_content += "" + html_content += "" + html_content += "" + html_content += "" + html_content += "" + html_content += "" + html_content += "" + html_content += "" + html_content += "" + html_content += "" + for anomaly in anomalies: + html_content += "" + html_content += "".format(anomaly["ticker"]) + html_content += "".format(anomaly["trades"]) + html_content += "".format(anomaly["avg_trades"]) + html_content += "".format(anomaly["std_trades"]) + html_content += "".format(anomaly["z_score"]) + html_content += "".format(anomaly["close_price"]) + html_content += "".format(anomaly["price_diff"]) + # Add a link to the chart + html_content += ( + ''.format( + anomaly["ticker"], latest_date + ) + ) + html_content += "" + html_content += '
TickerTradesAvg TradesStd DevZ-scoreClose PricePrice DiffChart
{}{}{:.2f}{:.2f}{:.2f}{:.2f}{:.2f}View Chart
' + html_content += "
" + self.wfile.write(html_content.encode()) + elif path == "/chart": + # Handle the chart page + # Get 'ticker' and 'date' from query parameters + ticker = query_params.get("ticker", [None])[0] + date = query_params.get("date", [None])[0] + if ticker is None or date is None: + # Return an error page + self.send_response(400) + self.send_header("Content-type", "text/html") + self.end_headers() + error_html = "

Error: Missing ticker or date parameter

" + self.wfile.write(error_html.encode()) + else: + # Fetch minute aggregates for the ticker and date + client = RESTClient( + trace=True + ) # POLYGON_API_KEY environment variable is used + try: + aggs = [] + date_from = date + date_to = date + for a in client.list_aggs( + ticker, + 1, + "minute", + date_from, + date_to, + limit=50000, + ): + aggs.append(a) + # Prepare data for the chart + data = [] + for agg in aggs: + if isinstance(agg, Agg) and isinstance(agg.timestamp, int): + new_record = [ + agg.timestamp, + agg.open, + agg.high, + agg.low, + agg.close, + ] + data.append(new_record) + # Generate the HTML for the chart page + chart_html = """ + + + + + + + + + + + + +
+ +
+ + + """ % ( + json.dumps(data), + ticker, + date, + ticker, + ) + self.send_response(200) + self.send_header("Content-type", "text/html") + self.send_header("Access-Control-Allow-Origin", "*") + self.end_headers() + self.wfile.write(chart_html.encode()) + except Exception as e: + # Handle exceptions + self.send_response(500) + self.send_header("Content-type", "text/html") + self.end_headers() + error_html = "

Error fetching data: {}

".format( + str(e) + ) + self.wfile.write(error_html.encode()) + else: + # Serve files from the current directory + super().do_GET() + + +def run_server(): + with socketserver.TCPServer(("", PORT), handler) as httpd: + print("serving at port", PORT) + try: + httpd.serve_forever() + except KeyboardInterrupt: + print("\nExiting gracefully...") + httpd.shutdown() + httpd.server_close() + + +if __name__ == "__main__": + run_server() diff --git a/examples/tools/hunting-anomalies/query-lookup-table.py b/examples/tools/hunting-anomalies/query-lookup-table.py new file mode 100644 index 00000000..38bb86cf --- /dev/null +++ b/examples/tools/hunting-anomalies/query-lookup-table.py @@ -0,0 +1,63 @@ +import pickle +import argparse + +# Parse command-line arguments +parser = argparse.ArgumentParser(description="Anomaly Detection Script") +parser.add_argument("date", type=str, help="Target date in YYYY-MM-DD format") +args = parser.parse_args() + +# Load the lookup_table +with open("lookup_table.pkl", "rb") as f: + lookup_table = pickle.load(f) + +# Threshold for considering an anomaly (e.g., 3 standard deviations) +threshold_multiplier = 3 + +# Date for which we want to find anomalies +target_date_str = args.date + +# List to store anomalies +anomalies = [] + +# Iterate over all tickers in the lookup table +for ticker, date_data in lookup_table.items(): + if target_date_str in date_data: + data = date_data[target_date_str] + trades = data["trades"] + avg_trades = data["avg_trades"] + std_trades = data["std_trades"] + if avg_trades is not None and std_trades is not None and std_trades > 0: + z_score = (trades - avg_trades) / std_trades + if z_score > threshold_multiplier: + anomalies.append( + { + "ticker": ticker, + "date": target_date_str, + "trades": trades, + "avg_trades": avg_trades, + "std_trades": std_trades, + "z_score": z_score, + "close_price": data["close_price"], + "price_diff": data["price_diff"], + } + ) + +# Sort anomalies by trades in descending order +anomalies.sort(key=lambda x: x["trades"], reverse=True) + +# Print the anomalies with aligned columns +print(f"\nAnomalies Found for {target_date_str}:\n") +print( + f"{'Ticker':<10}{'Trades':>10}{'Avg Trades':>15}{'Std Dev':>10}{'Z-score':>10}{'Close Price':>12}{'Price Diff':>12}" +) +print("-" * 91) +for anomaly in anomalies: + print( + f"{anomaly['ticker']:<10}" + f"{anomaly['trades']:>10.0f}" + f"{anomaly['avg_trades']:>15.2f}" + f"{anomaly['std_trades']:>10.2f}" + f"{anomaly['z_score']:>10.2f}" + f"{anomaly['close_price']:>12.2f}" + f"{anomaly['price_diff']:>12.2f}" + ) From 3ac9548b42fb00da708563a678763e68715680c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:54:53 +0000 Subject: [PATCH 422/448] Bump orjson from 3.10.9 to 3.10.11 (#779) --- poetry.lock | 119 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 61 insertions(+), 60 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6c9cf217..1ab68672 100644 --- a/poetry.lock +++ b/poetry.lock @@ -389,68 +389,69 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.9" +version = "3.10.11" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a377186a11b48c55969e34f0aa414c2826a234f212d6f2b312ba512e3cdb2c6f"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bf37bf0ca538065c34efe1803378b2dadd7e05b06610a086c2857f15ee59e12"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7d9d83a91168aa48309acba804e393b7d9216b66f15e38f339b9fbb00db8986d"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0014038a17a1fe273da0a5489787677ef5a64566ab383ad6d929e44ed5683f4"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6ae1b1733e4528e45675ed09a732b6ac37d716bce2facaf467f84ce774adecd"}, - {file = "orjson-3.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe91c2259c4a859356b6db1c6e649b40577492f66d483da8b8af6da0f87c00e3"}, - {file = "orjson-3.10.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a04f912c32463386ba117591c99a3d9e40b3b69bed9c5123d89dff06f0f5a4b0"}, - {file = "orjson-3.10.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae82ca347829ca47431767b079f96bb977f592189250ccdede676339a80c8982"}, - {file = "orjson-3.10.9-cp310-none-win32.whl", hash = "sha256:fd5083906825d7f5d23089425ce5424d783d6294020bcabb8518a3e1f97833e5"}, - {file = "orjson-3.10.9-cp310-none-win_amd64.whl", hash = "sha256:e9ff9521b5be0340c8e686bcfe2619777fd7583f71e7b494601cc91ad3919d2e"}, - {file = "orjson-3.10.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f3bd9df47385b8fabb3b2ee1e83f9960b8accc1905be971a1c257f16c32b491e"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4948961b6bce1e2086b2cf0b56cc454cdab589d40c7f85be71fb5a5556c51d3"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a9fc7a6cf2b229ddc323e136df13b3fb4466c50d84ed600cd0898223dd2fea3"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2314846e1029a2d2b899140f350eaaf3a73281df43ba84ac44d94ca861b5b269"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f52d993504827503411df2d60e60acf52885561458d6273f99ecd172f31c4352"}, - {file = "orjson-3.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e29bbf08d907756c145a3a3a1f7ce2f11f15e3edbd3342842589d6030981b76f"}, - {file = "orjson-3.10.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ae82992c00b480c3cc7dac6739324554be8c5d8e858a90044928506a3333ef4"}, - {file = "orjson-3.10.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6fdf8d32b6d94019dc15163542d345e9ce4c4661f56b318608aa3088a1a3a23b"}, - {file = "orjson-3.10.9-cp311-none-win32.whl", hash = "sha256:01f5fef452b4d7615f2e94153479370a4b59e0c964efb32dd902978f807a45cd"}, - {file = "orjson-3.10.9-cp311-none-win_amd64.whl", hash = "sha256:95361c4197c7ce9afdf56255de6f4e2474c39d16a277cce31d1b99a2520486d8"}, - {file = "orjson-3.10.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:43ad5560db54331c007dc38be5ba7706cb72974a29ae8227019d89305d750a6f"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1471c3274b1a4a9b8f4b9ed6effaea9ad885796373797515c44b365b375c256d"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:41d8cac575acd15918903d74cfaabb5dbe57b357b93341332f647d1013928dcc"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2920c8754f1aedc98bd357ec172af18ce48f5f1017a92244c85fe41d16d3c6e0"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c7fa3ff6a0d9d15a0d0d2254cca16cd919156a18423654ce5574591392fe9914"}, - {file = "orjson-3.10.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e91b90c0c26bd79593967c1adef421bcff88c9e723d49c93bb7ad8af80bc6b"}, - {file = "orjson-3.10.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f11949024f785ace1a516db32fa6255f6227226b2c988abf66f5aee61d43d8f7"}, - {file = "orjson-3.10.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:060e020d85d0ec145bc1b536b1fd9c10a0519c91991ead9724d6f759ebe26b9a"}, - {file = "orjson-3.10.9-cp312-none-win32.whl", hash = "sha256:71f73439999fe662843da3607cdf6e75b1551c330f487e5801d463d969091c63"}, - {file = "orjson-3.10.9-cp312-none-win_amd64.whl", hash = "sha256:12e2efe81356b8448f1cd130f8d75d3718de583112d71f2e2f8baa81bd835bb9"}, - {file = "orjson-3.10.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:0ab6e3ad10e964392f0e838751bcce2ef9c8fa8be7deddffff83088e5791566d"}, - {file = "orjson-3.10.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68ef65223baab00f469c8698f771ab3e6ccf6af2a987e77de5b566b4ec651150"}, - {file = "orjson-3.10.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6f130848205fea90a2cb9fa2b11cafff9a9f31f4efad225800bc8b9e4a702f24"}, - {file = "orjson-3.10.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2ea7a98f3295ed8adb6730a5788cc78dafea28300d19932a1d2143457f7db802"}, - {file = "orjson-3.10.9-cp313-none-win32.whl", hash = "sha256:bdce39f96149a74fddeb2674c54f1da5e57724d32952eb6df2ac719b66d453cc"}, - {file = "orjson-3.10.9-cp313-none-win_amd64.whl", hash = "sha256:d11383701d4b58e795039b662ada46987744293d57bfa2719e7379b8d67bc796"}, - {file = "orjson-3.10.9-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1c3a1e845916a3739ab4162bb48dee66e0e727a19faf397176a7db0d9826cc3c"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:063ca59d93d93d1387f0c4bb766c6d4f5b0e423fe7c366d0bd4401a56d1669d1"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:938b7fcd79cf06fe348fb24b6163fbaa2fdc9fbed8b1f06318f24467f1487e63"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc32a9e43c7693011ccde6f8eff8cba75ca0d2a55de11092faa4a716101e67f5"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b3069b7e2f57f3eef2282029b9c2ba21f08a55f1018e483663a3356f046af4c"}, - {file = "orjson-3.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4289b5d1f88fd05dcafdd7a1f3b17bb722e77712b7618f98e86bdda560e0a1a"}, - {file = "orjson-3.10.9-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:74f5a7a7f282d326be71b722b0c350da7af6f5f15b9378da177e0e4a09bd91a3"}, - {file = "orjson-3.10.9-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:80e0c013e50cf7198319d8137931684eb9f32daa067e8276d9dbdd4010bb4add"}, - {file = "orjson-3.10.9-cp38-none-win32.whl", hash = "sha256:9d989152df8f60a76867354e0e08d896292ab9fb96a7ef89a5b3838de174522c"}, - {file = "orjson-3.10.9-cp38-none-win_amd64.whl", hash = "sha256:485358fe9892d6bfd88e5885b66bf88496e1842c8f35f61682ff9928b12a6cf0"}, - {file = "orjson-3.10.9-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ca54e6f320e33c8a6e471c424ee16576361d905c15d69e134c2906d3fcb31795"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9a9eb03a29c9b30b6c8bb35e5fa20d96589a76e0042005be59b7c3af10a7e43"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:731e8859fc99b398c286320726906404091141e9223dd5e9e6917f7e32e1cc68"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75b061c11f5aab979a95927a76394b4a85e3e4d63d0a2a16b56a4f7c6503afab"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b61b08f6397f004570fd6a840f4a58946b63b4c7029408cdedb45fe85c7d17f7"}, - {file = "orjson-3.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4f5e0360b7f0aba91dafe12469108109a0e8973956d4a9865ca262a6881406"}, - {file = "orjson-3.10.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e403429e2947a059545e305d97e4b0eb90d3bb44b396d6f327d7ae2018391e13"}, - {file = "orjson-3.10.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0e492b93e122264c2dc78700859122631a4715bda88fabf57d9226954cfe7ec5"}, - {file = "orjson-3.10.9-cp39-none-win32.whl", hash = "sha256:bfba9605e85bfd19b83a21c2c25c2bed2000d5f097f3fa3ad5b5f8a7263a3148"}, - {file = "orjson-3.10.9-cp39-none-win_amd64.whl", hash = "sha256:77d277fa138d4bf145e8b24042004891c188c52ac8492724a183f42b0031cf0c"}, - {file = "orjson-3.10.9.tar.gz", hash = "sha256:c378074e0c46035dc66e57006993233ec66bf8487d501bab41649b4b7289ed4d"}, + {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, + {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, + {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, + {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, + {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, + {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, + {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, + {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, + {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, + {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, + {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, + {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, + {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, + {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, + {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, + {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, + {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, + {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, + {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, ] [[package]] @@ -988,4 +989,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "bc73d9f5843ac26c73d8a9f755037f1deac6b9d5d84e9d111492bea26841e747" +content-hash = "da77bece324a6ae9696517f2df926377a0d1faac253aca6754bf3d35cbc4a7c2" diff --git a/pyproject.toml b/pyproject.toml index 168dc906..01a2dc4f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^75.2.0" pook = "^2.0.1" -orjson = "^3.10.9" +orjson = "^3.10.11" [build-system] requires = ["poetry-core>=1.0.0"] From b389b9eba65fb56a924f1ff3ef7b80de21a694fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 04:46:58 -0800 Subject: [PATCH 423/448] Bump types-setuptools from 75.2.0.20241019 to 75.3.0.20241107 (#783) Bumps [types-setuptools](https://github.com/python/typeshed) from 75.2.0.20241019 to 75.3.0.20241107. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1ab68672..d409ab5c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -817,13 +817,13 @@ files = [ [[package]] name = "types-setuptools" -version = "75.2.0.20241019" +version = "75.3.0.20241107" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-75.2.0.20241019.tar.gz", hash = "sha256:86ea31b5f6df2c6b8f2dc8ae3f72b213607f62549b6fa2ed5866e5299f968694"}, - {file = "types_setuptools-75.2.0.20241019-py3-none-any.whl", hash = "sha256:2e48ff3acd4919471e80d5e3f049cce5c177e108d5d36d2d4cee3fa4d4104258"}, + {file = "types-setuptools-75.3.0.20241107.tar.gz", hash = "sha256:f66710e1cd4a936e5fcc12d4e49be1a67c34372cf753e87ebe704426451b4012"}, + {file = "types_setuptools-75.3.0.20241107-py3-none-any.whl", hash = "sha256:bc6de6e2bcb6d610556304d0a69fe4ca208ac4896162647314ecfd9fd73d8550"}, ] [[package]] @@ -989,4 +989,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "da77bece324a6ae9696517f2df926377a0d1faac253aca6754bf3d35cbc4a7c2" +content-hash = "6cbbf3e12525e3d5faa1bb19be793935af7dc75935ec97a6ba2941417e93b207" diff --git a/pyproject.toml b/pyproject.toml index 01a2dc4f..633c26a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^3.0.1" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^75.2.0" +types-setuptools = "^75.3.0" pook = "^2.0.1" orjson = "^3.10.11" From dc7e9e27b43b702de2965230f7530af5cda1c036 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 04:50:20 -0800 Subject: [PATCH 424/448] Bump mypy from 1.12.1 to 1.13.0 (#776) Bumps [mypy](https://github.com/python/mypy) from 1.12.1 to 1.13.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.12.1...v1.13.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 69 +++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/poetry.lock b/poetry.lock index d409ab5c..b25eefae 100644 --- a/poetry.lock +++ b/poetry.lock @@ -312,43 +312,43 @@ files = [ [[package]] name = "mypy" -version = "1.12.1" +version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3d7d4371829184e22fda4015278fbfdef0327a4b955a483012bd2d423a788801"}, - {file = "mypy-1.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f59f1dfbf497d473201356966e353ef09d4daec48caeacc0254db8ef633a28a5"}, - {file = "mypy-1.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b947097fae68004b8328c55161ac9db7d3566abfef72d9d41b47a021c2fba6b1"}, - {file = "mypy-1.12.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96af62050971c5241afb4701c15189ea9507db89ad07794a4ee7b4e092dc0627"}, - {file = "mypy-1.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:d90da248f4c2dba6c44ddcfea94bb361e491962f05f41990ff24dbd09969ce20"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1230048fec1380faf240be6385e709c8570604d2d27ec6ca7e573e3bc09c3735"}, - {file = "mypy-1.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02dcfe270c6ea13338210908f8cadc8d31af0f04cee8ca996438fe6a97b4ec66"}, - {file = "mypy-1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a437c9102a6a252d9e3a63edc191a3aed5f2fcb786d614722ee3f4472e33f6"}, - {file = "mypy-1.12.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:186e0c8346efc027ee1f9acf5ca734425fc4f7dc2b60144f0fbe27cc19dc7931"}, - {file = "mypy-1.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:673ba1140a478b50e6d265c03391702fa11a5c5aff3f54d69a62a48da32cb811"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9fb83a7be97c498176fb7486cafbb81decccaef1ac339d837c377b0ce3743a7f"}, - {file = "mypy-1.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:389e307e333879c571029d5b93932cf838b811d3f5395ed1ad05086b52148fb0"}, - {file = "mypy-1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94b2048a95a21f7a9ebc9fbd075a4fcd310410d078aa0228dbbad7f71335e042"}, - {file = "mypy-1.12.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5932370ccf7ebf83f79d1c157a5929d7ea36313027b0d70a488493dc1b179"}, - {file = "mypy-1.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:19bf51f87a295e7ab2894f1d8167622b063492d754e69c3c2fed6563268cb42a"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d34167d43613ffb1d6c6cdc0cc043bb106cac0aa5d6a4171f77ab92a3c758bcc"}, - {file = "mypy-1.12.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:427878aa54f2e2c5d8db31fa9010c599ed9f994b3b49e64ae9cd9990c40bd635"}, - {file = "mypy-1.12.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5fcde63ea2c9f69d6be859a1e6dd35955e87fa81de95bc240143cf00de1f7f81"}, - {file = "mypy-1.12.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d54d840f6c052929f4a3d2aab2066af0f45a020b085fe0e40d4583db52aab4e4"}, - {file = "mypy-1.12.1-cp313-cp313-win_amd64.whl", hash = "sha256:20db6eb1ca3d1de8ece00033b12f793f1ea9da767334b7e8c626a4872090cf02"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b16fe09f9c741d85a2e3b14a5257a27a4f4886c171d562bc5a5e90d8591906b8"}, - {file = "mypy-1.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0dcc1e843d58f444fce19da4cce5bd35c282d4bde232acdeca8279523087088a"}, - {file = "mypy-1.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e10ba7de5c616e44ad21005fa13450cd0de7caaa303a626147d45307492e4f2d"}, - {file = "mypy-1.12.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0e6fe449223fa59fbee351db32283838a8fee8059e0028e9e6494a03802b4004"}, - {file = "mypy-1.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:dc6e2a2195a290a7fd5bac3e60b586d77fc88e986eba7feced8b778c373f9afe"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de5b2a8988b4e1269a98beaf0e7cc71b510d050dce80c343b53b4955fff45f19"}, - {file = "mypy-1.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843826966f1d65925e8b50d2b483065c51fc16dc5d72647e0236aae51dc8d77e"}, - {file = "mypy-1.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fe20f89da41a95e14c34b1ddb09c80262edcc295ad891f22cc4b60013e8f78d"}, - {file = "mypy-1.12.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8135ffec02121a75f75dc97c81af7c14aa4ae0dda277132cfcd6abcd21551bfd"}, - {file = "mypy-1.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:a7b76fa83260824300cc4834a3ab93180db19876bce59af921467fd03e692810"}, - {file = "mypy-1.12.1-py3-none-any.whl", hash = "sha256:ce561a09e3bb9863ab77edf29ae3a50e65685ad74bba1431278185b7e5d5486e"}, - {file = "mypy-1.12.1.tar.gz", hash = "sha256:f5b3936f7a6d0e8280c9bdef94c7ce4847f5cdfc258fbb2c29a8c1711e8bb96d"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, ] [package.dependencies] @@ -358,6 +358,7 @@ typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] install-types = ["pip"] mypyc = ["setuptools (>=50)"] reports = ["lxml"] @@ -989,4 +990,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "6cbbf3e12525e3d5faa1bb19be793935af7dc75935ec97a6ba2941417e93b207" +content-hash = "30f3e19d533a319f875b07103455ee6657c5ee92260666909cd47aa503ad29bf" diff --git a/pyproject.toml b/pyproject.toml index 633c26a4..20db1464 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ certifi = ">=2022.5.18,<2025.0.0" [tool.poetry.dev-dependencies] black = "^24.8.0" -mypy = "^1.12" +mypy = "^1.13" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" sphinx-rtd-theme = "^3.0.1" From b090f5ed3869057f6e73a725b1795bd738cc618f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 10:36:50 -0800 Subject: [PATCH 425/448] Bump types-setuptools from 75.3.0.20241107 to 75.5.0.20241116 (#786) Bumps [types-setuptools](https://github.com/python/typeshed) from 75.3.0.20241107 to 75.5.0.20241116. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index b25eefae..3749fc71 100644 --- a/poetry.lock +++ b/poetry.lock @@ -818,13 +818,13 @@ files = [ [[package]] name = "types-setuptools" -version = "75.3.0.20241107" +version = "75.5.0.20241116" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-75.3.0.20241107.tar.gz", hash = "sha256:f66710e1cd4a936e5fcc12d4e49be1a67c34372cf753e87ebe704426451b4012"}, - {file = "types_setuptools-75.3.0.20241107-py3-none-any.whl", hash = "sha256:bc6de6e2bcb6d610556304d0a69fe4ca208ac4896162647314ecfd9fd73d8550"}, + {file = "types-setuptools-75.5.0.20241116.tar.gz", hash = "sha256:b6939ffdbc50ffdc0bcfbf14f7a6de1ddc5510906c1ca2bd62c23646e5798b1a"}, + {file = "types_setuptools-75.5.0.20241116-py3-none-any.whl", hash = "sha256:1144b2ab8fa986061f963391fdbde16df20582e3cc39c94340e71aa61cc7203f"}, ] [[package]] @@ -990,4 +990,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "30f3e19d533a319f875b07103455ee6657c5ee92260666909cd47aa503ad29bf" +content-hash = "92cf31e5fe27f276b9c319d1742d5865ee52b5a8589230a994907ad74e426fde" diff --git a/pyproject.toml b/pyproject.toml index 20db1464..0b1d4f7f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^3.0.1" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^75.3.0" +types-setuptools = "^75.5.0" pook = "^2.0.1" orjson = "^3.10.11" From 83dfc92f11039a2956fe353b32d2385d3b83fecc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 11:36:00 -0800 Subject: [PATCH 426/448] Bump sphinx-rtd-theme from 3.0.1 to 3.0.2 (#787) Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 3.0.1 to 3.0.2. - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/3.0.1...3.0.2) --- updated-dependencies: - dependency-name: sphinx-rtd-theme dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3749fc71..150e23c4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -674,13 +674,13 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.4.2)", "diff-cover (>=8.0.3)", [[package]] name = "sphinx-rtd-theme" -version = "3.0.1" +version = "3.0.2" description = "Read the Docs theme for Sphinx" optional = false python-versions = ">=3.8" files = [ - {file = "sphinx_rtd_theme-3.0.1-py2.py3-none-any.whl", hash = "sha256:921c0ece75e90633ee876bd7b148cfaad136b481907ad154ac3669b6fc957916"}, - {file = "sphinx_rtd_theme-3.0.1.tar.gz", hash = "sha256:a4c5745d1b06dfcb80b7704fe532eb765b44065a8fad9851e4258c8804140703"}, + {file = "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", hash = "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13"}, + {file = "sphinx_rtd_theme-3.0.2.tar.gz", hash = "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85"}, ] [package.dependencies] @@ -990,4 +990,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "92cf31e5fe27f276b9c319d1742d5865ee52b5a8589230a994907ad74e426fde" +content-hash = "7e985cdc0c18c1888f9b6ef92fbad423b529ce066e96f360f0bf01dfe6ed312c" diff --git a/pyproject.toml b/pyproject.toml index 0b1d4f7f..dc25d905 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ black = "^24.8.0" mypy = "^1.13" types-urllib3 = "^1.26.25" Sphinx = "^7.1.2" -sphinx-rtd-theme = "^3.0.1" +sphinx-rtd-theme = "^3.0.2" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" From 3756b5380d04043deb8a2eaea8b8f8d104650995 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 09:29:20 -0800 Subject: [PATCH 427/448] Bump orjson from 3.10.11 to 3.10.12 (#794) Bumps [orjson](https://github.com/ijl/orjson) from 3.10.11 to 3.10.12. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.10.11...3.10.12) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 137 +++++++++++++++++++++++++++---------------------- pyproject.toml | 2 +- 2 files changed, 78 insertions(+), 61 deletions(-) diff --git a/poetry.lock b/poetry.lock index 150e23c4..c86acd29 100644 --- a/poetry.lock +++ b/poetry.lock @@ -390,69 +390,86 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.11" +version = "3.10.12" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, - {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, - {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, - {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, - {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, - {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, - {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, - {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, - {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, - {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, - {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, - {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, - {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, - {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, - {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, - {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, - {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, - {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, - {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, + {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, + {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, + {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, + {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, + {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, + {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, + {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, + {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, + {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, + {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, + {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, + {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, + {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, + {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, + {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, + {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, + {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, + {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, + {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, ] [[package]] @@ -990,4 +1007,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "7e985cdc0c18c1888f9b6ef92fbad423b529ce066e96f360f0bf01dfe6ed312c" +content-hash = "58888751f16e4ddaa6fc85cbb70f4155c933f3bb6ff2427715981a1ac346c6df" diff --git a/pyproject.toml b/pyproject.toml index dc25d905..0ee1a26d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^75.5.0" pook = "^2.0.1" -orjson = "^3.10.11" +orjson = "^3.10.12" [build-system] requires = ["poetry-core>=1.0.0"] From 04f594ebc2fd74d1b29184781cfdcbd92272c4b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Nov 2024 09:51:18 -0800 Subject: [PATCH 428/448] Bump types-setuptools from 75.5.0.20241116 to 75.5.0.20241122 (#793) Bumps [types-setuptools](https://github.com/python/typeshed) from 75.5.0.20241116 to 75.5.0.20241122. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c86acd29..d7ce31a2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -835,13 +835,13 @@ files = [ [[package]] name = "types-setuptools" -version = "75.5.0.20241116" +version = "75.5.0.20241122" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-75.5.0.20241116.tar.gz", hash = "sha256:b6939ffdbc50ffdc0bcfbf14f7a6de1ddc5510906c1ca2bd62c23646e5798b1a"}, - {file = "types_setuptools-75.5.0.20241116-py3-none-any.whl", hash = "sha256:1144b2ab8fa986061f963391fdbde16df20582e3cc39c94340e71aa61cc7203f"}, + {file = "types_setuptools-75.5.0.20241122-py3-none-any.whl", hash = "sha256:d69c445f7bdd5e49d1b2441aadcee1388febcc9ad9d9d5fd33648b555e0b1c31"}, + {file = "types_setuptools-75.5.0.20241122.tar.gz", hash = "sha256:196aaf1811cbc1c77ac1d4c4879d5308b6fdf426e56b73baadbca2a1827dadef"}, ] [[package]] From 609dd5cb5de1850bed3f9594006d14cfbeb4e319 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:26:45 -0800 Subject: [PATCH 429/448] Bump types-setuptools from 75.5.0.20241122 to 75.6.0.20241126 (#797) Bumps [types-setuptools](https://github.com/python/typeshed) from 75.5.0.20241122 to 75.6.0.20241126. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index d7ce31a2..3949798f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -835,13 +835,13 @@ files = [ [[package]] name = "types-setuptools" -version = "75.5.0.20241122" +version = "75.6.0.20241126" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types_setuptools-75.5.0.20241122-py3-none-any.whl", hash = "sha256:d69c445f7bdd5e49d1b2441aadcee1388febcc9ad9d9d5fd33648b555e0b1c31"}, - {file = "types_setuptools-75.5.0.20241122.tar.gz", hash = "sha256:196aaf1811cbc1c77ac1d4c4879d5308b6fdf426e56b73baadbca2a1827dadef"}, + {file = "types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b"}, + {file = "types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0"}, ] [[package]] @@ -1007,4 +1007,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "58888751f16e4ddaa6fc85cbb70f4155c933f3bb6ff2427715981a1ac346c6df" +content-hash = "a99c5c1c9f15bc1f023ae438382b1abd4007705c25b4ace778082b019cce5a2a" diff --git a/pyproject.toml b/pyproject.toml index 0ee1a26d..98ffccb9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^3.0.2" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^75.5.0" +types-setuptools = "^75.6.0" pook = "^2.0.1" orjson = "^3.10.12" From 92dabcae60e4039b04bd304f6f1df0517e3ce190 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 21 Dec 2024 13:27:25 -0800 Subject: [PATCH 430/448] Bump certifi from 2024.8.30 to 2024.12.14 (#807) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.8.30 to 2024.12.14. - [Commits](https://github.com/certifi/python-certifi/compare/2024.08.30...2024.12.14) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3949798f..ca2c7ce4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "alabaster" @@ -90,13 +90,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2024.8.30" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] From a25ece56c824056e478fb53d1d7d90efe21aae9d Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 23 Dec 2024 08:52:57 -0800 Subject: [PATCH 431/448] Update CODEOWNERS (#808) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 02c7785c..d7105d15 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @jbonzo @mmoghaddam385 @justinpolygon +* @justinpolygon @penelopus @davidwf-polygonio From 6acf3b4665282ac542c7988a71539372ebe01263 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:37:31 -0800 Subject: [PATCH 432/448] Update websockets & certifi dependencies (#813) * Update pyproject.toml * Bump poetry.lock --- poetry.lock | 2 +- pyproject.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ca2c7ce4..70633895 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1007,4 +1007,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "a99c5c1c9f15bc1f023ae438382b1abd4007705c25b4ace778082b019cce5a2a" +content-hash = "e73a36a9983ec3dfaa1c08df0fdcc97daeaf9513ae47d89dcf86fc404e0354de" diff --git a/pyproject.toml b/pyproject.toml index 98ffccb9..bc6e6a0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,8 +26,8 @@ packages = [ [tool.poetry.dependencies] python = "^3.8" urllib3 = ">=1.26.9,<3.0.0" -websockets = ">=10.3,<14.0" -certifi = ">=2022.5.18,<2025.0.0" +websockets = ">=10.3,<15.0" +certifi = ">=2022.5.18,<2026.0.0" [tool.poetry.dev-dependencies] black = "^24.8.0" From 816a8d668d33cb7f65f8480eb4829ec40728f6c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:40:48 -0800 Subject: [PATCH 433/448] Bump jinja2 from 3.1.4 to 3.1.5 (#814) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.4...3.1.5) --- updated-dependencies: - dependency-name: jinja2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 70633895..5c20b91a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -225,13 +225,13 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] From d4e62055547759df0464a4ec013b7b6093baae74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:44:15 -0800 Subject: [PATCH 434/448] Bump types-setuptools from 75.6.0.20241126 to 75.6.0.20241223 (#811) Bumps [types-setuptools](https://github.com/python/typeshed) from 75.6.0.20241126 to 75.6.0.20241223. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: justinpolygon <123573436+justinpolygon@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5c20b91a..845fca15 100644 --- a/poetry.lock +++ b/poetry.lock @@ -835,13 +835,13 @@ files = [ [[package]] name = "types-setuptools" -version = "75.6.0.20241126" +version = "75.6.0.20241223" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types_setuptools-75.6.0.20241126-py3-none-any.whl", hash = "sha256:aaae310a0e27033c1da8457d4d26ac673b0c8a0de7272d6d4708e263f2ea3b9b"}, - {file = "types_setuptools-75.6.0.20241126.tar.gz", hash = "sha256:7bf25ad4be39740e469f9268b6beddda6e088891fa5a27e985c6ce68bf62ace0"}, + {file = "types_setuptools-75.6.0.20241223-py3-none-any.whl", hash = "sha256:7cbfd3bf2944f88bbcdd321b86ddd878232a277be95d44c78a53585d78ebc2f6"}, + {file = "types_setuptools-75.6.0.20241223.tar.gz", hash = "sha256:d9478a985057ed48a994c707f548e55aababa85fe1c9b212f43ab5a1fffd3211"}, ] [[package]] From 3c95d68ca2444a3baf90668870bc3a32e4d7c05f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2024 08:58:51 -0800 Subject: [PATCH 435/448] Bump orjson from 3.10.12 to 3.10.13 (#824) Bumps [orjson](https://github.com/ijl/orjson) from 3.10.12 to 3.10.13. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.10.12...3.10.13) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 154 ++++++++++++++++++++++++------------------------- pyproject.toml | 2 +- 2 files changed, 78 insertions(+), 78 deletions(-) diff --git a/poetry.lock b/poetry.lock index 845fca15..59cdd317 100644 --- a/poetry.lock +++ b/poetry.lock @@ -390,86 +390,86 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.12" +version = "3.10.13" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, - {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, - {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, - {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, - {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, - {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, - {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, - {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, - {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, - {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, - {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, - {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, - {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, - {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, - {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, - {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, - {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, - {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, - {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, - {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, - {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, - {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, - {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, - {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, - {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, - {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, - {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, - {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, - {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, - {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, - {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, - {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, + {file = "orjson-3.10.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1232c5e873a4d1638ef957c5564b4b0d6f2a6ab9e207a9b3de9de05a09d1d920"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26a0eca3035619fa366cbaf49af704c7cb1d4a0e6c79eced9f6a3f2437964b6"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d4b6acd7c9c829895e50d385a357d4b8c3fafc19c5989da2bae11783b0fd4977"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1884e53c6818686891cc6fc5a3a2540f2f35e8c76eac8dc3b40480fb59660b00"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a428afb5720f12892f64920acd2eeb4d996595bf168a26dd9190115dbf1130d"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba5b13b8739ce5b630c65cb1c85aedbd257bcc2b9c256b06ab2605209af75a2e"}, + {file = "orjson-3.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cab83e67f6aabda1b45882254b2598b48b80ecc112968fc6483fa6dae609e9f0"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:62c3cc00c7e776c71c6b7b9c48c5d2701d4c04e7d1d7cdee3572998ee6dc57cc"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dc03db4922e75bbc870b03fc49734cefbd50fe975e0878327d200022210b82d8"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:22f1c9a30b43d14a041a6ea190d9eca8a6b80c4beb0e8b67602c82d30d6eec3e"}, + {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b42f56821c29e697c68d7d421410d7c1d8f064ae288b525af6a50cf99a4b1200"}, + {file = "orjson-3.10.13-cp310-cp310-win32.whl", hash = "sha256:0dbf3b97e52e093d7c3e93eb5eb5b31dc7535b33c2ad56872c83f0160f943487"}, + {file = "orjson-3.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:46c249b4e934453be4ff2e518cd1adcd90467da7391c7a79eaf2fbb79c51e8c7"}, + {file = "orjson-3.10.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a36c0d48d2f084c800763473020a12976996f1109e2fcb66cfea442fdf88047f"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0065896f85d9497990731dfd4a9991a45b0a524baec42ef0a63c34630ee26fd6"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92b4ec30d6025a9dcdfe0df77063cbce238c08d0404471ed7a79f309364a3d19"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a94542d12271c30044dadad1125ee060e7a2048b6c7034e432e116077e1d13d2"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3723e137772639af8adb68230f2aa4bcb27c48b3335b1b1e2d49328fed5e244c"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f00c7fb18843bad2ac42dc1ce6dd214a083c53f1e324a0fd1c8137c6436269b"}, + {file = "orjson-3.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0e2759d3172300b2f892dee85500b22fca5ac49e0c42cfff101aaf9c12ac9617"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ee948c6c01f6b337589c88f8e0bb11e78d32a15848b8b53d3f3b6fea48842c12"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa6fe68f0981fba0d4bf9cdc666d297a7cdba0f1b380dcd075a9a3dd5649a69e"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dbcd7aad6bcff258f6896abfbc177d54d9b18149c4c561114f47ebfe74ae6bfd"}, + {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2149e2fcd084c3fd584881c7f9d7f9e5ad1e2e006609d8b80649655e0d52cd02"}, + {file = "orjson-3.10.13-cp311-cp311-win32.whl", hash = "sha256:89367767ed27b33c25c026696507c76e3d01958406f51d3a2239fe9e91959df2"}, + {file = "orjson-3.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:dca1d20f1af0daff511f6e26a27354a424f0b5cf00e04280279316df0f604a6f"}, + {file = "orjson-3.10.13-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a3614b00621c77f3f6487792238f9ed1dd8a42f2ec0e6540ee34c2d4e6db813a"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c976bad3996aa027cd3aef78aa57873f3c959b6c38719de9724b71bdc7bd14b"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f74d878d1efb97a930b8a9f9898890067707d683eb5c7e20730030ecb3fb930"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33ef84f7e9513fb13b3999c2a64b9ca9c8143f3da9722fbf9c9ce51ce0d8076e"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd2bcde107221bb9c2fa0c4aaba735a537225104173d7e19cf73f70b3126c993"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:064b9dbb0217fd64a8d016a8929f2fae6f3312d55ab3036b00b1d17399ab2f3e"}, + {file = "orjson-3.10.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0044b0b8c85a565e7c3ce0a72acc5d35cda60793edf871ed94711e712cb637d"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7184f608ad563032e398f311910bc536e62b9fbdca2041be889afcbc39500de8"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d36f689e7e1b9b6fb39dbdebc16a6f07cbe994d3644fb1c22953020fc575935f"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:54433e421618cd5873e51c0e9d0b9fb35f7bf76eb31c8eab20b3595bb713cd3d"}, + {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e1ba0c5857dd743438acecc1cd0e1adf83f0a81fee558e32b2b36f89e40cee8b"}, + {file = "orjson-3.10.13-cp312-cp312-win32.whl", hash = "sha256:a42b9fe4b0114b51eb5cdf9887d8c94447bc59df6dbb9c5884434eab947888d8"}, + {file = "orjson-3.10.13-cp312-cp312-win_amd64.whl", hash = "sha256:3a7df63076435f39ec024bdfeb4c9767ebe7b49abc4949068d61cf4857fa6d6c"}, + {file = "orjson-3.10.13-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2cdaf8b028a976ebab837a2c27b82810f7fc76ed9fb243755ba650cc83d07730"}, + {file = "orjson-3.10.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48a946796e390cbb803e069472de37f192b7a80f4ac82e16d6eb9909d9e39d56"}, + {file = "orjson-3.10.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d64f1db5ecbc21eb83097e5236d6ab7e86092c1cd4c216c02533332951afc"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:711878da48f89df194edd2ba603ad42e7afed74abcd2bac164685e7ec15f96de"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cf16f06cb77ce8baf844bc222dbcb03838f61d0abda2c3341400c2b7604e436e"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8257c3fb8dd7b0b446b5e87bf85a28e4071ac50f8c04b6ce2d38cb4abd7dff57"}, + {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9c3a87abe6f849a4a7ac8a8a1dede6320a4303d5304006b90da7a3cd2b70d2c"}, + {file = "orjson-3.10.13-cp313-cp313-win32.whl", hash = "sha256:527afb6ddb0fa3fe02f5d9fba4920d9d95da58917826a9be93e0242da8abe94a"}, + {file = "orjson-3.10.13-cp313-cp313-win_amd64.whl", hash = "sha256:b5f7c298d4b935b222f52d6c7f2ba5eafb59d690d9a3840b7b5c5cda97f6ec5c"}, + {file = "orjson-3.10.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e49333d1038bc03a25fdfe11c86360df9b890354bfe04215f1f54d030f33c342"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:003721c72930dbb973f25c5d8e68d0f023d6ed138b14830cc94e57c6805a2eab"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:63664bf12addb318dc8f032160e0f5dc17eb8471c93601e8f5e0d07f95003784"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6066729cf9552d70de297b56556d14b4f49c8f638803ee3c90fd212fa43cc6af"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a1152e2761025c5d13b5e1908d4b1c57f3797ba662e485ae6f26e4e0c466388"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b21d91c5c5ef8a201036d207b1adf3aa596b930b6ca3c71484dd11386cf6c3"}, + {file = "orjson-3.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b12a63f48bb53dba8453d36ca2661f2330126d54e26c1661e550b32864b28ce3"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a5a7624ab4d121c7e035708c8dd1f99c15ff155b69a1c0affc4d9d8b551281ba"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0fee076134398d4e6cb827002468679ad402b22269510cf228301b787fdff5ae"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ae537fcf330b3947e82c6ae4271e092e6cf16b9bc2cef68b14ffd0df1fa8832a"}, + {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f81b26c03f5fb5f0d0ee48d83cea4d7bc5e67e420d209cc1a990f5d1c62f9be0"}, + {file = "orjson-3.10.13-cp38-cp38-win32.whl", hash = "sha256:0bc858086088b39dc622bc8219e73d3f246fb2bce70a6104abd04b3a080a66a8"}, + {file = "orjson-3.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:3ca6f17467ebbd763f8862f1d89384a5051b461bb0e41074f583a0ebd7120e8e"}, + {file = "orjson-3.10.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4a11532cbfc2f5752c37e84863ef8435b68b0e6d459b329933294f65fa4bda1a"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c96d2fb80467d1d0dfc4d037b4e1c0f84f1fe6229aa7fea3f070083acef7f3d7"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dda4ba4d3e6f6c53b6b9c35266788053b61656a716a7fef5c884629c2a52e7aa"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f998bbf300690be881772ee9c5281eb9c0044e295bcd4722504f5b5c6092ff"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1cc42ed75b585c0c4dc5eb53a90a34ccb493c09a10750d1a1f9b9eff2bd12"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b0f29d485411e3c13d79604b740b14e4e5fb58811743f6f4f9693ee6480a8f"}, + {file = "orjson-3.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:233aae4474078d82f425134bb6a10fb2b3fc5a1a1b3420c6463ddd1b6a97eda8"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e384e330a67cf52b3597ee2646de63407da6f8fc9e9beec3eaaaef5514c7a1c9"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4222881d0aab76224d7b003a8e5fdae4082e32c86768e0e8652de8afd6c4e2c1"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e400436950ba42110a20c50c80dff4946c8e3ec09abc1c9cf5473467e83fd1c5"}, + {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f47c9e7d224b86ffb086059cdcf634f4b3f32480f9838864aa09022fe2617ce2"}, + {file = "orjson-3.10.13-cp39-cp39-win32.whl", hash = "sha256:a9ecea472f3eb653e1c0a3d68085f031f18fc501ea392b98dcca3e87c24f9ebe"}, + {file = "orjson-3.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:5385935a73adce85cc7faac9d396683fd813566d3857fa95a0b521ef84a5b588"}, + {file = "orjson-3.10.13.tar.gz", hash = "sha256:eb9bfb14ab8f68d9d9492d4817ae497788a15fd7da72e14dfabc289c3bb088ec"}, ] [[package]] @@ -1007,4 +1007,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e73a36a9983ec3dfaa1c08df0fdcc97daeaf9513ae47d89dcf86fc404e0354de" +content-hash = "183ba57707ae02b4b27fc68f294181edf9f15d33bd3c24dcfb58c9fdc4e3e93a" diff --git a/pyproject.toml b/pyproject.toml index bc6e6a0b..83794997 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^75.6.0" pook = "^2.0.1" -orjson = "^3.10.12" +orjson = "^3.10.13" [build-system] requires = ["poetry-core>=1.0.0"] From 0ebde261f6ba9005815e2c8de32efd7a97ae9bf1 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 8 Jan 2025 05:16:07 -0800 Subject: [PATCH 436/448] Spec update 2024-12-24 (#815) * Spec update 2024-12-24 * Added latest updates --- .polygon/rest.json | 457 +++++++++++++++++++++++++++++++++++++--- .polygon/websocket.json | 8 +- 2 files changed, 426 insertions(+), 39 deletions(-) diff --git a/.polygon/rest.json b/.polygon/rest.json index 4eb0f967..425d2c2d 100644 --- a/.polygon/rest.json +++ b/.polygon/rest.json @@ -14644,7 +14644,7 @@ "volume": 37 }, "ticker": "NCLH", - "type": "stock" + "type": "stocks" }, { "last_updated": 1679597116344223500, @@ -14895,6 +14895,16 @@ "format": "double", "type": "number" }, + "regular_trading_change": { + "description": "Today's change in regular trading hours, difference between current price and previous trading day's close, otherwise difference between today's close and previous day's close.", + "format": "double", + "type": "number" + }, + "regular_trading_change_percent": { + "description": "Today's regular trading change as a percentage.", + "format": "double", + "type": "number" + }, "volume": { "description": "The trading volume for the asset for the day.", "format": "double", @@ -14931,15 +14941,7 @@ } }, "required": [ - "ticker", - "name", - "price", - "branding", - "market_status", - "type", - "session", - "options", - "last_updated" + "ticker" ], "type": "object", "x-polygon-go-type": { @@ -18576,6 +18578,11 @@ "properties": { "sentiment": { "description": "The sentiment of the insight.", + "enum": [ + "positive", + "neutral", + "negative" + ], "type": "string" }, "sentiment_reasoning": { @@ -27213,8 +27220,6 @@ } }, "required": [ - "last_updated", - "timeframe", "ask", "bid", "last_updated", @@ -27288,9 +27293,6 @@ } }, "required": [ - "last_updated", - "timeframe", - "participant_timestamp", "price", "size" ], @@ -27378,6 +27380,16 @@ "format": "double", "type": "number" }, + "regular_trading_change": { + "description": "Today's change in regular trading hours, difference between current price and previous trading day's close, otherwise difference between today's close and previous day's close.", + "format": "double", + "type": "number" + }, + "regular_trading_change_percent": { + "description": "Today's regular trading change as a percentage.", + "format": "double", + "type": "number" + }, "volume": { "description": "The trading volume for the asset for the day.", "format": "double", @@ -27454,8 +27466,6 @@ } }, "required": [ - "last_updated", - "timeframe", "ticker", "change_to_break_even" ], @@ -27769,9 +27779,7 @@ } }, "required": [ - "ticker", - "timeframe", - "last_updated" + "ticker" ], "type": "object", "x-polygon-go-type": { @@ -28030,7 +28038,8 @@ "bid": 120.28, "bid_size": 8, "last_updated": 1605195918507251700, - "midpoint": 120.29 + "midpoint": 120.29, + "timeframe": "REAL-TIME" }, "last_trade": { "conditions": [ @@ -28131,7 +28140,6 @@ } }, "required": [ - "last_updated", "open", "high", "low", @@ -28305,8 +28313,6 @@ } }, "required": [ - "last_updated", - "timeframe", "ask", "ask_size", "bid_size", @@ -28359,7 +28365,6 @@ } }, "required": [ - "timeframe", "exchange", "price", "sip_timestamp", @@ -28416,8 +28421,6 @@ } }, "required": [ - "last_updated", - "timeframe", "ticker", "change_to_break_even" ], @@ -28432,7 +28435,6 @@ "last_quote", "underlying_asset", "details", - "cha", "break_even_price", "open_interest" ], @@ -28667,7 +28669,6 @@ } }, "required": [ - "last_updated", "open", "high", "low", @@ -28841,8 +28842,6 @@ } }, "required": [ - "last_updated", - "timeframe", "ask", "ask_size", "bid_size", @@ -28895,7 +28894,6 @@ } }, "required": [ - "timeframe", "exchange", "price", "sip_timestamp", @@ -28952,8 +28950,6 @@ } }, "required": [ - "last_updated", - "timeframe", "ticker", "change_to_break_even" ], @@ -28968,7 +28964,6 @@ "last_quote", "underlying_asset", "details", - "cha", "break_even_price", "open_interest" ], @@ -30502,6 +30497,388 @@ } } }, + "/vX/reference/ipos": { + "get": { + "description": "The IPOs API provides access to detailed information about Initial Public Offerings (IPOs), including both upcoming and historical events. With this API, you can query for a comprehensive list of IPOs, along with key details such as the issuer name, ticker symbol, ISIN, IPO date, number of shares offered, expected price range, and final offering price. You can filter the results by status to focus on new, rumors, pending, historical, and more.", + "operationId": "ListIPOs", + "parameters": [ + { + "description": "Specify a case-sensitive ticker symbol. For example, AAPL represents Apple Inc.", + "in": "query", + "name": "ticker", + "schema": { + "type": "string" + } + }, + { + "description": "Specify a us_code. This is a unique nine-character alphanumeric code that identifies a North American financial security for the purposes of facilitating clearing and settlement of trades.", + "in": "query", + "name": "us_code", + "schema": { + "type": "string" + } + }, + { + "description": "Specify an International Securities Identification Number (ISIN). This is a unique twelve-digit code that is assigned to every security issuance in the world.", + "in": "query", + "name": "isin", + "schema": { + "type": "string" + } + }, + { + "description": "Specify a listing date. This is the first trading date for the newly listed entity.", + "in": "query", + "name": "listing_date", + "schema": { + "format": "date", + "type": "string" + }, + "x-polygon-filter-field": { + "range": true, + "type": "string" + } + }, + { + "description": "Specify an IPO status.", + "in": "query", + "name": "ipo_status", + "schema": { + "enum": [ + "direct_listing_process", + "history", + "new", + "pending", + "postponed", + "rumor", + "withdrawn" + ], + "type": "string" + } + }, + { + "description": "Range by listing_date.", + "in": "query", + "name": "listing_date.gte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Range by listing_date.", + "in": "query", + "name": "listing_date.gt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Range by listing_date.", + "in": "query", + "name": "listing_date.lte", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Range by listing_date.", + "in": "query", + "name": "listing_date.lt", + "schema": { + "format": "date", + "type": "string" + } + }, + { + "description": "Order results based on the `sort` field.", + "in": "query", + "name": "order", + "schema": { + "default": "desc", + "enum": [ + "asc", + "desc" + ], + "example": "asc", + "type": "string" + } + }, + { + "description": "Limit the number of results returned, default is 10 and max is 1000.", + "in": "query", + "name": "limit", + "schema": { + "default": 10, + "example": 10, + "maximum": 1000, + "minimum": 1, + "type": "integer" + } + }, + { + "description": "Sort field used for ordering.", + "in": "query", + "name": "sort", + "schema": { + "default": "listing_date", + "enum": [ + "listing_date", + "ticker", + "last_updated", + "security_type", + "issuer_name", + "currency_code", + "isin", + "us_code", + "final_issue_price", + "min_shares_offered", + "max_shares_offered", + "lowest_offer_price", + "highest_offer_price", + "total_offer_size", + "shares_outstanding", + "primary_exchange", + "lot_size", + "security_description", + "ipo_status" + ], + "example": "listing_date", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "example": { + "next_url": "https://api.polygon.io/vX/reference/ipos?cursor=YWN0aXZlPXRydWUmZGF0ZT0yMDIxLTA0LTI1JmxpbWl0PTEmb3JkZXI9YXNjJnBhZ2VfbWFya2VyPUElN0M5YWRjMjY0ZTgyM2E1ZjBiOGUyNDc5YmZiOGE1YmYwNDVkYzU0YjgwMDcyMWE2YmI1ZjBjMjQwMjU4MjFmNGZiJnNvcnQ9dGlja2Vy", + "request_id": "6a7e466379af0a71039d60cc78e72282", + "results": [ + { + "currency_code": "USD", + "final_issue_price": 17, + "highest_offer_price": 17, + "ipo_status": "history", + "isin": "US75383L1026", + "issue_end_date": "2024-06-06", + "issue_start_date": "2024-06-01", + "issuer_name": "Rapport Therapeutics Inc.", + "last_updated": "2024-06-27", + "listing_date": "2024-06-07", + "lot_size": 100, + "lowest_offer_price": 17, + "max_shares_offered": 8000000, + "min_shares_offered": 1000000, + "primary_exchange": "XNAS", + "security_description": "Ordinary Shares", + "security_type": "CS", + "shares_outstanding": 35376457, + "ticker": "RAPP", + "total_offer_size": 136000000, + "us_code": "75383L102" + } + ], + "status": "OK" + }, + "schema": { + "properties": { + "next_url": { + "description": "If present, this value can be used to fetch the next page of data.", + "type": "string" + }, + "request_id": { + "description": "A request id assigned by the server.", + "type": "string" + }, + "results": { + "description": "An array of results containing the requested data.", + "items": { + "properties": { + "currency_code": { + "description": "Underlying currency of the security.", + "example": "USD", + "type": "string" + }, + "final_issue_price": { + "description": "The price set by the company and its underwriters before the IPO goes live.", + "example": 14.5, + "format": "float", + "type": "number" + }, + "highest_offer_price": { + "description": "The highest price within the IPO price range that the company might use to price the shares.", + "example": 20, + "format": "float", + "type": "number" + }, + "ipo_status": { + "description": "The status of the IPO event. IPO events start out as status \"rumor\" or \"pending\". On listing day, the status changes to \"new\". After the listing day, the status changes to \"history\".\n\nThe status \"direct_listing_process\" corresponds to a type of offering where, instead of going through all the IPO processes, the company decides to list its shares directly on an exchange, without using an investment bank or other intermediaries. This is called a direct listing, direct placement, or direct public offering (DPO).", + "enum": [ + "direct_listing_process", + "history", + "new", + "pending", + "postponed", + "rumor", + "withdrawn" + ], + "example": "history", + "type": "string" + }, + "isin": { + "description": "International Securities Identification Number. This is a unique twelve-digit code that is assigned to every security issuance in the world.", + "example": "US0378331005", + "type": "string" + }, + "issuer_name": { + "description": "Name of issuer.", + "example": "Apple Inc.", + "type": "string" + }, + "last_updated": { + "description": "The date when the IPO event was last modified.", + "example": "2023-01-02", + "format": "date", + "type": "string" + }, + "listing_date": { + "description": "First trading date for the newly listed entity.", + "example": "2023-02-01", + "format": "date", + "type": "string" + }, + "lot_size": { + "description": "The minimum number of shares that can be bought or sold in a single transaction.", + "example": 100, + "type": "number" + }, + "lowest_offer_price": { + "description": "The lowest price within the IPO price range that the company is willing to offer its shares to investors.", + "example": 10, + "format": "float", + "type": "number" + }, + "max_shares_offered": { + "description": "The upper limit of the shares that the company is offering to investors.", + "example": 1000, + "type": "number" + }, + "min_shares_offered": { + "description": "The lower limit of shares that the company is willing to sell in the IPO.", + "example": 1000, + "type": "number" + }, + "primary_exchange": { + "description": "Market Identifier Code (MIC) of the primary exchange where the security is listed. The Market Identifier Code (MIC) (ISO 10383) is a unique identification code used to identify securities trading exchanges, regulated and non-regulated trading markets.", + "example": "XNAS", + "type": "string" + }, + "security_description": { + "description": "Description of the security.", + "example": "Ordinary Shares - Class A", + "type": "string" + }, + "security_type": { + "description": "The classification of the stock. For example, \"CS\" stands for Common Stock.", + "example": "CS", + "type": "string" + }, + "shares_outstanding": { + "description": "The total number of shares that the company has issued and are held by investors.", + "example": 1000000, + "type": "number" + }, + "ticker": { + "description": "The ticker symbol of the IPO event.", + "example": "AAPL", + "type": "string" + }, + "total_offer_size": { + "description": "The total amount raised by the company for IPO.", + "example": 1000000, + "format": "float", + "type": "number" + }, + "us_code": { + "description": "This is a unique nine-character alphanumeric code that identifies a North American financial security for the purposes of facilitating clearing and settlement of trades.", + "example": 37833100, + "type": "string" + } + }, + "required": [ + "name", + "last_updated", + "primary_exchange", + "security_type", + "security_description", + "ipo_status" + ], + "type": "object", + "x-polygon-go-type": { + "name": "IPOsResult" + } + }, + "type": "array" + }, + "status": { + "description": "The status of this request's response.", + "type": "string" + } + }, + "type": "object" + } + } + }, + "description": "A list of IPO events." + } + }, + "summary": "IPOs", + "tags": [ + "reference:stocks:ipos" + ], + "x-polygon-entitlement-data-type": { + "description": "Reference data", + "name": "reference" + }, + "x-polygon-paginate": { + "limit": { + "default": 10, + "max": 1000 + }, + "order": { + "default": "desc" + }, + "sort": { + "default": "listing_date", + "enum": [ + "listing_date", + "ticker", + "last_updated", + "security_type", + "issuer_name", + "currency_code", + "isin", + "us_code", + "final_issue_price", + "min_shares_offered", + "max_shares_offered", + "lowest_offer_price", + "highest_offer_price", + "total_offer_size", + "shares_outstanding", + "primary_exchange", + "lot_size", + "security_description", + "ipo_status" + ] + } + } + } + }, "/vX/reference/tickers/taxonomies": { "get": { "description": "Many investors place a high value on sector data. It is used to measure economic activity, identify peers and competitors, build ETF products, quantify market share, and compare company performance. However, there are some limitations to industry standard sectors:\n* They have difficulty identifying the primary area of activity for large, complex businesses.\n* Studies confirm significant disagreement between classification schemes when attempting to categorize the same companies.\n* The systems' hierarchical nature is inflexible and struggles to convey business nuances.\n
\n
\nAs a result, we've developed a new taxonomy to supplement existing sector classifications. The taxonomy is created by reviewing related 10K filings to create a set of structured categories and tags.\n
\n
\nThe categories are based on company operating models and are industry agnostic. Our current version only supports one category, Revenue Streams, with future plans to support more.\n
\n
\nThe tags define a specific type within the category. Within the Revenue Streams category, for example, tags for \"product sales\" and \"advertising\" may be found. A company may have many tags in a given category. The complete Revenue Streams taxonomy is shown below.\n
\n
\nOur taxonomy is powered by AI and is currently in early beta testing. You should expect some inaccuracies in the responses.\n
\n
\n## **Revenue Streams**\n *Latest Revision (7/7/2023)*\n
\n
\n- **Physical Product Sales:**\n Revenue generated from the sale of tangible goods or physical products to customers, either in-store or online.\n - Consumer Goods\n - Industrial Goods\n - Electronics\n - Vehicles\n - Healthcare Products\n
\n
\n- **Digital Product Sales:**\n Revenue earned from the sale of digital goods or products, such as software licenses, e-books, music downloads, or digital media content. It also includes revenue obtained by selling aggregated, anonymized, or processed data to third parties for market research, analytics, or other purposes.\n - Software\n - E-books and Digital Media\n - Mobile Applications\n - Games\n - Online Courses\n - Market Research Data\n - Customer Behavior Data\n
\n
\n- **Professional Services:**\n Revenue obtained by providing specialized services, expertise, or consulting to clients in exchange for fees. This includes services offered by professionals such as lawyers, accountants, or consultants.\n - Consulting\n - Legal Services\n - Financial Services\n - Marketing Services\n - Construction Services\n - Education & Tutoring\n
\n
\n- **Consumer Services:**\n Revenue earned from providing services directly to consumers, including services like healthcare, personal grooming, fitness, or hospitality.\n - Dining & Hospitality\n - Personal Care\n - Entertainment & Recreation\n - Fitness & Wellness\n - Travel & Tourism\n - Transportation\n - Home Services\n - Child & Family Care\n - Automotive\n
\n
\n- **Subscription-based Revenue:**\n Revenue obtained from recurring fees charged to customers for accessing a product or service over a defined period. This includes revenue from subscription-based models, membership programs, or software-as-a-service (SaaS) offerings.\n - Software as a Service (SaaS)\n - Streaming Services\n - Physical Media\n - Memberships\n
\n
\n- **Licensing and Royalties:**\n Revenue generated from the licensing of intellectual property rights to third parties, including franchise rights, patent licensing, brand licensing, and the receipt of royalties for authorized use of intellectual property like music royalties, book royalties, or patent royalties.\n - Franchise Fees\n - Patent Licensing\n - Brand Licensing\n - Media Royalties\n
\n
\n- **Advertising:**\n Revenue generated by displaying ads or promotional content to customers, whether through traditional or digital advertising channels, including revenue from display ads, sponsored content, or affiliate marketing.\n - Print Advertising\n - Online Display Advertising\n - Social Media Advertising\n - Influencer Marketing\n
\n
\n- **Commission-Based Revenue:**\n Revenue earned by acting as an intermediary and receiving a percentage or commission on sales made on behalf of another party. This includes revenue from affiliate programs, referral fees, or any other commission-based revenue models.\n - Real Estate Commissions\n - Affiliate Marketing Commissions\n - Online Marketplace Commissions\n
\n
\n- **Rentals or Leasing:**\n Revenue earned by leasing or renting out assets, properties, or equipment to customers, including rental income from real estate properties, equipment leasing, or vehicle rentals.\n - Property Rentals\n - Equipment Leasing\n - Vehicle Rentals", @@ -31437,6 +31814,16 @@ "paths": [ "/v1/related-companies/{ticker}" ] + }, + { + "paths": [ + "/vX/reference/ipos" + ] + }, + { + "paths": [ + "/vX/reference/short-interest/{identifier_type}/{identifier}" + ] } ] } diff --git a/.polygon/websocket.json b/.polygon/websocket.json index f565e7d1..ff09762a 100644 --- a/.polygon/websocket.json +++ b/.polygon/websocket.json @@ -277,7 +277,7 @@ }, "t": { "type": "integer", - "description": "The Timestamp in Unix MS." + "description": "The SIP timestamp in Unix MS." }, "q": { "type": "integer", @@ -407,7 +407,7 @@ }, "t": { "type": "integer", - "description": "The Timestamp in Unix MS." + "description": "The SIP timestamp in Unix MS." }, "q": { "type": "integer", @@ -3972,7 +3972,7 @@ }, "t": { "type": "integer", - "description": "The Timestamp in Unix MS." + "description": "The SIP timestamp in Unix MS." }, "q": { "type": "integer", @@ -4041,7 +4041,7 @@ }, "t": { "type": "integer", - "description": "The Timestamp in Unix MS." + "description": "The SIP timestamp in Unix MS." }, "q": { "type": "integer", From d89bcecfa9c6f7beb7e518d6b47a108305e21e70 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 8 Jan 2025 05:23:31 -0800 Subject: [PATCH 437/448] Add IPOs support (#816) --- examples/rest/stocks-ipos.py | 13 ++++++++ polygon/rest/models/tickers.py | 57 ++++++++++++++++++++++++++++++++++ polygon/rest/vX.py | 45 +++++++++++++++++++++++++-- 3 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 examples/rest/stocks-ipos.py diff --git a/examples/rest/stocks-ipos.py b/examples/rest/stocks-ipos.py new file mode 100644 index 00000000..54852335 --- /dev/null +++ b/examples/rest/stocks-ipos.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/stocks/get_vx_reference_ipos + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +ipos = [] +for ipo in client.vx.list_ipos(ticker="RDDT"): + ipos.append(ipo) + +print(ipos) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 2554927e..317275ed 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -253,3 +253,60 @@ class TickerChangeResults: @staticmethod def from_dict(d): return TickerChangeResults(**d) + + +from typing import Optional +from ...modelclass import modelclass + + +@modelclass +class IPOListing: + """ + IPO Listing data as returned by the /vX/reference/ipos endpoint. + """ + + announced_date: Optional[str] = None + currency_code: Optional[str] = None + final_issue_price: Optional[float] = None + highest_offer_price: Optional[float] = None + ipo_status: Optional[str] = None + isin: Optional[str] = None + issuer_name: Optional[str] = None + last_updated: Optional[str] = None + listing_date: Optional[str] = None + lot_size: Optional[int] = None + lowest_offer_price: Optional[float] = None + max_shares_offered: Optional[int] = None + min_shares_offered: Optional[int] = None + primary_exchange: Optional[str] = None + security_description: Optional[str] = None + security_type: Optional[str] = None + shares_outstanding: Optional[int] = None + ticker: Optional[str] = None + total_offer_size: Optional[float] = None + us_code: Optional[str] = None + + @staticmethod + def from_dict(d): + return IPOListing( + announced_date=d.get("announced_date"), + currency_code=d.get("currency_code"), + final_issue_price=d.get("final_issue_price"), + highest_offer_price=d.get("highest_offer_price"), + ipo_status=d.get("ipo_status"), + isin=d.get("isin"), + issuer_name=d.get("issuer_name"), + last_updated=d.get("last_updated"), + listing_date=d.get("listing_date"), + lot_size=d.get("lot_size"), + lowest_offer_price=d.get("lowest_offer_price"), + max_shares_offered=d.get("max_shares_offered"), + min_shares_offered=d.get("min_shares_offered"), + primary_exchange=d.get("primary_exchange"), + security_description=d.get("security_description"), + security_type=d.get("security_type"), + shares_outstanding=d.get("shares_outstanding"), + ticker=d.get("ticker"), + total_offer_size=d.get("total_offer_size"), + us_code=d.get("us_code"), + ) diff --git a/polygon/rest/vX.py b/polygon/rest/vX.py index a7c13a2f..228134d4 100644 --- a/polygon/rest/vX.py +++ b/polygon/rest/vX.py @@ -1,6 +1,6 @@ from .base import BaseClient -from typing import Optional, Any, Dict, Union, Iterator -from .models import StockFinancial, Timeframe, Sort, Order +from typing import Optional, Any, Dict, List, Union, Iterator +from .models import StockFinancial, IPOListing, Timeframe, Sort, Order from urllib3 import HTTPResponse from datetime import datetime, date @@ -70,3 +70,44 @@ def list_stock_financials( deserializer=StockFinancial.from_dict, options=options, ) + + def list_ipos( + self, + ticker: Optional[str] = None, + us_code: Optional[str] = None, + isin: Optional[str] = None, + listing_date: Optional[str] = None, + ipo_status: 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, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[IPOListing], HTTPResponse]: + """ + Retrieve upcoming or historical IPOs. + + :param ticker: Filter by a case-sensitive ticker symbol. + :param us_code: Filter by a US code (unique identifier for a North American financial security). + :param isin: Filter by an International Securities Identification Number (ISIN). + :param listing_date: Filter by the listing date (YYYY-MM-DD). + :param ipo_status: Filter by IPO status (e.g. "new", "pending", "history", etc.). + :param limit: Limit the number of results per page. Default 10, max 1000. + :param sort: Field to sort by. Default is "listing_date". + :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". + :param params: Additional query params. + :param raw: Return raw HTTPResponse object if True, else return List[IPOListing]. + :param options: RequestOptionBuilder for additional headers or params. + :return: A list of IPOListing objects or HTTPResponse if raw=True. + """ + url = "/vX/reference/ipos" + + return self._paginate( + path=url, + params=self._get_params(self.list_ipos, locals()), + deserializer=IPOListing.from_dict, + raw=raw, + result_key="results", + options=options, + ) From bbf0b29b7ab9cc207f89fa94f36ba7facbb6f504 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 9 Jan 2025 08:03:02 -0800 Subject: [PATCH 438/448] Update StockFinancial model (net income, EPS, and parent net income loss) (#817) * Update StockFinancial model (net income, EPS, and parent net income loss) * Fix test * Patch json to remove other_than_fixed_noncurrent_assets * Removed top level values to match spec * Updated StockFinancial to remove nested values * Update comment * Remove vX experimental test * Refactored to use typed classes and explicit fields rather than raw dictionaries. * Fix lint --- examples/rest/stocks-stock_financials.py | 9 +- polygon/rest/models/financials.py | 721 ++++++++++++------- test_rest/mocks/vX/reference/financials.json | 6 - test_rest/test_financials.py | 234 ------ 4 files changed, 456 insertions(+), 514 deletions(-) delete mode 100644 test_rest/test_financials.py diff --git a/examples/rest/stocks-stock_financials.py b/examples/rest/stocks-stock_financials.py index dc356494..a75087e7 100644 --- a/examples/rest/stocks-stock_financials.py +++ b/examples/rest/stocks-stock_financials.py @@ -8,6 +8,13 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used financials = [] -for f in client.vx.list_stock_financials("AAPL"): +for f in client.vx.list_stock_financials("AAPL", filing_date="2024-11-01"): financials.append(f) + + # get diluted_earnings_per_share + # print(f.financials.income_statement.diluted_earnings_per_share) + + # get net_income_loss + # print(f.financials.income_statement.net_income_loss) + print(financials) diff --git a/polygon/rest/models/financials.py b/polygon/rest/models/financials.py index 1a480c48..5443e4f6 100644 --- a/polygon/rest/models/financials.py +++ b/polygon/rest/models/financials.py @@ -1,328 +1,503 @@ -from typing import Optional, Dict +from dataclasses import dataclass +from typing import Any, Dict, List, Optional from ...modelclass import modelclass @modelclass +@dataclass class DataPoint: - "An individual financial data point." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None + """Represents a single numeric or textual data point in the financials.""" - @staticmethod - def from_dict(d): - return DataPoint(**d) - - -@modelclass -class ExchangeGainsLosses: - "Contains exchange gains losses data for a cash flow statement." - formula: Optional[str] = None label: Optional[str] = None order: Optional[int] = None unit: Optional[str] = None value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return ExchangeGainsLosses(**d) - - -@modelclass -class NetCashFlow: - "Contains net cash flow data for a cash flow statement." + derived_from: Optional[List[str]] = None formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None + source: Optional[Dict[str, str]] = None xpath: Optional[str] = None @staticmethod - def from_dict(d): - return NetCashFlow(**d) + def from_dict(d: Optional[Dict[str, Any]]) -> "DataPoint": + if not d: + return DataPoint() + return DataPoint( + label=d.get("label"), + order=d.get("order"), + unit=d.get("unit"), + value=d.get("value"), + derived_from=d.get("derived_from"), + formula=d.get("formula"), + source=d.get("source"), + xpath=d.get("xpath"), + ) +@dataclass @modelclass -class NetCashFlowFromFinancingActivities: - "Contains net cash flow from financing activities data for a cash flow statement." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None +class BalanceSheet: + assets: Optional[DataPoint] = None + current_assets: Optional[DataPoint] = None + cash: Optional[DataPoint] = None + accounts_receivable: Optional[DataPoint] = None + inventory: Optional[DataPoint] = None + prepaid_expenses: Optional[DataPoint] = None + other_current_assets: Optional[DataPoint] = None + noncurrent_assets: Optional[DataPoint] = None + long_term_investments: Optional[DataPoint] = None + fixed_assets: Optional[DataPoint] = None + intangible_assets: Optional[DataPoint] = None + noncurrent_prepaid_expense: Optional[DataPoint] = None + other_noncurrent_assets: Optional[DataPoint] = None + liabilities: Optional[DataPoint] = None + current_liabilities: Optional[DataPoint] = None + accounts_payable: Optional[DataPoint] = None + interest_payable: Optional[DataPoint] = None + wages: Optional[DataPoint] = None + other_current_liabilities: Optional[DataPoint] = None + noncurrent_liabilities: Optional[DataPoint] = None + long_term_debt: Optional[DataPoint] = None + other_noncurrent_liabilities: Optional[DataPoint] = None + commitments_and_contingencies: Optional[DataPoint] = None + redeemable_noncontrolling_interest: Optional[DataPoint] = None + redeemable_noncontrolling_interest_common: Optional[DataPoint] = None + redeemable_noncontrolling_interest_other: Optional[DataPoint] = None + redeemable_noncontrolling_interest_preferred: Optional[DataPoint] = None + equity: Optional[DataPoint] = None + equity_attributable_to_noncontrolling_interest: Optional[DataPoint] = None + equity_attributable_to_parent: Optional[DataPoint] = None + temporary_equity: Optional[DataPoint] = None + temporary_equity_attributable_to_parent: Optional[DataPoint] = None + liabilities_and_equity: Optional[DataPoint] = None @staticmethod - def from_dict(d): - return NetCashFlowFromFinancingActivities(**d) + def from_dict(d: Optional[Dict[str, Any]]) -> "BalanceSheet": + if not d: + return BalanceSheet() + return BalanceSheet( + assets=DataPoint.from_dict(d.get("assets")), + current_assets=DataPoint.from_dict(d.get("current_assets")), + cash=DataPoint.from_dict(d.get("cash")), + accounts_receivable=DataPoint.from_dict(d.get("accounts_receivable")), + inventory=DataPoint.from_dict(d.get("inventory")), + prepaid_expenses=DataPoint.from_dict(d.get("prepaid_expenses")), + other_current_assets=DataPoint.from_dict(d.get("other_current_assets")), + noncurrent_assets=DataPoint.from_dict(d.get("noncurrent_assets")), + long_term_investments=DataPoint.from_dict(d.get("long_term_investments")), + fixed_assets=DataPoint.from_dict(d.get("fixed_assets")), + intangible_assets=DataPoint.from_dict(d.get("intangible_assets")), + noncurrent_prepaid_expense=DataPoint.from_dict( + d.get("noncurrent_prepaid_expense") + ), + other_noncurrent_assets=DataPoint.from_dict( + d.get("other_noncurrent_assets") + ), + liabilities=DataPoint.from_dict(d.get("liabilities")), + current_liabilities=DataPoint.from_dict(d.get("current_liabilities")), + accounts_payable=DataPoint.from_dict(d.get("accounts_payable")), + interest_payable=DataPoint.from_dict(d.get("interest_payable")), + wages=DataPoint.from_dict(d.get("wages")), + other_current_liabilities=DataPoint.from_dict( + d.get("other_current_liabilities") + ), + noncurrent_liabilities=DataPoint.from_dict(d.get("noncurrent_liabilities")), + long_term_debt=DataPoint.from_dict(d.get("long_term_debt")), + other_noncurrent_liabilities=DataPoint.from_dict( + d.get("other_noncurrent_liabilities") + ), + commitments_and_contingencies=DataPoint.from_dict( + d.get("commitments_and_contingencies") + ), + redeemable_noncontrolling_interest=DataPoint.from_dict( + d.get("redeemable_noncontrolling_interest") + ), + redeemable_noncontrolling_interest_common=DataPoint.from_dict( + d.get("redeemable_noncontrolling_interest_common") + ), + redeemable_noncontrolling_interest_other=DataPoint.from_dict( + d.get("redeemable_noncontrolling_interest_other") + ), + redeemable_noncontrolling_interest_preferred=DataPoint.from_dict( + d.get("redeemable_noncontrolling_interest_preferred") + ), + equity=DataPoint.from_dict(d.get("equity")), + equity_attributable_to_noncontrolling_interest=DataPoint.from_dict( + d.get("equity_attributable_to_noncontrolling_interest") + ), + equity_attributable_to_parent=DataPoint.from_dict( + d.get("equity_attributable_to_parent") + ), + temporary_equity=DataPoint.from_dict(d.get("temporary_equity")), + temporary_equity_attributable_to_parent=DataPoint.from_dict( + d.get("temporary_equity_attributable_to_parent") + ), + liabilities_and_equity=DataPoint.from_dict(d.get("liabilities_and_equity")), + ) +@dataclass @modelclass class CashFlowStatement: - "Contains cash flow statement data." - exchange_gains_losses: Optional[ExchangeGainsLosses] = None - net_cash_flow: Optional[NetCashFlow] = None - net_cash_flow_from_financing_activities: Optional[ - NetCashFlowFromFinancingActivities - ] = None + net_cash_flow_from_operating_activities: Optional[DataPoint] = None + net_cash_flow_from_operating_activities_continuing: Optional[DataPoint] = None + net_cash_flow_from_operating_activities_discontinued: Optional[DataPoint] = None + net_cash_flow_from_investing_activities: Optional[DataPoint] = None + net_cash_flow_from_investing_activities_continuing: Optional[DataPoint] = None + net_cash_flow_from_investing_activities_discontinued: Optional[DataPoint] = None + net_cash_flow_from_financing_activities: Optional[DataPoint] = None + net_cash_flow_from_financing_activities_continuing: Optional[DataPoint] = None + net_cash_flow_from_financing_activities_discontinued: Optional[DataPoint] = None + exchange_gains_losses: Optional[DataPoint] = None + net_cash_flow: Optional[DataPoint] = None + net_cash_flow_continuing: Optional[DataPoint] = None + net_cash_flow_discontinued: Optional[DataPoint] = None @staticmethod - def from_dict(d): + def from_dict(d: Optional[Dict[str, Any]]) -> "CashFlowStatement": + if not d: + return CashFlowStatement() return CashFlowStatement( - exchange_gains_losses=( - None - if "exchange_gains_losses" not in d - else ExchangeGainsLosses.from_dict(d["exchange_gains_losses"]) - ), - net_cash_flow=( - None - if "net_cash_flow" not in d - else NetCashFlow.from_dict(d["net_cash_flow"]) - ), - net_cash_flow_from_financing_activities=( - None - if "net_cash_flow_from_financing_activities" not in d - else NetCashFlowFromFinancingActivities.from_dict( - d["net_cash_flow_from_financing_activities"] - ) + net_cash_flow_from_operating_activities=DataPoint.from_dict( + d.get("net_cash_flow_from_operating_activities") + ), + net_cash_flow_from_operating_activities_continuing=DataPoint.from_dict( + d.get("net_cash_flow_from_operating_activities_continuing") + ), + net_cash_flow_from_operating_activities_discontinued=DataPoint.from_dict( + d.get("net_cash_flow_from_operating_activities_discontinued") + ), + net_cash_flow_from_investing_activities=DataPoint.from_dict( + d.get("net_cash_flow_from_investing_activities") + ), + net_cash_flow_from_investing_activities_continuing=DataPoint.from_dict( + d.get("net_cash_flow_from_investing_activities_continuing") + ), + net_cash_flow_from_investing_activities_discontinued=DataPoint.from_dict( + d.get("net_cash_flow_from_investing_activities_discontinued") + ), + net_cash_flow_from_financing_activities=DataPoint.from_dict( + d.get("net_cash_flow_from_financing_activities") + ), + net_cash_flow_from_financing_activities_continuing=DataPoint.from_dict( + d.get("net_cash_flow_from_financing_activities_continuing") + ), + net_cash_flow_from_financing_activities_discontinued=DataPoint.from_dict( + d.get("net_cash_flow_from_financing_activities_discontinued") + ), + exchange_gains_losses=DataPoint.from_dict(d.get("exchange_gains_losses")), + net_cash_flow=DataPoint.from_dict(d.get("net_cash_flow")), + net_cash_flow_continuing=DataPoint.from_dict( + d.get("net_cash_flow_continuing") + ), + net_cash_flow_discontinued=DataPoint.from_dict( + d.get("net_cash_flow_discontinued") ), ) -@modelclass -class ComprehensiveIncomeLoss: - "Contains comprehensive income loss data for comprehensive income." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return ComprehensiveIncomeLoss(**d) - - -@modelclass -class ComprehensiveIncomeLossAttributableToParent: - "Contains comprehensive income loss attributable to parent data for comprehensive income." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return ComprehensiveIncomeLossAttributableToParent(**d) - - -@modelclass -class OtherComprehensiveIncomeLoss: - "Contains other comprehensive income loss data for comprehensive income." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return OtherComprehensiveIncomeLoss(**d) - - +@dataclass @modelclass class ComprehensiveIncome: - "Contains comprehensive income data." - comprehensive_income_loss: Optional[ComprehensiveIncomeLoss] = None - comprehensive_income_loss_attributable_to_parent: Optional[ - ComprehensiveIncomeLossAttributableToParent + comprehensive_income_loss: Optional[DataPoint] = None + comprehensive_income_loss_attributable_to_noncontrolling_interest: Optional[ + DataPoint + ] = None + comprehensive_income_loss_attributable_to_parent: Optional[DataPoint] = None + other_comprehensive_income_loss: Optional[DataPoint] = None + other_comprehensive_income_loss_attributable_to_noncontrolling_interest: Optional[ + DataPoint ] = None - other_comprehensive_income_loss: Optional[OtherComprehensiveIncomeLoss] = None + other_comprehensive_income_loss_attributable_to_parent: Optional[DataPoint] = None @staticmethod - def from_dict(d): + def from_dict(d: Optional[Dict[str, Any]]) -> "ComprehensiveIncome": + if not d: + return ComprehensiveIncome() return ComprehensiveIncome( - comprehensive_income_loss=( - None - if "comprehensive_income_loss" not in d - else ComprehensiveIncomeLoss.from_dict(d["comprehensive_income_loss"]) - ), - comprehensive_income_loss_attributable_to_parent=( - None - if "comprehensive_income_loss_attributable_to_parent" not in d - else ComprehensiveIncomeLossAttributableToParent.from_dict( - d["comprehensive_income_loss_attributable_to_parent"] + comprehensive_income_loss=DataPoint.from_dict( + d.get("comprehensive_income_loss") + ), + comprehensive_income_loss_attributable_to_noncontrolling_interest=DataPoint.from_dict( + d.get( + "comprehensive_income_loss_attributable_to_noncontrolling_interest" ) ), - other_comprehensive_income_loss=( - None - if "other_comprehensive_income_loss" not in d - else OtherComprehensiveIncomeLoss.from_dict( - d["other_comprehensive_income_loss"] + comprehensive_income_loss_attributable_to_parent=DataPoint.from_dict( + d.get("comprehensive_income_loss_attributable_to_parent") + ), + other_comprehensive_income_loss=DataPoint.from_dict( + d.get("other_comprehensive_income_loss") + ), + other_comprehensive_income_loss_attributable_to_noncontrolling_interest=DataPoint.from_dict( + d.get( + "other_comprehensive_income_loss_attributable_to_noncontrolling_interest" ) ), + other_comprehensive_income_loss_attributable_to_parent=DataPoint.from_dict( + d.get("other_comprehensive_income_loss_attributable_to_parent") + ), ) -@modelclass -class BasicEarningsPerShare: - "Contains basic earning per share data for an income statement." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return BasicEarningsPerShare(**d) - - -@modelclass -class CostOfRevenue: - "Contains cost of revenue data for an income statement." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return CostOfRevenue(**d) - - -@modelclass -class GrossProfit: - "Contains gross profit data for an income statement." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return GrossProfit(**d) - - -@modelclass -class OperatingExpenses: - "Contains operating expenses data for an income statement." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return OperatingExpenses(**d) - - -@modelclass -class Revenues: - "Contains revenues data for an income statement." - formula: Optional[str] = None - label: Optional[str] = None - order: Optional[int] = None - unit: Optional[str] = None - value: Optional[float] = None - xpath: Optional[str] = None - - @staticmethod - def from_dict(d): - return Revenues(**d) - - +@dataclass @modelclass class IncomeStatement: - "Contains income statement data." - basic_earnings_per_share: Optional[BasicEarningsPerShare] = None - cost_of_revenue: Optional[CostOfRevenue] = None - gross_profit: Optional[GrossProfit] = None - operating_expenses: Optional[OperatingExpenses] = None - revenues: Optional[Revenues] = None + revenues: Optional[DataPoint] = None + benefits_costs_expenses: Optional[DataPoint] = None + cost_of_revenue: Optional[DataPoint] = None + cost_of_revenue_goods: Optional[DataPoint] = None + cost_of_revenue_services: Optional[DataPoint] = None + costs_and_expenses: Optional[DataPoint] = None + gross_profit: Optional[DataPoint] = None + gain_loss_on_sale_properties_net_tax: Optional[DataPoint] = None + nonoperating_income_loss: Optional[DataPoint] = None + operating_expenses: Optional[DataPoint] = None + selling_general_and_administrative_expenses: Optional[DataPoint] = None + depreciation_and_amortization: Optional[DataPoint] = None + research_and_development: Optional[DataPoint] = None + other_operating_expenses: Optional[DataPoint] = None + operating_income_loss: Optional[DataPoint] = None + other_operating_income_expenses: Optional[DataPoint] = None + income_loss_before_equity_method_investments: Optional[DataPoint] = None + income_loss_from_continuing_operations_after_tax: Optional[DataPoint] = None + income_loss_from_continuing_operations_before_tax: Optional[DataPoint] = None + income_loss_from_discontinued_operations_net_of_tax: Optional[DataPoint] = None + income_loss_from_discontinued_operations_net_of_tax_adjustment_to_prior_year_gain_loss_on_disposal: Optional[ + DataPoint + ] = None + income_loss_from_discontinued_operations_net_of_tax_during_phase_out: Optional[ + DataPoint + ] = None + income_loss_from_discontinued_operations_net_of_tax_gain_loss_on_disposal: Optional[ + DataPoint + ] = None + income_loss_from_discontinued_operations_net_of_tax_provision_for_gain_loss_on_disposal: Optional[ + DataPoint + ] = None + income_loss_from_equity_method_investments: Optional[DataPoint] = None + income_tax_expense_benefit: Optional[DataPoint] = None + income_tax_expense_benefit_current: Optional[DataPoint] = None + income_tax_expense_benefit_deferred: Optional[DataPoint] = None + interest_and_debt_expense: Optional[DataPoint] = None + interest_and_dividend_income_operating: Optional[DataPoint] = None + interest_expense_operating: Optional[DataPoint] = None + interest_income_expense_after_provision_for_losses: Optional[DataPoint] = None + interest_income_expense_operating_net: Optional[DataPoint] = None + noninterest_expense: Optional[DataPoint] = None + noninterest_income: Optional[DataPoint] = None + provision_for_loan_lease_and_other_losses: Optional[DataPoint] = None + net_income_loss: Optional[DataPoint] = None + net_income_loss_attributable_to_noncontrolling_interest: Optional[DataPoint] = None + net_income_loss_attributable_to_nonredeemable_noncontrolling_interest: Optional[ + DataPoint + ] = None + net_income_loss_attributable_to_parent: Optional[DataPoint] = None + net_income_loss_attributable_to_redeemable_noncontrolling_interest: Optional[ + DataPoint + ] = None + net_income_loss_available_to_common_stockholders_basic: Optional[DataPoint] = None + participating_securities_distributed_and_undistributed_earnings_loss_basic: ( + Optional[DataPoint] + ) = (None) + undistributed_earnings_loss_allocated_to_participating_securities_basic: Optional[ + DataPoint + ] = None + preferred_stock_dividends_and_other_adjustments: Optional[DataPoint] = None + basic_earnings_per_share: Optional[DataPoint] = None + diluted_earnings_per_share: Optional[DataPoint] = None + basic_average_shares: Optional[DataPoint] = None + diluted_average_shares: Optional[DataPoint] = None + common_stock_dividends: Optional[DataPoint] = None @staticmethod - def from_dict(d): + def from_dict(d: Optional[Dict[str, Any]]) -> "IncomeStatement": + if not d: + return IncomeStatement() return IncomeStatement( - basic_earnings_per_share=( - None - if "basic_earnings_per_share" not in d - else BasicEarningsPerShare.from_dict(d["basic_earnings_per_share"]) - ), - cost_of_revenue=( - None - if "cost_of_revenue" not in d - else CostOfRevenue.from_dict(d["cost_of_revenue"]) - ), - gross_profit=( - None - if "gross_profit" not in d - else GrossProfit.from_dict(d["gross_profit"]) - ), - operating_expenses=( - None - if "operating_expenses" not in d - else OperatingExpenses.from_dict(d["operating_expenses"]) - ), - revenues=None if "revenues" not in d else Revenues.from_dict(d["revenues"]), + revenues=DataPoint.from_dict(d.get("revenues")), + benefits_costs_expenses=DataPoint.from_dict( + d.get("benefits_costs_expenses") + ), + cost_of_revenue=DataPoint.from_dict(d.get("cost_of_revenue")), + cost_of_revenue_goods=DataPoint.from_dict(d.get("cost_of_revenue_goods")), + cost_of_revenue_services=DataPoint.from_dict( + d.get("cost_of_revenue_services") + ), + costs_and_expenses=DataPoint.from_dict(d.get("costs_and_expenses")), + gross_profit=DataPoint.from_dict(d.get("gross_profit")), + gain_loss_on_sale_properties_net_tax=DataPoint.from_dict( + d.get("gain_loss_on_sale_properties_net_tax") + ), + nonoperating_income_loss=DataPoint.from_dict( + d.get("nonoperating_income_loss") + ), + operating_expenses=DataPoint.from_dict(d.get("operating_expenses")), + selling_general_and_administrative_expenses=DataPoint.from_dict( + d.get("selling_general_and_administrative_expenses") + ), + depreciation_and_amortization=DataPoint.from_dict( + d.get("depreciation_and_amortization") + ), + research_and_development=DataPoint.from_dict( + d.get("research_and_development") + ), + other_operating_expenses=DataPoint.from_dict( + d.get("other_operating_expenses") + ), + operating_income_loss=DataPoint.from_dict(d.get("operating_income_loss")), + other_operating_income_expenses=DataPoint.from_dict( + d.get("other_operating_income_expenses") + ), + income_loss_before_equity_method_investments=DataPoint.from_dict( + d.get("income_loss_before_equity_method_investments") + ), + income_loss_from_continuing_operations_after_tax=DataPoint.from_dict( + d.get("income_loss_from_continuing_operations_after_tax") + ), + income_loss_from_continuing_operations_before_tax=DataPoint.from_dict( + d.get("income_loss_from_continuing_operations_before_tax") + ), + income_loss_from_discontinued_operations_net_of_tax=DataPoint.from_dict( + d.get("income_loss_from_discontinued_operations_net_of_tax") + ), + income_loss_from_discontinued_operations_net_of_tax_adjustment_to_prior_year_gain_loss_on_disposal=DataPoint.from_dict( + d.get( + "income_loss_from_discontinued_operations_net_of_tax_adjustment_to_prior_year_gain_loss_on_disposal" + ) + ), + income_loss_from_discontinued_operations_net_of_tax_during_phase_out=DataPoint.from_dict( + d.get( + "income_loss_from_discontinued_operations_net_of_tax_during_phase_out" + ) + ), + income_loss_from_discontinued_operations_net_of_tax_gain_loss_on_disposal=DataPoint.from_dict( + d.get( + "income_loss_from_discontinued_operations_net_of_tax_gain_loss_on_disposal" + ) + ), + income_loss_from_discontinued_operations_net_of_tax_provision_for_gain_loss_on_disposal=DataPoint.from_dict( + d.get( + "income_loss_from_discontinued_operations_net_of_tax_provision_for_gain_loss_on_disposal" + ) + ), + income_loss_from_equity_method_investments=DataPoint.from_dict( + d.get("income_loss_from_equity_method_investments") + ), + income_tax_expense_benefit=DataPoint.from_dict( + d.get("income_tax_expense_benefit") + ), + income_tax_expense_benefit_current=DataPoint.from_dict( + d.get("income_tax_expense_benefit_current") + ), + income_tax_expense_benefit_deferred=DataPoint.from_dict( + d.get("income_tax_expense_benefit_deferred") + ), + interest_and_debt_expense=DataPoint.from_dict( + d.get("interest_and_debt_expense") + ), + interest_and_dividend_income_operating=DataPoint.from_dict( + d.get("interest_and_dividend_income_operating") + ), + interest_expense_operating=DataPoint.from_dict( + d.get("interest_expense_operating") + ), + interest_income_expense_after_provision_for_losses=DataPoint.from_dict( + d.get("interest_income_expense_after_provision_for_losses") + ), + interest_income_expense_operating_net=DataPoint.from_dict( + d.get("interest_income_expense_operating_net") + ), + noninterest_expense=DataPoint.from_dict(d.get("noninterest_expense")), + noninterest_income=DataPoint.from_dict(d.get("noninterest_income")), + provision_for_loan_lease_and_other_losses=DataPoint.from_dict( + d.get("provision_for_loan_lease_and_other_losses") + ), + net_income_loss=DataPoint.from_dict(d.get("net_income_loss")), + net_income_loss_attributable_to_noncontrolling_interest=DataPoint.from_dict( + d.get("net_income_loss_attributable_to_noncontrolling_interest") + ), + net_income_loss_attributable_to_nonredeemable_noncontrolling_interest=DataPoint.from_dict( + d.get( + "net_income_loss_attributable_to_nonredeemable_noncontrolling_interest" + ) + ), + net_income_loss_attributable_to_parent=DataPoint.from_dict( + d.get("net_income_loss_attributable_to_parent") + ), + net_income_loss_attributable_to_redeemable_noncontrolling_interest=DataPoint.from_dict( + d.get( + "net_income_loss_attributable_to_redeemable_noncontrolling_interest" + ) + ), + net_income_loss_available_to_common_stockholders_basic=DataPoint.from_dict( + d.get("net_income_loss_available_to_common_stockholders_basic") + ), + participating_securities_distributed_and_undistributed_earnings_loss_basic=DataPoint.from_dict( + d.get( + "participating_securities_distributed_and_undistributed_earnings_loss_basic" + ) + ), + undistributed_earnings_loss_allocated_to_participating_securities_basic=DataPoint.from_dict( + d.get( + "undistributed_earnings_loss_allocated_to_participating_securities_basic" + ) + ), + preferred_stock_dividends_and_other_adjustments=DataPoint.from_dict( + d.get("preferred_stock_dividends_and_other_adjustments") + ), + basic_earnings_per_share=DataPoint.from_dict( + d.get("basic_earnings_per_share") + ), + diluted_earnings_per_share=DataPoint.from_dict( + d.get("diluted_earnings_per_share") + ), + basic_average_shares=DataPoint.from_dict(d.get("basic_average_shares")), + diluted_average_shares=DataPoint.from_dict(d.get("diluted_average_shares")), + common_stock_dividends=DataPoint.from_dict(d.get("common_stock_dividends")), ) +@dataclass @modelclass class Financials: - "Contains financial data." - balance_sheet: Optional[Dict[str, DataPoint]] = None + """ + Contains data for: + - balance_sheet (BalanceSheet) + - cash_flow_statement (CashFlowStatement) + - comprehensive_income (ComprehensiveIncome) + - income_statement (IncomeStatement) + """ + + balance_sheet: Optional[BalanceSheet] = None cash_flow_statement: Optional[CashFlowStatement] = None comprehensive_income: Optional[ComprehensiveIncome] = None income_statement: Optional[IncomeStatement] = None @staticmethod - def from_dict(d): + def from_dict(d: Optional[Dict[str, Any]]) -> "Financials": + if not d: + return Financials() return Financials( - balance_sheet=( - None - if "balance_sheet" not in d - else { - k: DataPoint.from_dict(v) for (k, v) in d["balance_sheet"].items() - } - ), - cash_flow_statement=( - None - if "cash_flow_statement" not in d - else CashFlowStatement.from_dict(d["cash_flow_statement"]) - ), - comprehensive_income=( - None - if "comprehensive_income" not in d - else ComprehensiveIncome.from_dict(d["comprehensive_income"]) - ), - income_statement=( - None - if "income_statement" not in d - else IncomeStatement.from_dict(d["income_statement"]) + balance_sheet=BalanceSheet.from_dict(d.get("balance_sheet")), + cash_flow_statement=CashFlowStatement.from_dict( + d.get("cash_flow_statement") + ), + comprehensive_income=ComprehensiveIncome.from_dict( + d.get("comprehensive_income") ), + income_statement=IncomeStatement.from_dict(d.get("income_statement")), ) +@dataclass @modelclass class StockFinancial: - "StockFinancial contains historical financial data for a stock ticker." + """ + StockFinancial contains historical financial data for a stock ticker. + The 'financials' attribute references an instance of Financials + which has typed sub-statements. + """ + cik: Optional[str] = None company_name: Optional[str] = None end_date: Optional[str] = None @@ -335,18 +510,18 @@ class StockFinancial: start_date: Optional[str] = None @staticmethod - def from_dict(d): + def from_dict(d: Optional[Dict[str, Any]]) -> "StockFinancial": + if not d: + return StockFinancial() return StockFinancial( - cik=d.get("cik", None), - company_name=d.get("company_name", None), - end_date=d.get("end_date", None), - filing_date=d.get("filing_date", None), - financials=( - None if "financials" not in d else Financials.from_dict(d["financials"]) - ), - fiscal_period=d.get("fiscal_period", None), - fiscal_year=d.get("fiscal_year", None), - source_filing_file_url=d.get("source_filing_file_url", None), - source_filing_url=d.get("source_filing_url", None), - start_date=d.get("start_date", None), + cik=d.get("cik"), + company_name=d.get("company_name"), + end_date=d.get("end_date"), + filing_date=d.get("filing_date"), + financials=Financials.from_dict(d.get("financials", {})), + fiscal_period=d.get("fiscal_period"), + fiscal_year=d.get("fiscal_year"), + source_filing_file_url=d.get("source_filing_file_url"), + source_filing_url=d.get("source_filing_url"), + start_date=d.get("start_date"), ) diff --git a/test_rest/mocks/vX/reference/financials.json b/test_rest/mocks/vX/reference/financials.json index c5e18621..ae84513b 100644 --- a/test_rest/mocks/vX/reference/financials.json +++ b/test_rest/mocks/vX/reference/financials.json @@ -45,12 +45,6 @@ "unit": "USD", "order": 400 }, - "other_than_fixed_noncurrent_assets": { - "label": "Other Than Fixed Noncurrent Assets", - "value": 1.6046e+10, - "unit": "USD", - "order": 500 - }, "noncurrent_liabilities": { "label": "Noncurrent Liabilities", "value": 1.1716e+10, diff --git a/test_rest/test_financials.py b/test_rest/test_financials.py deleted file mode 100644 index f5196212..00000000 --- a/test_rest/test_financials.py +++ /dev/null @@ -1,234 +0,0 @@ -from polygon.rest.models import ( - StockFinancial, - Financials, - DataPoint, - CashFlowStatement, - ExchangeGainsLosses, - NetCashFlow, - NetCashFlowFromFinancingActivities, - ComprehensiveIncome, - ComprehensiveIncomeLoss, - ComprehensiveIncomeLossAttributableToParent, - OtherComprehensiveIncomeLoss, - IncomeStatement, - BasicEarningsPerShare, - CostOfRevenue, - GrossProfit, - OperatingExpenses, - Revenues, -) -from base import BaseTest - - -class FinancialsTest(BaseTest): - def test_list_stock_financials(self): - financials = [f for f in self.c.vx.list_stock_financials()] - expected = [ - StockFinancial( - cik="0001413447", - company_name="NXP Semiconductors N.V.", - end_date="2022-04-03", - filing_date="2022-05-03", - financials=Financials( - balance_sheet={ - "equity_attributable_to_noncontrolling_interest": DataPoint( - formula=None, - label="Equity Attributable To Noncontrolling Interest", - order=1500, - unit="USD", - value=251000000.0, - xpath=None, - ), - "liabilities": DataPoint( - formula=None, - label="Liabilities", - order=600, - unit="USD", - value=14561000000.0, - xpath=None, - ), - "equity_attributable_to_parent": DataPoint( - formula=None, - label="Equity Attributable To Parent", - order=1600, - unit="USD", - value=6509000000.0, - xpath=None, - ), - "noncurrent_assets": DataPoint( - formula=None, - label="Noncurrent Assets", - order=300, - unit="USD", - value=16046000000.0, - xpath=None, - ), - "liabilities_and_equity": DataPoint( - formula=None, - label="Liabilities And Equity", - order=1900, - unit="USD", - value=21321000000.0, - xpath=None, - ), - "assets": DataPoint( - formula=None, - label="Assets", - order=100, - unit="USD", - value=21321000000.0, - xpath=None, - ), - "fixed_assets": DataPoint( - formula=None, - label="Fixed Assets", - order=400, - unit="USD", - value=2814000000.0, - xpath=None, - ), - "other_than_fixed_noncurrent_assets": DataPoint( - formula=None, - label="Other Than Fixed Noncurrent Assets", - order=500, - unit="USD", - value=16046000000.0, - xpath=None, - ), - "noncurrent_liabilities": DataPoint( - formula=None, - label="Noncurrent Liabilities", - order=800, - unit="USD", - value=11716000000.0, - xpath=None, - ), - "current_assets": DataPoint( - formula=None, - label="Current Assets", - order=200, - unit="USD", - value=5275000000.0, - xpath=None, - ), - "equity": DataPoint( - formula=None, - label="Equity", - order=1400, - unit="USD", - value=6760000000.0, - xpath=None, - ), - "current_liabilities": DataPoint( - formula=None, - label="Current Liabilities", - order=700, - unit="USD", - value=2845000000.0, - xpath=None, - ), - }, - cash_flow_statement=CashFlowStatement( - exchange_gains_losses=ExchangeGainsLosses( - formula=None, - label="Exchange Gains/Losses", - order=1000, - unit="USD", - value=0, - xpath=None, - ), - net_cash_flow=NetCashFlow( - formula=None, - label="Net Cash Flow", - order=1100, - unit="USD", - value=-147000000.0, - xpath=None, - ), - net_cash_flow_from_financing_activities=NetCashFlowFromFinancingActivities( - formula=None, - label="Net Cash Flow From Financing Activities", - order=700, - unit="USD", - value=-674000000.0, - xpath=None, - ), - ), - comprehensive_income=ComprehensiveIncome( - comprehensive_income_loss=ComprehensiveIncomeLoss( - formula=None, - label="Comprehensive Income/Loss", - order=100, - unit="USD", - value=644000000.0, - xpath=None, - ), - comprehensive_income_loss_attributable_to_parent=ComprehensiveIncomeLossAttributableToParent( - formula=None, - label="Comprehensive Income/Loss Attributable To Parent", - order=300, - unit="USD", - value=635000000.0, - xpath=None, - ), - other_comprehensive_income_loss=OtherComprehensiveIncomeLoss( - formula=None, - label="Other Comprehensive Income/Loss", - order=400, - unit="USD", - value=-22000000.0, - xpath=None, - ), - ), - income_statement=IncomeStatement( - basic_earnings_per_share=BasicEarningsPerShare( - formula=None, - label="Basic Earnings Per Share", - order=4200, - unit="USD / shares", - value=2.5, - xpath=None, - ), - cost_of_revenue=CostOfRevenue( - formula=None, - label="Cost Of Revenue", - order=300, - unit="USD", - value=1359000000.0, - xpath=None, - ), - gross_profit=GrossProfit( - formula=None, - label="Gross Profit", - order=800, - unit="USD", - value=1777000000.0, - xpath=None, - ), - operating_expenses=OperatingExpenses( - formula=None, - label="Operating Expenses", - order=1000, - unit="USD", - value=904000000.0, - xpath=None, - ), - revenues=Revenues( - formula=None, - label="Revenues", - order=100, - unit="USD", - value=3136000000.0, - xpath=None, - ), - ), - ), - fiscal_period="Q1", - fiscal_year="2022", - source_filing_file_url="https://api.polygon.io/v1/reference/sec/filings/0001413447-22-000014/files/nxpi-20220403_htm.xml", - source_filing_url="https://api.polygon.io/v1/reference/sec/filings/0001413447-22-000014", - start_date="2022-01-01", - ) - ] - - self.assertEqual(financials, expected) From bd9d53033800b5faf5a01034428e8c458fcd3e2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 07:57:46 -0800 Subject: [PATCH 439/448] Bump types-setuptools from 75.6.0.20241223 to 75.8.0.20250110 (#832) Bumps [types-setuptools](https://github.com/python/typeshed) from 75.6.0.20241223 to 75.8.0.20250110. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 59cdd317..1d16b476 100644 --- a/poetry.lock +++ b/poetry.lock @@ -835,13 +835,13 @@ files = [ [[package]] name = "types-setuptools" -version = "75.6.0.20241223" +version = "75.8.0.20250110" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types_setuptools-75.6.0.20241223-py3-none-any.whl", hash = "sha256:7cbfd3bf2944f88bbcdd321b86ddd878232a277be95d44c78a53585d78ebc2f6"}, - {file = "types_setuptools-75.6.0.20241223.tar.gz", hash = "sha256:d9478a985057ed48a994c707f548e55aababa85fe1c9b212f43ab5a1fffd3211"}, + {file = "types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480"}, + {file = "types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271"}, ] [[package]] @@ -1007,4 +1007,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "183ba57707ae02b4b27fc68f294181edf9f15d33bd3c24dcfb58c9fdc4e3e93a" +content-hash = "130d59d914473d618400749c700f19b082b5fe2d42ee47bb79bf97b8fa177445" diff --git a/pyproject.toml b/pyproject.toml index 83794997..922d4804 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ sphinx-rtd-theme = "^3.0.2" # keep this in sync with docs/requirements.txt for readthedocs.org sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" -types-setuptools = "^75.6.0" +types-setuptools = "^75.8.0" pook = "^2.0.1" orjson = "^3.10.13" From cbabb9ef70ecb43fe56e4958e53dba643ebe250b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 08:14:22 -0800 Subject: [PATCH 440/448] Bump orjson from 3.10.13 to 3.10.15 (#836) Bumps [orjson](https://github.com/ijl/orjson) from 3.10.13 to 3.10.15. - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.10.13...3.10.15) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 158 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 82 insertions(+), 78 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1d16b476..8627e329 100644 --- a/poetry.lock +++ b/poetry.lock @@ -390,86 +390,90 @@ six = ">=1.8.0" [[package]] name = "orjson" -version = "3.10.13" +version = "3.10.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.13-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1232c5e873a4d1638ef957c5564b4b0d6f2a6ab9e207a9b3de9de05a09d1d920"}, - {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26a0eca3035619fa366cbaf49af704c7cb1d4a0e6c79eced9f6a3f2437964b6"}, - {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d4b6acd7c9c829895e50d385a357d4b8c3fafc19c5989da2bae11783b0fd4977"}, - {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1884e53c6818686891cc6fc5a3a2540f2f35e8c76eac8dc3b40480fb59660b00"}, - {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a428afb5720f12892f64920acd2eeb4d996595bf168a26dd9190115dbf1130d"}, - {file = "orjson-3.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba5b13b8739ce5b630c65cb1c85aedbd257bcc2b9c256b06ab2605209af75a2e"}, - {file = "orjson-3.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cab83e67f6aabda1b45882254b2598b48b80ecc112968fc6483fa6dae609e9f0"}, - {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:62c3cc00c7e776c71c6b7b9c48c5d2701d4c04e7d1d7cdee3572998ee6dc57cc"}, - {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:dc03db4922e75bbc870b03fc49734cefbd50fe975e0878327d200022210b82d8"}, - {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:22f1c9a30b43d14a041a6ea190d9eca8a6b80c4beb0e8b67602c82d30d6eec3e"}, - {file = "orjson-3.10.13-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b42f56821c29e697c68d7d421410d7c1d8f064ae288b525af6a50cf99a4b1200"}, - {file = "orjson-3.10.13-cp310-cp310-win32.whl", hash = "sha256:0dbf3b97e52e093d7c3e93eb5eb5b31dc7535b33c2ad56872c83f0160f943487"}, - {file = "orjson-3.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:46c249b4e934453be4ff2e518cd1adcd90467da7391c7a79eaf2fbb79c51e8c7"}, - {file = "orjson-3.10.13-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a36c0d48d2f084c800763473020a12976996f1109e2fcb66cfea442fdf88047f"}, - {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0065896f85d9497990731dfd4a9991a45b0a524baec42ef0a63c34630ee26fd6"}, - {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:92b4ec30d6025a9dcdfe0df77063cbce238c08d0404471ed7a79f309364a3d19"}, - {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a94542d12271c30044dadad1125ee060e7a2048b6c7034e432e116077e1d13d2"}, - {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3723e137772639af8adb68230f2aa4bcb27c48b3335b1b1e2d49328fed5e244c"}, - {file = "orjson-3.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f00c7fb18843bad2ac42dc1ce6dd214a083c53f1e324a0fd1c8137c6436269b"}, - {file = "orjson-3.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0e2759d3172300b2f892dee85500b22fca5ac49e0c42cfff101aaf9c12ac9617"}, - {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ee948c6c01f6b337589c88f8e0bb11e78d32a15848b8b53d3f3b6fea48842c12"}, - {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:aa6fe68f0981fba0d4bf9cdc666d297a7cdba0f1b380dcd075a9a3dd5649a69e"}, - {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dbcd7aad6bcff258f6896abfbc177d54d9b18149c4c561114f47ebfe74ae6bfd"}, - {file = "orjson-3.10.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2149e2fcd084c3fd584881c7f9d7f9e5ad1e2e006609d8b80649655e0d52cd02"}, - {file = "orjson-3.10.13-cp311-cp311-win32.whl", hash = "sha256:89367767ed27b33c25c026696507c76e3d01958406f51d3a2239fe9e91959df2"}, - {file = "orjson-3.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:dca1d20f1af0daff511f6e26a27354a424f0b5cf00e04280279316df0f604a6f"}, - {file = "orjson-3.10.13-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a3614b00621c77f3f6487792238f9ed1dd8a42f2ec0e6540ee34c2d4e6db813a"}, - {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c976bad3996aa027cd3aef78aa57873f3c959b6c38719de9724b71bdc7bd14b"}, - {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f74d878d1efb97a930b8a9f9898890067707d683eb5c7e20730030ecb3fb930"}, - {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33ef84f7e9513fb13b3999c2a64b9ca9c8143f3da9722fbf9c9ce51ce0d8076e"}, - {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd2bcde107221bb9c2fa0c4aaba735a537225104173d7e19cf73f70b3126c993"}, - {file = "orjson-3.10.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:064b9dbb0217fd64a8d016a8929f2fae6f3312d55ab3036b00b1d17399ab2f3e"}, - {file = "orjson-3.10.13-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0044b0b8c85a565e7c3ce0a72acc5d35cda60793edf871ed94711e712cb637d"}, - {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7184f608ad563032e398f311910bc536e62b9fbdca2041be889afcbc39500de8"}, - {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d36f689e7e1b9b6fb39dbdebc16a6f07cbe994d3644fb1c22953020fc575935f"}, - {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:54433e421618cd5873e51c0e9d0b9fb35f7bf76eb31c8eab20b3595bb713cd3d"}, - {file = "orjson-3.10.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e1ba0c5857dd743438acecc1cd0e1adf83f0a81fee558e32b2b36f89e40cee8b"}, - {file = "orjson-3.10.13-cp312-cp312-win32.whl", hash = "sha256:a42b9fe4b0114b51eb5cdf9887d8c94447bc59df6dbb9c5884434eab947888d8"}, - {file = "orjson-3.10.13-cp312-cp312-win_amd64.whl", hash = "sha256:3a7df63076435f39ec024bdfeb4c9767ebe7b49abc4949068d61cf4857fa6d6c"}, - {file = "orjson-3.10.13-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2cdaf8b028a976ebab837a2c27b82810f7fc76ed9fb243755ba650cc83d07730"}, - {file = "orjson-3.10.13-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48a946796e390cbb803e069472de37f192b7a80f4ac82e16d6eb9909d9e39d56"}, - {file = "orjson-3.10.13-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d64f1db5ecbc21eb83097e5236d6ab7e86092c1cd4c216c02533332951afc"}, - {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:711878da48f89df194edd2ba603ad42e7afed74abcd2bac164685e7ec15f96de"}, - {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cf16f06cb77ce8baf844bc222dbcb03838f61d0abda2c3341400c2b7604e436e"}, - {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8257c3fb8dd7b0b446b5e87bf85a28e4071ac50f8c04b6ce2d38cb4abd7dff57"}, - {file = "orjson-3.10.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9c3a87abe6f849a4a7ac8a8a1dede6320a4303d5304006b90da7a3cd2b70d2c"}, - {file = "orjson-3.10.13-cp313-cp313-win32.whl", hash = "sha256:527afb6ddb0fa3fe02f5d9fba4920d9d95da58917826a9be93e0242da8abe94a"}, - {file = "orjson-3.10.13-cp313-cp313-win_amd64.whl", hash = "sha256:b5f7c298d4b935b222f52d6c7f2ba5eafb59d690d9a3840b7b5c5cda97f6ec5c"}, - {file = "orjson-3.10.13-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e49333d1038bc03a25fdfe11c86360df9b890354bfe04215f1f54d030f33c342"}, - {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:003721c72930dbb973f25c5d8e68d0f023d6ed138b14830cc94e57c6805a2eab"}, - {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:63664bf12addb318dc8f032160e0f5dc17eb8471c93601e8f5e0d07f95003784"}, - {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6066729cf9552d70de297b56556d14b4f49c8f638803ee3c90fd212fa43cc6af"}, - {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a1152e2761025c5d13b5e1908d4b1c57f3797ba662e485ae6f26e4e0c466388"}, - {file = "orjson-3.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69b21d91c5c5ef8a201036d207b1adf3aa596b930b6ca3c71484dd11386cf6c3"}, - {file = "orjson-3.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b12a63f48bb53dba8453d36ca2661f2330126d54e26c1661e550b32864b28ce3"}, - {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a5a7624ab4d121c7e035708c8dd1f99c15ff155b69a1c0affc4d9d8b551281ba"}, - {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0fee076134398d4e6cb827002468679ad402b22269510cf228301b787fdff5ae"}, - {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ae537fcf330b3947e82c6ae4271e092e6cf16b9bc2cef68b14ffd0df1fa8832a"}, - {file = "orjson-3.10.13-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f81b26c03f5fb5f0d0ee48d83cea4d7bc5e67e420d209cc1a990f5d1c62f9be0"}, - {file = "orjson-3.10.13-cp38-cp38-win32.whl", hash = "sha256:0bc858086088b39dc622bc8219e73d3f246fb2bce70a6104abd04b3a080a66a8"}, - {file = "orjson-3.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:3ca6f17467ebbd763f8862f1d89384a5051b461bb0e41074f583a0ebd7120e8e"}, - {file = "orjson-3.10.13-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4a11532cbfc2f5752c37e84863ef8435b68b0e6d459b329933294f65fa4bda1a"}, - {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c96d2fb80467d1d0dfc4d037b4e1c0f84f1fe6229aa7fea3f070083acef7f3d7"}, - {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dda4ba4d3e6f6c53b6b9c35266788053b61656a716a7fef5c884629c2a52e7aa"}, - {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f998bbf300690be881772ee9c5281eb9c0044e295bcd4722504f5b5c6092ff"}, - {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1cc42ed75b585c0c4dc5eb53a90a34ccb493c09a10750d1a1f9b9eff2bd12"}, - {file = "orjson-3.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b0f29d485411e3c13d79604b740b14e4e5fb58811743f6f4f9693ee6480a8f"}, - {file = "orjson-3.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:233aae4474078d82f425134bb6a10fb2b3fc5a1a1b3420c6463ddd1b6a97eda8"}, - {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e384e330a67cf52b3597ee2646de63407da6f8fc9e9beec3eaaaef5514c7a1c9"}, - {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4222881d0aab76224d7b003a8e5fdae4082e32c86768e0e8652de8afd6c4e2c1"}, - {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e400436950ba42110a20c50c80dff4946c8e3ec09abc1c9cf5473467e83fd1c5"}, - {file = "orjson-3.10.13-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f47c9e7d224b86ffb086059cdcf634f4b3f32480f9838864aa09022fe2617ce2"}, - {file = "orjson-3.10.13-cp39-cp39-win32.whl", hash = "sha256:a9ecea472f3eb653e1c0a3d68085f031f18fc501ea392b98dcca3e87c24f9ebe"}, - {file = "orjson-3.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:5385935a73adce85cc7faac9d396683fd813566d3857fa95a0b521ef84a5b588"}, - {file = "orjson-3.10.13.tar.gz", hash = "sha256:eb9bfb14ab8f68d9d9492d4817ae497788a15fd7da72e14dfabc289c3bb088ec"}, + {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf"}, + {file = "orjson-3.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182"}, + {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e"}, + {file = "orjson-3.10.15-cp310-cp310-win32.whl", hash = "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab"}, + {file = "orjson-3.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806"}, + {file = "orjson-3.10.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13"}, + {file = "orjson-3.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388"}, + {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c"}, + {file = "orjson-3.10.15-cp311-cp311-win32.whl", hash = "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e"}, + {file = "orjson-3.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e"}, + {file = "orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41"}, + {file = "orjson-3.10.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7"}, + {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a"}, + {file = "orjson-3.10.15-cp312-cp312-win32.whl", hash = "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665"}, + {file = "orjson-3.10.15-cp312-cp312-win_amd64.whl", hash = "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa"}, + {file = "orjson-3.10.15-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e"}, + {file = "orjson-3.10.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561"}, + {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825"}, + {file = "orjson-3.10.15-cp313-cp313-win32.whl", hash = "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890"}, + {file = "orjson-3.10.15-cp313-cp313-win_amd64.whl", hash = "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf"}, + {file = "orjson-3.10.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c"}, + {file = "orjson-3.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81"}, + {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528"}, + {file = "orjson-3.10.15-cp38-cp38-win32.whl", hash = "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60"}, + {file = "orjson-3.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1"}, + {file = "orjson-3.10.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8"}, + {file = "orjson-3.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a"}, + {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428"}, + {file = "orjson-3.10.15-cp39-cp39-win32.whl", hash = "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507"}, + {file = "orjson-3.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd"}, + {file = "orjson-3.10.15.tar.gz", hash = "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e"}, ] [[package]] @@ -1007,4 +1011,4 @@ test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-it [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "130d59d914473d618400749c700f19b082b5fe2d42ee47bb79bf97b8fa177445" +content-hash = "c80bc058f0871dd694ea1761d3266a1d46d0265b19312868ccc7e5cf3dbe3244" diff --git a/pyproject.toml b/pyproject.toml index 922d4804..6dc126b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ sphinx-autodoc-typehints = "^2.0.1" types-certifi = "^2021.10.8" types-setuptools = "^75.8.0" pook = "^2.0.1" -orjson = "^3.10.13" +orjson = "^3.10.15" [build-system] requires = ["poetry-core>=1.0.0"] From 4f54c2c72885d2630cb55832d414bbe1904d3574 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 8 Feb 2025 11:23:37 -0800 Subject: [PATCH 441/448] Bump certifi from 2024.12.14 to 2025.1.31 (#843) Bumps [certifi](https://github.com/certifi/python-certifi) from 2024.12.14 to 2025.1.31. - [Commits](https://github.com/certifi/python-certifi/compare/2024.12.14...2025.01.31) --- updated-dependencies: - dependency-name: certifi dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8627e329..3709112e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -90,13 +90,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2024.12.14" +version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, - {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] From a7c00b86bcf5b240dabf46e713a7577ba1630e67 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Thu, 20 Feb 2025 14:50:31 -0800 Subject: [PATCH 442/448] Adds IEX business feed (#852) --- polygon/websocket/models/common.py | 1 + 1 file changed, 1 insertion(+) diff --git a/polygon/websocket/models/common.py b/polygon/websocket/models/common.py index b39f9f87..38aea4c4 100644 --- a/polygon/websocket/models/common.py +++ b/polygon/websocket/models/common.py @@ -11,6 +11,7 @@ class Feed(Enum): Launchpad = "launchpad.polygon.io" Business = "business.polygon.io" EdgxBusiness = "edgx-business.polygon.io" + IEXBusiness = "iex-business.polygon.io" DelayedBusiness = "delayed-business.polygon.io" DelayedEdgxBusiness = "delayed-edgx-business.polygon.io" DelayedNasdaqLastSaleBusiness = "delayed-nasdaq-last-sale-business.polygon.io" From 24eabb9e84b4a6cb9fadb5fa623437129b414a6f Mon Sep 17 00:00:00 2001 From: Hamir Mahal Date: Wed, 23 Apr 2025 11:11:25 -0700 Subject: [PATCH 443/448] fix: usage of deprecated `CodeQL Action` version (#873) * chore: changes from formatting on save * fix: usage of deprecated `CodeQL Action` version --- .github/workflows/codeql.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 313c2716..f0767d70 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -7,7 +7,7 @@ on: branches: - master schedule: - - cron: '33 12 * * 3' + - cron: "33 12 * * 3" jobs: analyze: name: analyze @@ -19,15 +19,15 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'python' ] + language: ["python"] steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + - name: Checkout repository + uses: actions/checkout@v3 + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 From 83b28f3ae0111f023c12887634ec39d5fa7fa713 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 11:19:35 -0700 Subject: [PATCH 444/448] Bump jinja2 from 3.1.5 to 3.1.6 (#874) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.5 to 3.1.6. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/3.1.5...3.1.6) --- updated-dependencies: - dependency-name: jinja2 dependency-version: 3.1.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 83 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 13 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3709112e..8a686894 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "alabaster" @@ -6,6 +6,7 @@ version = "0.7.12" description = "A configurable sidebar-enabled Sphinx theme" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, @@ -17,16 +18,17 @@ version = "22.1.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, ] [package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] +tests-no-zope = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] [[package]] name = "Babel" @@ -34,6 +36,7 @@ version = "2.11.0" description = "Internationalization utilities" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "Babel-2.11.0-py3-none-any.whl", hash = "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe"}, {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"}, @@ -48,6 +51,7 @@ version = "24.8.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, @@ -84,7 +88,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.7.4) ; sys_platform != \"win32\" or implementation_name != \"pypy\"", "aiohttp (>=3.7.4,!=3.9.0) ; sys_platform == \"win32\" and implementation_name == \"pypy\""] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -94,6 +98,7 @@ version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, @@ -105,6 +110,7 @@ version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.6.0" +groups = ["dev"] files = [ {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, @@ -119,6 +125,7 @@ version = "8.1.3" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, @@ -133,6 +140,8 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "sys_platform == \"win32\" or platform_system == \"Windows\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -144,6 +153,7 @@ version = "0.18.1" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["dev"] files = [ {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, @@ -155,6 +165,7 @@ version = "2.1.3" description = "URL manipulation made simple." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "furl-2.1.3-py2.py3-none-any.whl", hash = "sha256:9ab425062c4217f9802508e45feb4a83e54324273ac4b202f1850363309666c0"}, {file = "furl-2.1.3.tar.gz", hash = "sha256:5a6188fe2666c484a12159c18be97a1977a71d632ef5bb867ef15f54af39cc4e"}, @@ -170,6 +181,7 @@ version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, @@ -181,6 +193,7 @@ version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -192,6 +205,8 @@ version = "5.1.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"}, {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"}, @@ -203,7 +218,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] perf = ["ipython"] -testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8 ; python_version < \"3.12\"", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf (>=0.9.2)"] [[package]] name = "importlib-resources" @@ -211,6 +226,8 @@ version = "5.10.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.9\"" files = [ {file = "importlib_resources-5.10.0-py3-none-any.whl", hash = "sha256:ee17ec648f85480d523596ce49eae8ead87d5631ae1551f913c0100b5edd3437"}, {file = "importlib_resources-5.10.0.tar.gz", hash = "sha256:c01b1b94210d9849f286b86bb51bcea7cd56dde0600d8db721d7b81330711668"}, @@ -221,17 +238,18 @@ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\""] [[package]] name = "jinja2" -version = "3.1.5" +version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ - {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, - {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] [package.dependencies] @@ -246,6 +264,7 @@ version = "4.17.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "jsonschema-4.17.1-py3-none-any.whl", hash = "sha256:410ef23dcdbca4eaedc08b850079179883c2ed09378bd1f760d4af4aacfa28d7"}, {file = "jsonschema-4.17.1.tar.gz", hash = "sha256:05b2d22c83640cde0b7e0aa329ca7754fbd98ea66ad8ae24aa61328dfe057fa3"}, @@ -267,6 +286,7 @@ version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, @@ -316,6 +336,7 @@ version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, @@ -369,6 +390,7 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -380,6 +402,7 @@ version = "1.0.1" description = "Ordered Multivalue Dictionary" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "orderedmultidict-1.0.1-py2.py3-none-any.whl", hash = "sha256:43c839a17ee3cdd62234c47deca1a8508a3f2ca1d0678a3bf791c87cf84adbf3"}, {file = "orderedmultidict-1.0.1.tar.gz", hash = "sha256:04070bbb5e87291cc9bfa51df413677faf2141c73c61d2a5f7b26bea3cd882ad"}, @@ -394,6 +417,7 @@ version = "3.10.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, @@ -482,6 +506,7 @@ version = "23.1" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, @@ -493,6 +518,7 @@ version = "0.10.2" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, @@ -504,6 +530,8 @@ version = "1.3.10" description = "Resolve a name to an object." optional = false python-versions = ">=3.6" +groups = ["dev"] +markers = "python_version < \"3.9\"" files = [ {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, @@ -515,6 +543,7 @@ version = "2.5.4" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "platformdirs-2.5.4-py3-none-any.whl", hash = "sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10"}, {file = "platformdirs-2.5.4.tar.gz", hash = "sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7"}, @@ -530,6 +559,7 @@ version = "2.0.1" description = "HTTP traffic mocking and expectations made easy" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pook-2.0.1-py3-none-any.whl", hash = "sha256:30d73c95e0520f45c1e3889f3bf486e990b6f04b4915aa9daf86cf0d8136b2e1"}, {file = "pook-2.0.1.tar.gz", hash = "sha256:e04c0e698f256438b4dfbf3ab1b27559f0ec25e42176823167f321f4e8b9c9e4"}, @@ -546,13 +576,14 @@ version = "2.15.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, ] [package.extras] -plugins = ["importlib-metadata"] +plugins = ["importlib-metadata ; python_version < \"3.8\""] [[package]] name = "pyrsistent" @@ -560,6 +591,7 @@ version = "0.19.2" description = "Persistent/Functional/Immutable data structures" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, @@ -591,6 +623,7 @@ version = "2022.6" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, @@ -602,6 +635,7 @@ version = "2.32.0" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"}, {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"}, @@ -623,6 +657,7 @@ version = "1.16.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["dev"] files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -634,6 +669,7 @@ version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, @@ -645,6 +681,7 @@ version = "7.1.2" description = "Python documentation generator" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, @@ -680,6 +717,7 @@ version = "2.0.1" description = "Type hints (PEP 484) support for the Sphinx autodoc extension" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "sphinx_autodoc_typehints-2.0.1-py3-none-any.whl", hash = "sha256:f73ae89b43a799e587e39266672c1075b2ef783aeb382d3ebed77c38a3fc0149"}, {file = "sphinx_autodoc_typehints-2.0.1.tar.gz", hash = "sha256:60ed1e3b2c970acc0aa6e877be42d48029a9faec7378a17838716cacd8c10b12"}, @@ -699,6 +737,7 @@ version = "3.0.2" description = "Read the Docs theme for Sphinx" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", hash = "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13"}, {file = "sphinx_rtd_theme-3.0.2.tar.gz", hash = "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85"}, @@ -718,6 +757,7 @@ version = "1.0.2" description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, @@ -733,6 +773,7 @@ version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, @@ -748,6 +789,7 @@ version = "2.0.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, @@ -763,6 +805,7 @@ version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" optional = false python-versions = ">=2.7" +groups = ["dev"] files = [ {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, @@ -777,6 +820,7 @@ version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -791,6 +835,7 @@ version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, @@ -806,6 +851,7 @@ version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, @@ -821,6 +867,8 @@ version = "2.0.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, @@ -832,6 +880,7 @@ version = "2021.10.8.3" description = "Typing stubs for certifi" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, @@ -843,6 +892,7 @@ version = "75.8.0.20250110" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480"}, {file = "types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271"}, @@ -854,6 +904,7 @@ version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, @@ -865,6 +916,7 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -876,13 +928,14 @@ version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -893,6 +946,7 @@ version = "13.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, @@ -988,6 +1042,7 @@ version = "0.13.0" description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.4" +groups = ["dev"] files = [ {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, @@ -999,6 +1054,8 @@ version = "3.19.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ {file = "zipp-3.19.1-py3-none-any.whl", hash = "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091"}, {file = "zipp-3.19.1.tar.gz", hash = "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f"}, @@ -1009,6 +1066,6 @@ doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linke test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = "^3.8" content-hash = "c80bc058f0871dd694ea1761d3266a1d46d0265b19312868ccc7e5cf3dbe3244" From 1cb16d382812eb402d2b6f6f3335bf0f59f1470c Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Wed, 23 Apr 2025 15:45:25 -0700 Subject: [PATCH 445/448] Adds IPOs, Short Interest/Volume, and Treasury Yields (#875) * Adds IPOs, Short Interest/Volume, and Treasury Yields * Fix docs url --- examples/rest/economy-treasury_yields.py | 13 ++ examples/rest/stocks-ipos.py | 2 +- examples/rest/stocks-short_interest.py | 13 ++ examples/rest/stocks-short_volume.py | 13 ++ polygon/rest/models/tickers.py | 112 +++++++++++++- polygon/rest/vX.py | 183 ++++++++++++++++++++++- 6 files changed, 328 insertions(+), 8 deletions(-) create mode 100644 examples/rest/economy-treasury_yields.py create mode 100644 examples/rest/stocks-short_interest.py create mode 100644 examples/rest/stocks-short_volume.py diff --git a/examples/rest/economy-treasury_yields.py b/examples/rest/economy-treasury_yields.py new file mode 100644 index 00000000..011b1866 --- /dev/null +++ b/examples/rest/economy-treasury_yields.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/rest/economy/treasury-yields + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +yields = [] +for date in client.vx.list_treasury_yields(): + yields.append(date) + +print(yields) diff --git a/examples/rest/stocks-ipos.py b/examples/rest/stocks-ipos.py index 54852335..cc09f61b 100644 --- a/examples/rest/stocks-ipos.py +++ b/examples/rest/stocks-ipos.py @@ -1,7 +1,7 @@ from polygon import RESTClient # docs -# https://polygon.io/docs/stocks/get_vx_reference_ipos +# https://polygon.io/docs/rest/stocks/corporate-actions/ipos # client = RESTClient("XXXXXX") # hardcoded api_key is used client = RESTClient() # POLYGON_API_KEY environment variable is used diff --git a/examples/rest/stocks-short_interest.py b/examples/rest/stocks-short_interest.py new file mode 100644 index 00000000..3b64cd2a --- /dev/null +++ b/examples/rest/stocks-short_interest.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/rest/stocks/fundamentals/short-interest + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +items = [] +for item in client.vx.list_short_interest(ticker="RDDT"): + items.append(item) + +print(items) diff --git a/examples/rest/stocks-short_volume.py b/examples/rest/stocks-short_volume.py new file mode 100644 index 00000000..711bfd47 --- /dev/null +++ b/examples/rest/stocks-short_volume.py @@ -0,0 +1,13 @@ +from polygon import RESTClient + +# docs +# https://polygon.io/docs/rest/stocks/fundamentals/short-volume + +# client = RESTClient("XXXXXX") # hardcoded api_key is used +client = RESTClient() # POLYGON_API_KEY environment variable is used + +items = [] +for item in client.vx.list_short_volume(ticker="RDDT"): + items.append(item) + +print(items) diff --git a/polygon/rest/models/tickers.py b/polygon/rest/models/tickers.py index 317275ed..76cb6f6f 100644 --- a/polygon/rest/models/tickers.py +++ b/polygon/rest/models/tickers.py @@ -1,5 +1,4 @@ from typing import Optional, List - from ...modelclass import modelclass @@ -255,10 +254,6 @@ def from_dict(d): return TickerChangeResults(**d) -from typing import Optional -from ...modelclass import modelclass - - @modelclass class IPOListing: """ @@ -310,3 +305,110 @@ def from_dict(d): total_offer_size=d.get("total_offer_size"), us_code=d.get("us_code"), ) + + +@modelclass +class ShortInterest: + """ + Short Interest data for a specific identifier. + """ + + avg_daily_volume: Optional[int] = None + days_to_cover: Optional[float] = None + settlement_date: Optional[str] = None + short_interest: Optional[int] = None + ticker: Optional[str] = None + + @staticmethod + def from_dict(d): + return ShortInterest( + avg_daily_volume=d.get("avg_daily_volume"), + days_to_cover=d.get("days_to_cover"), + settlement_date=d.get("settlement_date"), + short_interest=d.get("short_interest"), + ticker=d.get("ticker"), + ) + + +@modelclass +class ShortVolume: + """ + Short Volume data for a specific identifier on a given date. + """ + + adf_short_volume: Optional[int] = None + adf_short_volume_exempt: Optional[int] = None + date: Optional[str] = None + exempt_volume: Optional[int] = None + nasdaq_carteret_short_volume: Optional[int] = None + nasdaq_carteret_short_volume_exempt: Optional[int] = None + nasdaq_chicago_short_volume: Optional[int] = None + nasdaq_chicago_short_volume_exempt: Optional[int] = None + non_exempt_volume: Optional[int] = None + nyse_short_volume: Optional[int] = None + nyse_short_volume_exempt: Optional[int] = None + short_volume: Optional[int] = None + short_volume_ratio: Optional[float] = None + ticker: Optional[str] = None + total_volume: Optional[int] = None + + @staticmethod + def from_dict(d): + return ShortVolume( + adf_short_volume=d.get("adf_short_volume"), + adf_short_volume_exempt=d.get("adf_short_volume_exempt"), + date=d.get("date"), + exempt_volume=d.get("exempt_volume"), + nasdaq_carteret_short_volume=d.get("nasdaq_carteret_short_volume"), + nasdaq_carteret_short_volume_exempt=d.get( + "nasdaq_carteret_short_volume_exempt" + ), + nasdaq_chicago_short_volume=d.get("nasdaq_chicago_short_volume"), + nasdaq_chicago_short_volume_exempt=d.get( + "nasdaq_chicago_short_volume_exempt" + ), + non_exempt_volume=d.get("non_exempt_volume"), + nyse_short_volume=d.get("nyse_short_volume"), + nyse_short_volume_exempt=d.get("nyse_short_volume_exempt"), + short_volume=d.get("short_volume"), + short_volume_ratio=d.get("short_volume_ratio"), + ticker=d.get("ticker"), + total_volume=d.get("total_volume"), + ) + + +@modelclass +class TreasuryYield: + """ + Treasury yield data for a specific date. + """ + + date: Optional[str] = None + yield_1_month: Optional[float] = None + yield_3_month: Optional[float] = None + yield_6_month: Optional[float] = None + yield_1_year: Optional[float] = None + yield_2_year: Optional[float] = None + yield_3_year: Optional[float] = None + yield_5_year: Optional[float] = None + yield_7_year: Optional[float] = None + yield_10_year: Optional[float] = None + yield_20_year: Optional[float] = None + yield_30_year: Optional[float] = None + + @staticmethod + def from_dict(d): + return TreasuryYield( + date=d.get("date"), + yield_1_month=d.get("yield_1_month"), + yield_3_month=d.get("yield_3_month"), + yield_6_month=d.get("yield_6_month"), + yield_1_year=d.get("yield_1_year"), + yield_2_year=d.get("yield_2_year"), + yield_3_year=d.get("yield_3_year"), + yield_5_year=d.get("yield_5_year"), + yield_7_year=d.get("yield_7_year"), + yield_10_year=d.get("yield_10_year"), + yield_20_year=d.get("yield_20_year"), + yield_30_year=d.get("yield_30_year"), + ) diff --git a/polygon/rest/vX.py b/polygon/rest/vX.py index 228134d4..23f0e94e 100644 --- a/polygon/rest/vX.py +++ b/polygon/rest/vX.py @@ -1,9 +1,17 @@ from .base import BaseClient from typing import Optional, Any, Dict, List, Union, Iterator -from .models import StockFinancial, IPOListing, Timeframe, Sort, Order +from .models import ( + StockFinancial, + IPOListing, + ShortInterest, + ShortVolume, + TreasuryYield, + Timeframe, + Sort, + Order, +) from urllib3 import HTTPResponse from datetime import datetime, date - from .models.request import RequestOptionBuilder @@ -77,6 +85,10 @@ def list_ipos( us_code: Optional[str] = None, isin: Optional[str] = None, listing_date: Optional[str] = None, + listing_date_lt: Optional[str] = None, + listing_date_lte: Optional[str] = None, + listing_date_gt: Optional[str] = None, + listing_date_gte: Optional[str] = None, ipo_status: Optional[str] = None, limit: Optional[int] = None, sort: Optional[Union[str, Sort]] = None, @@ -111,3 +123,170 @@ def list_ipos( result_key="results", options=options, ) + + def list_short_interest( + self, + ticker: Optional[str] = None, + days_to_cover: Optional[str] = None, + days_to_cover_lt: Optional[str] = None, + days_to_cover_lte: Optional[str] = None, + days_to_cover_gt: Optional[str] = None, + days_to_cover_gte: Optional[str] = None, + settlement_date: Optional[str] = None, + settlement_date_lt: Optional[str] = None, + settlement_date_lte: Optional[str] = None, + settlement_date_gt: Optional[str] = None, + settlement_date_gte: Optional[str] = None, + avg_daily_volume: Optional[str] = None, + avg_daily_volume_lt: Optional[str] = None, + avg_daily_volume_lte: Optional[str] = None, + avg_daily_volume_gt: Optional[str] = None, + avg_daily_volume_gte: 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, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[ShortInterest], HTTPResponse]: + """ + Retrieve short interest data for stocks. + + :param ticker: Filter by the primary ticker symbol. + :param days_to_cover: Filter by the days to cover value. + :param days_to_cover_lt: Filter for days to cover dates less than the provided date. + :param days_to_cover_lte: Filter for days to cover dates less than or equal to the provided date. + :param days_to_cover_gt: Filter for days to cover dates greater than the provided date. + :param days_to_cover_gte: Filter for days to cover dates greater than or equal to the provided date. + :param settlement_date: Filter by settlement date (YYYY-MM-DD). + :param settlement_date_lt: Filter for settlement dates less than the provided date. + :param settlement_date_lte: Filter for settlement dates less than or equal to the provided date. + :param settlement_date_gt: Filter for settlement dates greater than the provided date. + :param settlement_date_gte: Filter for settlement dates greater than or equal to the provided date. + :param avg_daily_volume: Filter by average daily volume. + :param avg_daily_volume_lt: Filter for average daily volume dates less than the provided date. + :param avg_daily_volume_lte: Filter for average daily volume dates less than or equal to the provided date. + :param avg_daily_volume_gt: Filter for average daily volume dates greater than the provided date. + :param avg_daily_volume_gte: Filter for average daily volume dates greater than or equal to the provided date. + :param limit: Limit the number of results returned. Default 10, max 50000. + :param sort: Field to sort by (e.g., "ticker"). + :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". + :param params: Additional query parameters. + :param raw: Return raw HTTPResponse object if True, else return List[ShortInterest]. + :param options: RequestOptionBuilder for additional headers or params. + :return: A list of ShortInterest objects or HTTPResponse if raw=True. + """ + url = "/stocks/vX/short-interest" + + return self._paginate( + path=url, + params=self._get_params(self.list_short_interest, locals()), + deserializer=ShortInterest.from_dict, + raw=raw, + result_key="results", + options=options, + ) + + def list_short_volume( + self, + ticker: Optional[str] = None, + date: Optional[str] = None, + date_lt: Optional[str] = None, + date_lte: Optional[str] = None, + date_gt: Optional[str] = None, + date_gte: Optional[str] = None, + short_volume_ratio: Optional[str] = None, + short_volume_ratio_lt: Optional[str] = None, + short_volume_ratio_lte: Optional[str] = None, + short_volume_ratio_gt: Optional[str] = None, + short_volume_ratio_gte: Optional[str] = None, + total_volume: Optional[str] = None, + total_volume_lt: Optional[str] = None, + total_volume_lte: Optional[str] = None, + total_volume_gt: Optional[str] = None, + total_volume_gte: 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, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[ShortVolume], HTTPResponse]: + """ + Retrieve short volume data for stocks. + + :param ticker: Filter by the primary ticker symbol. + :param date: Filter by the date of trade activity (YYYY-MM-DD). + :param date_lt: Filter for dates less than the provided date. + :param date_lte: Filter for dates less than or equal to the provided date. + :param date_gt: Filter for dates greater than the provided date. + :param date_gte: Filter for dates greater than or equal to the provided date. + :param short_volume_ratio: Filter by short volume ratio. + :param short_volume_ratio_lt: Filter for short volume ratio less than the provided date. + :param short_volume_ratio_lte: Filter for short volume ratio less than or equal to the provided date. + :param short_volume_ratio_gt: Filter for short volume ratio greater than the provided date. + :param short_volume_ratio_gte: Filter for short volume ratio greater than or equal to the provided date. + :param total_volume: Filter by total volume. + :param total_volume_lt: Filter for total volume less than the provided date. + :param total_volume_lte: Filter for total volume less than or equal to the provided date. + :param total_volume_gt: Filter for total volume greater than the provided date. + :param total_volume_gte: Filter for total volume greater than or equal to the provided date. + :param limit: Limit the number of results returned. Default 10, max 50000. + :param sort: Field to sort by (e.g., "ticker"). + :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". + :param params: Additional query parameters. + :param raw: Return raw HTTPResponse object if True, else return List[ShortVolume]. + :param options: RequestOptionBuilder for additional headers or params. + :return: A list of ShortVolume objects or HTTPResponse if raw=True. + """ + url = "/stocks/vX/short-volume" + + return self._paginate( + path=url, + params=self._get_params(self.list_short_volume, locals()), + deserializer=ShortVolume.from_dict, + raw=raw, + result_key="results", + options=options, + ) + + def list_treasury_yields( + self, + date: Optional[str] = None, + date_gt: Optional[str] = None, + date_gte: Optional[str] = None, + date_lt: Optional[str] = None, + date_lte: 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, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[TreasuryYield], HTTPResponse]: + """ + Retrieve treasury yield data. + + :param date: Calendar date of the yield observation (YYYY-MM-DD). + :param date_gt: Filter for dates greater than the provided date. + :param date_gte: Filter for dates greater than or equal to the provided date. + :param date_lt: Filter for dates less than the provided date. + :param date_lte: Filter for dates less than or equal to the provided date. + :param limit: Limit the number of results returned. Default 100, max 50000. + :param sort: Field to sort by (e.g., "date"). Default "date". + :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". + :param params: Additional query parameters. + :param raw: Return raw HTTPResponse object if True, else return List[TreasuryYield]. + :param options: RequestOptionBuilder for additional headers or params. + :return: A list of TreasuryYield objects or HTTPResponse if raw=True. + """ + url = "/fed/vX/treasury-yields" + + return self._paginate( + path=url, + params=self._get_params(self.list_treasury_yields, locals()), + deserializer=TreasuryYield.from_dict, + raw=raw, + result_key="results", + options=options, + ) From 1bc22c325ac8ae0d49656fcad46cce949803a34f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:13:59 -0700 Subject: [PATCH 446/448] Bump certifi from 2025.1.31 to 2025.4.26 (#877) Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.1.31 to 2025.4.26. - [Commits](https://github.com/certifi/python-certifi/compare/2025.01.31...2025.04.26) --- updated-dependencies: - dependency-name: certifi dependency-version: 2025.4.26 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8a686894..e657d9cb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -94,14 +94,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2025.1.31" +version = "2025.4.26" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main", "dev"] files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, ] [[package]] From 4ed1624ea6e0ce596304e3c70101f46623fb99c4 Mon Sep 17 00:00:00 2001 From: justinpolygon <123573436+justinpolygon@users.noreply.github.com> Date: Tue, 3 Jun 2025 11:35:18 -0700 Subject: [PATCH 447/448] Update endpoints from vX to v1 (#881) --- examples/rest/economy-treasury_yields.py | 2 +- examples/rest/stocks-short_interest.py | 2 +- examples/rest/stocks-short_volume.py | 2 +- polygon/rest/reference.py | 170 +++++++++++++++++++++++ polygon/rest/vX.py | 170 ----------------------- 5 files changed, 173 insertions(+), 173 deletions(-) diff --git a/examples/rest/economy-treasury_yields.py b/examples/rest/economy-treasury_yields.py index 011b1866..7be77fcf 100644 --- a/examples/rest/economy-treasury_yields.py +++ b/examples/rest/economy-treasury_yields.py @@ -7,7 +7,7 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used yields = [] -for date in client.vx.list_treasury_yields(): +for date in client.list_treasury_yields(): yields.append(date) print(yields) diff --git a/examples/rest/stocks-short_interest.py b/examples/rest/stocks-short_interest.py index 3b64cd2a..6a9f7ea1 100644 --- a/examples/rest/stocks-short_interest.py +++ b/examples/rest/stocks-short_interest.py @@ -7,7 +7,7 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used items = [] -for item in client.vx.list_short_interest(ticker="RDDT"): +for item in client.list_short_interest(ticker="RDDT"): items.append(item) print(items) diff --git a/examples/rest/stocks-short_volume.py b/examples/rest/stocks-short_volume.py index 711bfd47..c127867a 100644 --- a/examples/rest/stocks-short_volume.py +++ b/examples/rest/stocks-short_volume.py @@ -7,7 +7,7 @@ client = RESTClient() # POLYGON_API_KEY environment variable is used items = [] -for item in client.vx.list_short_volume(ticker="RDDT"): +for item in client.list_short_volume(ticker="RDDT"): items.append(item) print(items) diff --git a/polygon/rest/reference.py b/polygon/rest/reference.py index 7af5b10f..e1695cb2 100644 --- a/polygon/rest/reference.py +++ b/polygon/rest/reference.py @@ -22,6 +22,9 @@ SIP, Exchange, OptionsContract, + ShortInterest, + ShortVolume, + TreasuryYield, ) from urllib3 import HTTPResponse from datetime import date @@ -567,3 +570,170 @@ def list_options_contracts( deserializer=OptionsContract.from_dict, options=options, ) + + def list_short_interest( + self, + ticker: Optional[str] = None, + days_to_cover: Optional[str] = None, + days_to_cover_lt: Optional[str] = None, + days_to_cover_lte: Optional[str] = None, + days_to_cover_gt: Optional[str] = None, + days_to_cover_gte: Optional[str] = None, + settlement_date: Optional[str] = None, + settlement_date_lt: Optional[str] = None, + settlement_date_lte: Optional[str] = None, + settlement_date_gt: Optional[str] = None, + settlement_date_gte: Optional[str] = None, + avg_daily_volume: Optional[str] = None, + avg_daily_volume_lt: Optional[str] = None, + avg_daily_volume_lte: Optional[str] = None, + avg_daily_volume_gt: Optional[str] = None, + avg_daily_volume_gte: 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, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[ShortInterest], HTTPResponse]: + """ + Retrieve short interest data for stocks. + + :param ticker: Filter by the primary ticker symbol. + :param days_to_cover: Filter by the days to cover value. + :param days_to_cover_lt: Filter for days to cover dates less than the provided date. + :param days_to_cover_lte: Filter for days to cover dates less than or equal to the provided date. + :param days_to_cover_gt: Filter for days to cover dates greater than the provided date. + :param days_to_cover_gte: Filter for days to cover dates greater than or equal to the provided date. + :param settlement_date: Filter by settlement date (YYYY-MM-DD). + :param settlement_date_lt: Filter for settlement dates less than the provided date. + :param settlement_date_lte: Filter for settlement dates less than or equal to the provided date. + :param settlement_date_gt: Filter for settlement dates greater than the provided date. + :param settlement_date_gte: Filter for settlement dates greater than or equal to the provided date. + :param avg_daily_volume: Filter by average daily volume. + :param avg_daily_volume_lt: Filter for average daily volume dates less than the provided date. + :param avg_daily_volume_lte: Filter for average daily volume dates less than or equal to the provided date. + :param avg_daily_volume_gt: Filter for average daily volume dates greater than the provided date. + :param avg_daily_volume_gte: Filter for average daily volume dates greater than or equal to the provided date. + :param limit: Limit the number of results returned. Default 10, max 50000. + :param sort: Field to sort by (e.g., "ticker"). + :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". + :param params: Additional query parameters. + :param raw: Return raw HTTPResponse object if True, else return List[ShortInterest]. + :param options: RequestOptionBuilder for additional headers or params. + :return: A list of ShortInterest objects or HTTPResponse if raw=True. + """ + url = "/stocks/v1/short-interest" + + return self._paginate( + path=url, + params=self._get_params(self.list_short_interest, locals()), + deserializer=ShortInterest.from_dict, + raw=raw, + result_key="results", + options=options, + ) + + def list_short_volume( + self, + ticker: Optional[str] = None, + date: Optional[str] = None, + date_lt: Optional[str] = None, + date_lte: Optional[str] = None, + date_gt: Optional[str] = None, + date_gte: Optional[str] = None, + short_volume_ratio: Optional[str] = None, + short_volume_ratio_lt: Optional[str] = None, + short_volume_ratio_lte: Optional[str] = None, + short_volume_ratio_gt: Optional[str] = None, + short_volume_ratio_gte: Optional[str] = None, + total_volume: Optional[str] = None, + total_volume_lt: Optional[str] = None, + total_volume_lte: Optional[str] = None, + total_volume_gt: Optional[str] = None, + total_volume_gte: 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, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[ShortVolume], HTTPResponse]: + """ + Retrieve short volume data for stocks. + + :param ticker: Filter by the primary ticker symbol. + :param date: Filter by the date of trade activity (YYYY-MM-DD). + :param date_lt: Filter for dates less than the provided date. + :param date_lte: Filter for dates less than or equal to the provided date. + :param date_gt: Filter for dates greater than the provided date. + :param date_gte: Filter for dates greater than or equal to the provided date. + :param short_volume_ratio: Filter by short volume ratio. + :param short_volume_ratio_lt: Filter for short volume ratio less than the provided date. + :param short_volume_ratio_lte: Filter for short volume ratio less than or equal to the provided date. + :param short_volume_ratio_gt: Filter for short volume ratio greater than the provided date. + :param short_volume_ratio_gte: Filter for short volume ratio greater than or equal to the provided date. + :param total_volume: Filter by total volume. + :param total_volume_lt: Filter for total volume less than the provided date. + :param total_volume_lte: Filter for total volume less than or equal to the provided date. + :param total_volume_gt: Filter for total volume greater than the provided date. + :param total_volume_gte: Filter for total volume greater than or equal to the provided date. + :param limit: Limit the number of results returned. Default 10, max 50000. + :param sort: Field to sort by (e.g., "ticker"). + :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". + :param params: Additional query parameters. + :param raw: Return raw HTTPResponse object if True, else return List[ShortVolume]. + :param options: RequestOptionBuilder for additional headers or params. + :return: A list of ShortVolume objects or HTTPResponse if raw=True. + """ + url = "/stocks/v1/short-volume" + + return self._paginate( + path=url, + params=self._get_params(self.list_short_volume, locals()), + deserializer=ShortVolume.from_dict, + raw=raw, + result_key="results", + options=options, + ) + + def list_treasury_yields( + self, + date: Optional[str] = None, + date_gt: Optional[str] = None, + date_gte: Optional[str] = None, + date_lt: Optional[str] = None, + date_lte: 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, + options: Optional[RequestOptionBuilder] = None, + ) -> Union[List[TreasuryYield], HTTPResponse]: + """ + Retrieve treasury yield data. + + :param date: Calendar date of the yield observation (YYYY-MM-DD). + :param date_gt: Filter for dates greater than the provided date. + :param date_gte: Filter for dates greater than or equal to the provided date. + :param date_lt: Filter for dates less than the provided date. + :param date_lte: Filter for dates less than or equal to the provided date. + :param limit: Limit the number of results returned. Default 100, max 50000. + :param sort: Field to sort by (e.g., "date"). Default "date". + :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". + :param params: Additional query parameters. + :param raw: Return raw HTTPResponse object if True, else return List[TreasuryYield]. + :param options: RequestOptionBuilder for additional headers or params. + :return: A list of TreasuryYield objects or HTTPResponse if raw=True. + """ + url = "/fed/v1/treasury-yields" + + return self._paginate( + path=url, + params=self._get_params(self.list_treasury_yields, locals()), + deserializer=TreasuryYield.from_dict, + raw=raw, + result_key="results", + options=options, + ) diff --git a/polygon/rest/vX.py b/polygon/rest/vX.py index 23f0e94e..ebd95a1a 100644 --- a/polygon/rest/vX.py +++ b/polygon/rest/vX.py @@ -3,9 +3,6 @@ from .models import ( StockFinancial, IPOListing, - ShortInterest, - ShortVolume, - TreasuryYield, Timeframe, Sort, Order, @@ -123,170 +120,3 @@ def list_ipos( result_key="results", options=options, ) - - def list_short_interest( - self, - ticker: Optional[str] = None, - days_to_cover: Optional[str] = None, - days_to_cover_lt: Optional[str] = None, - days_to_cover_lte: Optional[str] = None, - days_to_cover_gt: Optional[str] = None, - days_to_cover_gte: Optional[str] = None, - settlement_date: Optional[str] = None, - settlement_date_lt: Optional[str] = None, - settlement_date_lte: Optional[str] = None, - settlement_date_gt: Optional[str] = None, - settlement_date_gte: Optional[str] = None, - avg_daily_volume: Optional[str] = None, - avg_daily_volume_lt: Optional[str] = None, - avg_daily_volume_lte: Optional[str] = None, - avg_daily_volume_gt: Optional[str] = None, - avg_daily_volume_gte: 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, - options: Optional[RequestOptionBuilder] = None, - ) -> Union[List[ShortInterest], HTTPResponse]: - """ - Retrieve short interest data for stocks. - - :param ticker: Filter by the primary ticker symbol. - :param days_to_cover: Filter by the days to cover value. - :param days_to_cover_lt: Filter for days to cover dates less than the provided date. - :param days_to_cover_lte: Filter for days to cover dates less than or equal to the provided date. - :param days_to_cover_gt: Filter for days to cover dates greater than the provided date. - :param days_to_cover_gte: Filter for days to cover dates greater than or equal to the provided date. - :param settlement_date: Filter by settlement date (YYYY-MM-DD). - :param settlement_date_lt: Filter for settlement dates less than the provided date. - :param settlement_date_lte: Filter for settlement dates less than or equal to the provided date. - :param settlement_date_gt: Filter for settlement dates greater than the provided date. - :param settlement_date_gte: Filter for settlement dates greater than or equal to the provided date. - :param avg_daily_volume: Filter by average daily volume. - :param avg_daily_volume_lt: Filter for average daily volume dates less than the provided date. - :param avg_daily_volume_lte: Filter for average daily volume dates less than or equal to the provided date. - :param avg_daily_volume_gt: Filter for average daily volume dates greater than the provided date. - :param avg_daily_volume_gte: Filter for average daily volume dates greater than or equal to the provided date. - :param limit: Limit the number of results returned. Default 10, max 50000. - :param sort: Field to sort by (e.g., "ticker"). - :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". - :param params: Additional query parameters. - :param raw: Return raw HTTPResponse object if True, else return List[ShortInterest]. - :param options: RequestOptionBuilder for additional headers or params. - :return: A list of ShortInterest objects or HTTPResponse if raw=True. - """ - url = "/stocks/vX/short-interest" - - return self._paginate( - path=url, - params=self._get_params(self.list_short_interest, locals()), - deserializer=ShortInterest.from_dict, - raw=raw, - result_key="results", - options=options, - ) - - def list_short_volume( - self, - ticker: Optional[str] = None, - date: Optional[str] = None, - date_lt: Optional[str] = None, - date_lte: Optional[str] = None, - date_gt: Optional[str] = None, - date_gte: Optional[str] = None, - short_volume_ratio: Optional[str] = None, - short_volume_ratio_lt: Optional[str] = None, - short_volume_ratio_lte: Optional[str] = None, - short_volume_ratio_gt: Optional[str] = None, - short_volume_ratio_gte: Optional[str] = None, - total_volume: Optional[str] = None, - total_volume_lt: Optional[str] = None, - total_volume_lte: Optional[str] = None, - total_volume_gt: Optional[str] = None, - total_volume_gte: 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, - options: Optional[RequestOptionBuilder] = None, - ) -> Union[List[ShortVolume], HTTPResponse]: - """ - Retrieve short volume data for stocks. - - :param ticker: Filter by the primary ticker symbol. - :param date: Filter by the date of trade activity (YYYY-MM-DD). - :param date_lt: Filter for dates less than the provided date. - :param date_lte: Filter for dates less than or equal to the provided date. - :param date_gt: Filter for dates greater than the provided date. - :param date_gte: Filter for dates greater than or equal to the provided date. - :param short_volume_ratio: Filter by short volume ratio. - :param short_volume_ratio_lt: Filter for short volume ratio less than the provided date. - :param short_volume_ratio_lte: Filter for short volume ratio less than or equal to the provided date. - :param short_volume_ratio_gt: Filter for short volume ratio greater than the provided date. - :param short_volume_ratio_gte: Filter for short volume ratio greater than or equal to the provided date. - :param total_volume: Filter by total volume. - :param total_volume_lt: Filter for total volume less than the provided date. - :param total_volume_lte: Filter for total volume less than or equal to the provided date. - :param total_volume_gt: Filter for total volume greater than the provided date. - :param total_volume_gte: Filter for total volume greater than or equal to the provided date. - :param limit: Limit the number of results returned. Default 10, max 50000. - :param sort: Field to sort by (e.g., "ticker"). - :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". - :param params: Additional query parameters. - :param raw: Return raw HTTPResponse object if True, else return List[ShortVolume]. - :param options: RequestOptionBuilder for additional headers or params. - :return: A list of ShortVolume objects or HTTPResponse if raw=True. - """ - url = "/stocks/vX/short-volume" - - return self._paginate( - path=url, - params=self._get_params(self.list_short_volume, locals()), - deserializer=ShortVolume.from_dict, - raw=raw, - result_key="results", - options=options, - ) - - def list_treasury_yields( - self, - date: Optional[str] = None, - date_gt: Optional[str] = None, - date_gte: Optional[str] = None, - date_lt: Optional[str] = None, - date_lte: 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, - options: Optional[RequestOptionBuilder] = None, - ) -> Union[List[TreasuryYield], HTTPResponse]: - """ - Retrieve treasury yield data. - - :param date: Calendar date of the yield observation (YYYY-MM-DD). - :param date_gt: Filter for dates greater than the provided date. - :param date_gte: Filter for dates greater than or equal to the provided date. - :param date_lt: Filter for dates less than the provided date. - :param date_lte: Filter for dates less than or equal to the provided date. - :param limit: Limit the number of results returned. Default 100, max 50000. - :param sort: Field to sort by (e.g., "date"). Default "date". - :param order: Order results based on the sort field ("asc" or "desc"). Default "desc". - :param params: Additional query parameters. - :param raw: Return raw HTTPResponse object if True, else return List[TreasuryYield]. - :param options: RequestOptionBuilder for additional headers or params. - :return: A list of TreasuryYield objects or HTTPResponse if raw=True. - """ - url = "/fed/vX/treasury-yields" - - return self._paginate( - path=url, - params=self._get_params(self.list_treasury_yields, locals()), - deserializer=TreasuryYield.from_dict, - raw=raw, - result_key="results", - options=options, - ) From c01504008adddedaa634033e83659663bba5780f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 10:33:18 -0700 Subject: [PATCH 448/448] Bump requests from 2.32.0 to 2.32.4 (#885) Bumps [requests](https://github.com/psf/requests) from 2.32.0 to 2.32.4. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.32.0...v2.32.4) --- updated-dependencies: - dependency-name: requests dependency-version: 2.32.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index e657d9cb..66e31bcc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -631,19 +631,19 @@ files = [ [[package]] name = "requests" -version = "2.32.0" +version = "2.32.4" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" groups = ["dev"] files = [ - {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"}, - {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"}, + {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, + {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +charset_normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3"