Skip to content

Commit 77d333a

Browse files
committed
Simplify query_raw
Signed-off-by: Diego Ramírez <[email protected]>
1 parent 1d7eeea commit 77d333a

File tree

1 file changed

+3
-94
lines changed

1 file changed

+3
-94
lines changed

overpy/__init__.py

Lines changed: 3 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def _handle_remark_msg(self, msg):
110110
raise exception.OverpassRuntimeRemark(msg=msg)
111111
raise exception.OverpassUnknownError(msg=msg)
112112

113-
def query(self, query):
113+
def query(self, query, return_raw=False):
114114
"""
115115
Query the Overpass API
116116
@@ -149,101 +149,10 @@ def query(self, query):
149149
content_type = f.getheader("Content-Type")
150150

151151
if content_type == "application/json":
152-
return self.parse_json(response)
152+
return self.parse_json(response, return_raw=return_raw)
153153

154154
if content_type == "application/osm3s+xml":
155-
return self.parse_xml(response)
156-
157-
e = exception.OverpassUnknownContentType(content_type)
158-
if not do_retry:
159-
raise e
160-
retry_exceptions.append(e)
161-
continue
162-
163-
if f.code == 400:
164-
msgs = []
165-
for msg in self._regex_extract_error_msg.finditer(response):
166-
tmp = self._regex_remove_tag.sub(b"", msg.group("msg"))
167-
try:
168-
tmp = tmp.decode("utf-8")
169-
except UnicodeDecodeError:
170-
tmp = repr(tmp)
171-
msgs.append(tmp)
172-
173-
e = exception.OverpassBadRequest(
174-
query,
175-
msgs=msgs
176-
)
177-
if not do_retry:
178-
raise e
179-
retry_exceptions.append(e)
180-
continue
181-
182-
if f.code == 429:
183-
e = exception.OverpassTooManyRequests
184-
if not do_retry:
185-
raise e
186-
retry_exceptions.append(e)
187-
continue
188-
189-
if f.code == 504:
190-
e = exception.OverpassGatewayTimeout
191-
if not do_retry:
192-
raise e
193-
retry_exceptions.append(e)
194-
continue
195-
196-
e = exception.OverpassUnknownHTTPStatusCode(f.code)
197-
if not do_retry:
198-
raise e
199-
retry_exceptions.append(e)
200-
continue
201-
202-
raise exception.MaxRetriesReached(retry_count=retry_num, exceptions=retry_exceptions)
203-
204-
def query_raw(self, query):
205-
"""
206-
Query the Overpass API
207-
208-
:param String|Bytes query: The query string in Overpass QL
209-
:return: The raw result
210-
:rtype: str
211-
"""
212-
if not isinstance(query, bytes):
213-
query = query.encode("utf-8")
214-
215-
retry_num = 0
216-
retry_exceptions = []
217-
do_retry = True if self.max_retry_count > 0 else False
218-
while retry_num <= self.max_retry_count:
219-
if retry_num > 0:
220-
time.sleep(self.retry_timeout)
221-
retry_num += 1
222-
try:
223-
f = urlopen(self.url, query)
224-
except HTTPError as e:
225-
f = e
226-
227-
response = f.read(self.read_chunk_size)
228-
while True:
229-
data = f.read(self.read_chunk_size)
230-
if len(data) == 0:
231-
break
232-
response = response + data
233-
f.close()
234-
235-
if f.code == 200:
236-
if PY2:
237-
http_info = f.info()
238-
content_type = http_info.getheader("content-type")
239-
else:
240-
content_type = f.getheader("Content-Type")
241-
242-
if content_type == "application/json":
243-
return self.parse_json(response, return_raw=True)
244-
245-
if content_type == "application/osm3s+xml":
246-
return self.parse_xml(response, return_raw=True)
155+
return self.parse_xml(response, return_raw=return_raw)
247156

248157
e = exception.OverpassUnknownContentType(content_type)
249158
if not do_retry:

0 commit comments

Comments
 (0)