Skip to content

Commit 17be8fb

Browse files
committed
Added repr
1 parent 098805e commit 17be8fb

2 files changed

Lines changed: 36 additions & 5 deletions

File tree

src/scmdata/remote.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,25 @@ def __getattr__(self, item: str):
105105
f"'{self.__class__.__name__}' object has no attribute '{item}'"
106106
)
107107

108+
def __len__(self):
109+
return len(self.meta())
110+
111+
def __repr__(self) -> str:
112+
def _indent(s):
113+
_lines = ["\t" + line for line in s.split("\n")]
114+
return "\n".join(_lines)
115+
116+
lines = [
117+
f"<{self.__class__.__name__}> (timeseries: {len(self)})",
118+
f"URL: {self.url()}",
119+
"Filters",
120+
_indent(str(self.filters)),
121+
"Meta",
122+
_indent(repr(self.meta())),
123+
]
124+
125+
return "\n".join(lines)
126+
108127
def url(self) -> str:
109128
opts = self.filter_options()
110129
filters = {k: self.filters[k] for k in self.filters.keys() if k in opts}

tests/unit/test_remote.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
import scmdata
1212
import scmdata.testing
13-
from scmdata.errors import NonUniqueMetadataError, RemoteQueryError
13+
from scmdata.errors import RemoteQueryError
1414
from scmdata.remote import (
1515
CACHE_SIZE,
1616
RemoteDataset,
@@ -101,6 +101,7 @@ def test_api_caches(
101101
timeseries_facets_response,
102102
func,
103103
):
104+
104105
if func == "meta":
105106
mock_request.return_value = timeseries_meta_response
106107
api_func = _read_api_meta
@@ -113,6 +114,8 @@ def test_api_caches(
113114
else:
114115
raise ValueError("Unknown option")
115116

117+
api_func.cache_clear()
118+
116119
api_func(NDCS_URL, scenario="test")
117120
api_func(NDCS_URL, scenario="test")
118121
api_func(NDCS_URL, scenario="other")
@@ -182,6 +185,17 @@ def remote_ds():
182185
return ds
183186

184187

188+
def test_remote_repr(remote_ds):
189+
res = repr(remote_ds)
190+
191+
assert re.search(r"<MockRemoteDataset> \(timeseries:", res)
192+
assert re.search(f"URL: {remote_ds.url()}", res)
193+
194+
195+
def test_remote_len(remote_ds):
196+
assert len(remote_ds) == 13568
197+
198+
185199
def test_remote_dataset_filtering(remote_ds):
186200
filtered_ds = remote_ds.filter(variable="Population")
187201
assert filtered_ds.filters == {"variable": "Population"}
@@ -202,20 +216,18 @@ def test_remote_query(remote_ds):
202216
assert isinstance(res_filtered, scmdata.ScmRun)
203217
assert MockRemoteDataset._data_queries == [{}, {"variable": "Emissions|CO2"}]
204218

205-
assert res.metadata["source"] == res
206-
assert res_filtered.metadata["source"] == res_filtered
207-
208219

209220
@patch("scmdata.remote._read_api_timeseries")
210221
def test_remote_query_mocked(mock_timeseries, caplog):
211222
caplog.set_level(logging.INFO)
223+
mock_timeseries.return_value = scmdata.ScmRun()
212224

213225
ds = RemoteDataset(NDCS_URL).filter(variable="test")
214226
ds.filter_options = Mock(return_value=["variable"])
215227
res = ds.query()
216228

217229
assert res == mock_timeseries.return_value
218-
assert res.source == ds
230+
assert res.metadata["source"] == ds
219231

220232
assert len(caplog.messages) == 1
221233
mock_timeseries.assert_called_with(NDCS_URL, **{"variable": "test"})

0 commit comments

Comments
 (0)