@@ -136,6 +136,35 @@ async def errors(
136136
137137 return out
138138
139+ async def _issues (
140+ db : Connection ,
141+ langs : LangsNegociation ,
142+ params : commons_params .Params ,
143+ _ : i18n .Translator ,
144+ ) -> Tuple [str , List [Any ]]:
145+ if params .status == "false" :
146+ title = _ ("False positives" )
147+ elif params .status == "done" :
148+ title = _ ("Fixed issues" )
149+ else :
150+ title = _ ("Open issues" )
151+
152+ items = await query_meta ._items_menu (db , langs )
153+ for res in items :
154+ if params .item == str (res ["item" ]):
155+ menu_auto = i10n_select_auto (res ["menu" ], langs )
156+ if menu_auto :
157+ title += " - " + menu_auto
158+
159+ params .limit = min (params .limit , 100000 )
160+ issues = await query ._gets (db , params )
161+
162+ for issue in issues :
163+ issue ["subtitle" ] = i10n_select_auto (issue ["subtitle" ], langs )
164+ issue ["title" ] = i10n_select_auto (issue ["title" ], langs )
165+ issue ["menu" ] = i10n_select_auto (issue ["menu" ], langs )
166+
167+ return (title , issues )
139168
140169@router .get ("/0.3/issues" , tags = ["issues" ])
141170@router .get ("/0.3/issues.json" , tags = ["issues" ])
@@ -144,54 +173,49 @@ async def issues(
144173 db : Connection = Depends (database .db ),
145174 langs : LangsNegociation = Depends (langs .langs ),
146175 params = Depends (commons_params .params ),
176+ i18n : i18n .Translator = Depends (i18n .i18n ),
147177) -> Dict [Literal ["issues" ], List [Dict [str , Any ]]]:
148- params .limit = min (params .limit , 100000 )
149- results = await query ._gets (db , params )
150178
151- out = []
152- for res in results :
153- i = {
154- "lat" : float (res ["lat" ]),
155- "lon" : float (res ["lon" ]),
156- "id" : res ["uuid" ],
157- "item" : str (res ["item" ]),
158- }
179+ title , issues = await _issues (db , langs , params , i18n )
180+
181+ outprops = {"lat" , "lon" , "id" , "item" }
182+ if params .full :
183+ outprops = None
184+
185+ #Left here for retrocompat
186+ for issue in issues :
187+ issue ["id" ]: issue ["uuid" ]
188+
189+ issue .pop ("uuid" , None )
190+
159191 if params .full :
160- i .update (
161- {
162- "lat" : float (res ["lat" ]),
163- "lon" : float (res ["lon" ]),
164- "id" : res ["uuid" ],
165- "item" : str (res ["item" ]),
166- "source" : res ["source_id" ],
167- "class" : res ["class" ],
168- "subtitle" : utils .i10n_select (res ["subtitle" ], langs ),
169- "title" : utils .i10n_select (res ["title" ], langs ),
170- "level" : res ["level" ],
171- "update" : str (res ["timestamp" ]),
172- "usernames" : list (
173- map (
174- lambda elem : "username" in elem and elem ["username" ] or "" ,
175- res ["elems" ] or [],
176- )
192+ issue ["update" ]: str (issue ["timestamp" ])
193+ issue ["usernames" ]: list (
194+ map (
195+ lambda elem : "username" in elem and elem ["username" ] or "" ,
196+ issue ["elems" ] or [],
197+ )
198+ )
199+ issue ["osm_ids" ]: dict (
200+ map (
201+ lambda k_g : (
202+ {"N" : "nodes" , "W" : "ways" , "R" : "relations" }[k_g [0 ]],
203+ list (map (lambda g : g ["id" ], k_g [1 ])),
177204 ),
178- "osm_ids" : dict (
179- map (
180- lambda k_g : (
181- {"N" : "nodes" , "W" : "ways" , "R" : "relations" }[k_g [0 ]],
182- list (map (lambda g : g ["id" ], k_g [1 ])),
183- ),
184- groupby (
185- sorted (res ["elems" ] or [], key = lambda e : e ["type" ]),
186- lambda e : e ["type" ],
187- ),
188- )
205+ groupby (
206+ sorted (issue ["elems" ] or [], key = lambda e : e ["type" ]),
207+ lambda e : e ["type" ],
189208 ),
190- }
209+ )
191210 )
192- out . append ( i )
211+ issue . pop ( "timestamp" , None )
193212
194- return {"issues" : out }
213+ return {"issues" :[
214+ {
215+ k : v for k , v in issue .items () if outprops == None or k in outprops
216+ }
217+ for issue in issues
218+ ]}
195219
196220
197221@router .get ("/0.3/issues.josm" , tags = ["issues" ])
@@ -222,38 +246,6 @@ async def issues_josm(
222246 )
223247
224248
225- async def _issues (
226- db : Connection ,
227- langs : LangsNegociation ,
228- params : commons_params .Params ,
229- _ : i18n .Translator ,
230- ) -> Tuple [str , List [Any ]]:
231- if params .status == "false" :
232- title = _ ("False positives" )
233- elif params .status == "done" :
234- title = _ ("Fixed issues" )
235- else :
236- title = _ ("Open issues" )
237-
238- items = await query_meta ._items_menu (db , langs )
239- for res in items :
240- if params .item == str (res ["item" ]):
241- menu_auto = i10n_select_auto (res ["menu" ], langs )
242- if menu_auto :
243- title += " - " + menu_auto
244-
245- params .full = True
246- params .limit = min (params .limit , 100000 )
247- issues = await query ._gets (db , params )
248-
249- for issue in issues :
250- issue ["subtitle" ] = i10n_select_auto (issue ["subtitle" ], langs )
251- issue ["title" ] = i10n_select_auto (issue ["title" ], langs )
252- issue ["menu" ] = i10n_select_auto (issue ["menu" ], langs )
253-
254- return (title , issues )
255-
256-
257249@router .get ("/0.3/issues.rss" , response_class = RSSResponse , tags = ["issues" ])
258250async def issues_rss (
259251 request : Request ,
@@ -262,6 +254,7 @@ async def issues_rss(
262254 params = Depends (commons_params .params ),
263255 i18n : i18n .Translator = Depends (i18n .i18n ),
264256) -> RSSResponse :
257+ params .full = True
265258 title , issues = await _issues (db , langs , params , i18n )
266259 return RSSResponse (
267260 rss (
@@ -286,6 +279,7 @@ async def issues_gpx(
286279 params = Depends (commons_params .params ),
287280 i18n : i18n .Translator = Depends (i18n .i18n ),
288281) -> GPXResponse :
282+ params .full = True
289283 title , issues = await _issues (db , langs , params , i18n )
290284 return GPXResponse (
291285 gpx (
@@ -310,6 +304,7 @@ async def issues_kml(
310304 params = Depends (commons_params .params ),
311305 i18n : i18n .Translator = Depends (i18n .i18n ),
312306) -> KMLResponse :
307+ params .full = True
313308 title , issues = await _issues (db , langs , params , i18n )
314309 return KMLResponse (
315310 kml (
@@ -334,6 +329,7 @@ async def issues_csv(
334329 params = Depends (commons_params .params ),
335330 i18n : i18n .Translator = Depends (i18n .i18n ),
336331) -> str :
332+ params .full = True
337333 title , issues = await _issues (db , langs , params , i18n )
338334 return csv (
339335 title = title ,
@@ -355,6 +351,7 @@ async def issues_geojson(
355351 params = Depends (commons_params .params ),
356352 i18n : i18n .Translator = Depends (i18n .i18n ),
357353) -> GeoJSONFeatureCollection :
354+ params .full = True
358355 title , issues = await _issues (db , langs , params , i18n )
359356 return {
360357 "type" : "FeatureCollection" ,
@@ -388,6 +385,7 @@ async def issues_maproulette_jsonl(
388385 i18n : i18n .Translator = Depends (i18n .i18n ),
389386) -> List [Any ]:
390387 params .limit = 100000
388+ params .full = True
391389 title , issues = await _issues (db , langs , params , i18n )
392390 type_map = {"N" : "node" , "W" : "way" , "R" : "relation" }
393391 return [
0 commit comments