Skip to content

Commit 3cc7130

Browse files
Add trace option for better API call debugging (#432)
* Add `trace=True` option for debugging
1 parent 5f36401 commit 3cc7130

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

polygon/rest/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from typing import Optional, Any
1818
import os
1919

20-
2120
BASE = "https://api.polygon.io"
2221
ENV_KEY = "POLYGON_API_KEY"
2322

@@ -46,6 +45,7 @@ def __init__(
4645
retries: int = 3,
4746
base: str = BASE,
4847
verbose: bool = False,
48+
trace: bool = False,
4949
custom_json: Optional[Any] = None,
5050
):
5151
super().__init__(
@@ -56,6 +56,7 @@ def __init__(
5656
retries=retries,
5757
base=base,
5858
verbose=verbose,
59+
trace=trace,
5960
custom_json=custom_json,
6061
)
6162
self.vx = VXClient(
@@ -66,5 +67,6 @@ def __init__(
6667
retries=retries,
6768
base=base,
6869
verbose=verbose,
70+
trace=trace,
6971
custom_json=custom_json,
7072
)

polygon/rest/base.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from .models.request import RequestOptionBuilder
1010
from ..logging import get_logger
1111
import logging
12+
from urllib.parse import urlencode
1213
from ..exceptions import AuthError, BadResponse, NoResultsError
1314

1415
logger = get_logger("RESTClient")
@@ -29,6 +30,7 @@ def __init__(
2930
retries: int,
3031
base: str,
3132
verbose: bool,
33+
trace: bool,
3234
custom_json: Optional[Any] = None,
3335
):
3436
if api_key is None:
@@ -58,6 +60,7 @@ def __init__(
5860
self.retries = retries
5961
if verbose:
6062
logger.setLevel(logging.DEBUG)
63+
self.trace = trace
6164
if custom_json:
6265
self.json = custom_json
6366
else:
@@ -77,14 +80,32 @@ def _get(
7780
) -> Any:
7881
option = options if options is not None else RequestOptionBuilder()
7982

83+
headers = self._concat_headers(option.headers)
84+
85+
if self.trace:
86+
full_url = f"{self.BASE}{path}"
87+
if params:
88+
full_url += f"?{urlencode(params)}"
89+
print_headers = headers.copy()
90+
if "Authorization" in print_headers:
91+
print_headers["Authorization"] = print_headers["Authorization"].replace(
92+
self.API_KEY, "REDACTED"
93+
)
94+
print(f"Request URL: {full_url}")
95+
print(f"Request Headers: {print_headers}")
96+
8097
resp = self.client.request(
8198
"GET",
8299
self.BASE + path,
83100
fields=params,
84101
retries=self.retries,
85-
headers=self._concat_headers(option.headers),
102+
headers=headers,
86103
)
87104

105+
if self.trace:
106+
resp_headers_dict = dict(resp.headers.items())
107+
print(f"Response Headers: {resp_headers_dict}")
108+
88109
if resp.status != 200:
89110
raise BadResponse(resp.data.decode("utf-8"))
90111

0 commit comments

Comments
 (0)