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..8afbd330 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 @@ -45,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", @@ -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