Skip to content

Commit 44b745f

Browse files
committed
MOD: Stream compressed for corporate actions API
1 parent a10edad commit 44b745f

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

databento/reference/api/corporate.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
from collections.abc import Iterable
44
from datetime import date
5+
from io import BytesIO
56
from io import StringIO
67

78
import pandas as pd
9+
import zstandard
10+
from databento_dbn import Compression
811
from databento_dbn import SType
912

1013
from databento.common import API_VERSION
@@ -112,6 +115,7 @@ def get_range(
112115
"events": ",".join(events) if events else None,
113116
"countries": ",".join(countries) if countries else None,
114117
"security_types": ",".join(security_types) if security_types else None,
118+
"compression": str(Compression.ZSTD), # Always request zstd
115119
}
116120

117121
response = self._post(
@@ -120,7 +124,10 @@ def get_range(
120124
basic_auth=True,
121125
)
122126

123-
df = pd.read_json(StringIO(response.text), lines=True)
127+
decompressor = zstandard.ZstdDecompressor()
128+
decompressed_content = decompressor.stream_reader(BytesIO(response.content)).read()
129+
130+
df = pd.read_json(StringIO(decompressed_content.decode()), lines=True)
124131
if df.empty:
125132
return df
126133

tests/test_reference_corporate.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import pandas as pd
99
import pytest
1010
import requests
11+
import zstandard
1112
from databento.reference.client import Reference
1213

1314
from tests import TESTS_ROOT
@@ -77,7 +78,7 @@ def test_corporate_actions_get_range_sends_expected_request(
7778
) -> None:
7879
# Arrange
7980
mock_response = MagicMock()
80-
mock_response.text = "{}"
81+
mock_response.content = zstandard.compress(b"{}")
8182
mock_response.__enter__.return_value = mock_response
8283
mock_response.__exit__ = MagicMock()
8384
monkeypatch.setattr(requests, "post", mock_post := MagicMock(return_value=mock_response))
@@ -110,6 +111,7 @@ def test_corporate_actions_get_range_sends_expected_request(
110111
"events": expected_events,
111112
"countries": expected_countries,
112113
"security_types": expected_security_types,
114+
"compression": "zstd",
113115
}
114116
assert call["timeout"] == (100, 100)
115117
assert isinstance(call["auth"], requests.auth.HTTPBasicAuth)
@@ -122,7 +124,7 @@ def test_corporate_actions_get_range_response_parsing_as_pit(
122124
# Arrange
123125
data_path = Path(TESTS_ROOT) / "data" / "REFERENCE" / "test_data.corporate-actions.ndjson"
124126
mock_response = MagicMock()
125-
mock_response.text = data_path.read_text()
127+
mock_response.content = zstandard.compress(data_path.read_bytes())
126128
mock_response.__enter__.return_value = mock_response
127129
mock_response.__exit__ = MagicMock()
128130
monkeypatch.setattr(requests, "post", MagicMock(return_value=mock_response))
@@ -152,7 +154,7 @@ def test_corporate_actions_get_range_response(
152154
# Arrange
153155
data_path = Path(TESTS_ROOT) / "data" / "REFERENCE" / "test_data.corporate-actions-pit.ndjson"
154156
mock_response = MagicMock()
155-
mock_response.text = data_path.read_text()
157+
mock_response.content = zstandard.compress(data_path.read_bytes())
156158
mock_response.__enter__.return_value = mock_response
157159
mock_response.__exit__ = MagicMock()
158160
monkeypatch.setattr(requests, "post", MagicMock(return_value=mock_response))
@@ -178,7 +180,7 @@ def test_corporate_actions_get_range_with_ts_record_index(
178180
# Arrange
179181
data_path = Path(TESTS_ROOT) / "data" / "REFERENCE" / "test_data.corporate-actions.ndjson"
180182
mock_response = MagicMock()
181-
mock_response.text = data_path.read_text()
183+
mock_response.content = zstandard.compress(data_path.read_bytes())
182184
mock_response.__enter__.return_value = mock_response
183185
mock_response.__exit__ = MagicMock()
184186
monkeypatch.setattr(requests, "post", MagicMock(return_value=mock_response))
@@ -212,7 +214,7 @@ def test_corporate_actions_get_range_without_flattening(
212214
# Arrange
213215
data_path = Path(TESTS_ROOT) / "data" / "REFERENCE" / "test_data.corporate-actions.ndjson"
214216
mock_response = MagicMock()
215-
mock_response.text = data_path.read_text()
217+
mock_response.content = zstandard.compress(data_path.read_bytes())
216218
mock_response.__enter__.return_value = mock_response
217219
mock_response.__exit__ = MagicMock()
218220
monkeypatch.setattr(requests, "post", MagicMock(return_value=mock_response))

0 commit comments

Comments
 (0)