diff --git a/polygon/rest/base.py b/polygon/rest/base.py index 1523114e..bcb0eea3 100644 --- a/polygon/rest/base.py +++ b/polygon/rest/base.py @@ -11,11 +11,12 @@ import logging from urllib.parse import urlencode from ..exceptions import AuthError, BadResponse, NoResultsError +import time logger = get_logger("RESTClient") version = "unknown" try: - version = pkg_resources.require("polygon-api-client")[0].version + version = pkg_resources.require("polygon-api-client-mod")[0].version except: pass @@ -200,6 +201,10 @@ def _paginate_iter( decoded = self._decode(resp) for t in decoded[result_key]: yield deserializer(t) + + if options is not None: + time.sleep(options.throttle_request_sec) + if "next_url" in decoded: path = decoded["next_url"].replace(self.BASE, "") params = {} diff --git a/polygon/rest/models/aggs.py b/polygon/rest/models/aggs.py index cb624121..b3bc0262 100644 --- a/polygon/rest/models/aggs.py +++ b/polygon/rest/models/aggs.py @@ -5,28 +5,28 @@ @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 - 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 - otc: Optional[bool] = None + open: Optional[float] = -999 + high: Optional[float] = -999 + low: Optional[float] = -999 + close: Optional[float] = -999 + volume: Optional[float] = -999 + vwap: Optional[float] = -999 + timestamp: Optional[int] = 0 + transactions: Optional[int] = -999 + otc: Optional[bool] = False @staticmethod def from_dict(d): return Agg( - 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), - d.get("otc", None), + d.get("o", -999), + d.get("h", -999), + d.get("l", -999), + d.get("c", -999), + d.get("v", -999), + d.get("vw", -999), + d.get("t", 0), + d.get("n", -999), + d.get("otc", False), ) diff --git a/polygon/rest/models/request.py b/polygon/rest/models/request.py index 85e31daf..2d821aea 100644 --- a/polygon/rest/models/request.py +++ b/polygon/rest/models/request.py @@ -13,18 +13,21 @@ def __init__( edge_id: Optional[str] = None, edge_ip_address: Optional[str] = None, edge_user: Optional[str] = None, + throttle_request_per_sec: float = 13 ): """ 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. + :param throttle_request_per_sec: make sure we can make requests that are within 5 cals per minute """ 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 ) + self.throttle_request_sec = throttle_request_per_sec def edge_headers( self, @@ -98,4 +101,4 @@ def _add_to_edge_headers(self, **headers): class RequestOptionError(Exception): """ Missing required option. - """ + """ \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 47c67558..2eecfc74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "polygon-api-client" -version = "0.0.0" +version = "1.10.1" description = "Official Polygon.io REST and Websocket client." authors = ["polygon.io"] license = "MIT"