@@ -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