Skip to content

Commit 4104b70

Browse files
fix(test): prevent tests from failing at random timestamps
Co-authored-by: Maciej Adamiak <adamiak.maciek@gmail.com>
1 parent 289f4c5 commit 4104b70

File tree

6 files changed

+5647
-41
lines changed

6 files changed

+5647
-41
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Changed
6+
7+
- improved and sped up testing (first steps towards [#139](https://github.com/GIScience/ohsome-py/issues/139))
8+
- move metadata property from singleton to `chached_property`
9+
10+
### Fixed
11+
12+
- removed time-dependency of unit tests that would cause them to fail at any time after the cassettes were recorded
13+
314
## 0.3.0
415

516
### Added

ohsome/clients.py

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"""OhsomeClient classes to build and handle requests to ohsome API"""
55
import datetime as dt
66
import json
7+
from functools import cached_property
78
from pathlib import Path
89
from typing import Union, Optional, List
910
from urllib.parse import urljoin
@@ -129,8 +130,7 @@ def __init__(
129130
base_api_url, log, log_dir, cache, user_agent, retry
130131
)
131132
self._parameters = None
132-
self._metadata = None
133-
self._url = None
133+
self._metadata_url = f"{self.base_api_url}metadata"
134134

135135
@property
136136
def base_api_url(self):
@@ -142,12 +142,8 @@ def start_timestamp(self):
142142
Returns the temporal extent of the current ohsome API
143143
:return:
144144
"""
145-
if self._metadata is None:
146-
self._query_metadata()
147145
return dt.datetime.fromisoformat(
148-
self._metadata["extractRegion"]["temporalExtent"]["fromTimestamp"].strip(
149-
"Z"
150-
)
146+
self.metadata["extractRegion"]["temporalExtent"]["fromTimestamp"].strip("Z")
151147
)
152148

153149
@property
@@ -156,10 +152,8 @@ def end_timestamp(self):
156152
Returns the temporal extent of the current ohsome API
157153
:return:
158154
"""
159-
if self._metadata is None:
160-
self._query_metadata()
161155
return dt.datetime.fromisoformat(
162-
self._metadata["extractRegion"]["temporalExtent"]["toTimestamp"].strip("Z")
156+
self.metadata["extractRegion"]["temporalExtent"]["toTimestamp"].strip("Z")
163157
)
164158

165159
@property
@@ -168,41 +162,33 @@ def api_version(self):
168162
Returns the version of the ohsome API
169163
:return:
170164
"""
171-
if self._metadata is None:
172-
self._query_metadata()
173-
return self._metadata["apiVersion"]
165+
return self.metadata["apiVersion"]
174166

175-
@property
167+
@cached_property
176168
def metadata(self):
177-
if self._metadata is None:
178-
self._query_metadata()
179-
return self._metadata
180-
181-
def _query_metadata(self):
182169
"""
183170
Send ohsome GET request
184171
:return:
185172
"""
186-
self._url = self._base_api_url + "metadata"
187173
try:
188-
response = self._session().get(self._url)
174+
response = self._session().get(self._metadata_url)
189175
response.raise_for_status()
190176
except requests.exceptions.ConnectionError:
191177
raise OhsomeException(
192178
message="Connection Error: Query could not be sent. Make sure there are no network "
193-
f"problems and that the ohsome API URL {self._url} is valid.",
194-
url=self._url,
179+
f"problems and that the ohsome API URL {self._metadata_url} is valid.",
180+
url=self._metadata_url,
195181
params=self._parameters,
196182
)
197183
except requests.exceptions.HTTPError as e:
198184
raise OhsomeException(
199185
message=e.response.json()["message"],
200-
url=self._url,
186+
url=self._metadata_url,
201187
params=self._parameters,
202188
error_code=e.response.status_code,
203189
)
204190
else:
205-
self._metadata = response.json()
191+
return response.json()
206192

207193

208194
class _OhsomePostClient(_OhsomeBaseClient):
@@ -232,7 +218,6 @@ def __init__(
232218
base_api_url, log, log_dir, cache, user_agent, retry
233219
)
234220
self._parameters = None
235-
self._metadata = None
236221
self._url = None
237222

238223
def post(

0 commit comments

Comments
 (0)