@@ -136,6 +136,36 @@ 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+ if params .full :
163+ for issue in issues :
164+ issue ["subtitle" ] = i10n_select_auto (issue ["subtitle" ], langs )
165+ issue ["title" ] = i10n_select_auto (issue ["title" ], langs )
166+ issue ["menu" ] = i10n_select_auto (issue ["menu" ], langs )
167+
168+ return (title , issues )
139169
140170@router .get ("/0.3/issues" , tags = ["issues" ])
141171@router .get ("/0.3/issues.json" , tags = ["issues" ])
@@ -144,54 +174,49 @@ async def issues(
144174 db : Connection = Depends (database .db ),
145175 langs : LangsNegociation = Depends (langs .langs ),
146176 params = Depends (commons_params .params ),
177+ i18n : i18n .Translator = Depends (i18n .i18n ),
147178) -> Dict [Literal ["issues" ], List [Dict [str , Any ]]]:
148- params .limit = min (params .limit , 100000 )
149- results = await query ._gets (db , params )
150179
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- }
180+ title , issues = await _issues (db , langs , params , i18n )
181+
182+ outprops = {"lat" , "lon" , "id" , "item" }
183+ if params .full :
184+ outprops = None
185+
186+ #Left here for retrocompat
187+ for issue in issues :
188+ issue ["id" ]: issue ["uuid" ]
189+
190+ issue .pop ("uuid" , None )
191+
159192 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- )
193+ issue ["update" ]: str (issue ["timestamp" ])
194+ issue ["usernames" ]: list (
195+ map (
196+ lambda elem : "username" in elem and elem ["username" ] or "" ,
197+ issue ["elems" ] or [],
198+ )
199+ )
200+ issue ["osm_ids" ]: dict (
201+ map (
202+ lambda k_g : (
203+ {"N" : "nodes" , "W" : "ways" , "R" : "relations" }[k_g [0 ]],
204+ list (map (lambda g : g ["id" ], k_g [1 ])),
177205 ),
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- )
206+ groupby (
207+ sorted (issue ["elems" ] or [], key = lambda e : e ["type" ]),
208+ lambda e : e ["type" ],
189209 ),
190- }
210+ )
191211 )
192- out . append ( i )
212+ issue . pop ( "timestamp" , None )
193213
194- return {"issues" : out }
214+ return {"issues" :[
215+ {
216+ k : v for k , v in issue .items () if outprops == None or k in outprops
217+ }
218+ for issue in issues
219+ ]}
195220
196221
197222@router .get ("/0.3/issues.josm" , tags = ["issues" ])
@@ -222,38 +247,6 @@ async def issues_josm(
222247 )
223248
224249
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-
257250@router .get ("/0.3/issues.rss" , response_class = RSSResponse , tags = ["issues" ])
258251async def issues_rss (
259252 request : Request ,
@@ -262,6 +255,7 @@ async def issues_rss(
262255 params = Depends (commons_params .params ),
263256 i18n : i18n .Translator = Depends (i18n .i18n ),
264257) -> RSSResponse :
258+ params .full = True
265259 title , issues = await _issues (db , langs , params , i18n )
266260 return RSSResponse (
267261 rss (
@@ -286,6 +280,7 @@ async def issues_gpx(
286280 params = Depends (commons_params .params ),
287281 i18n : i18n .Translator = Depends (i18n .i18n ),
288282) -> GPXResponse :
283+ params .full = True
289284 title , issues = await _issues (db , langs , params , i18n )
290285 return GPXResponse (
291286 gpx (
@@ -310,6 +305,7 @@ async def issues_kml(
310305 params = Depends (commons_params .params ),
311306 i18n : i18n .Translator = Depends (i18n .i18n ),
312307) -> KMLResponse :
308+ params .full = True
313309 title , issues = await _issues (db , langs , params , i18n )
314310 return KMLResponse (
315311 kml (
@@ -334,6 +330,7 @@ async def issues_csv(
334330 params = Depends (commons_params .params ),
335331 i18n : i18n .Translator = Depends (i18n .i18n ),
336332) -> str :
333+ params .full = True
337334 title , issues = await _issues (db , langs , params , i18n )
338335 return csv (
339336 title = title ,
@@ -355,6 +352,7 @@ async def issues_geojson(
355352 params = Depends (commons_params .params ),
356353 i18n : i18n .Translator = Depends (i18n .i18n ),
357354) -> GeoJSONFeatureCollection :
355+ params .full = True
358356 title , issues = await _issues (db , langs , params , i18n )
359357 return {
360358 "type" : "FeatureCollection" ,
@@ -388,6 +386,7 @@ async def issues_maproulette_jsonl(
388386 i18n : i18n .Translator = Depends (i18n .i18n ),
389387) -> List [Any ]:
390388 params .limit = 100000
389+ params .full = True
391390 title , issues = await _issues (db , langs , params , i18n )
392391 type_map = {"N" : "node" , "W" : "way" , "R" : "relation" }
393392 return [
0 commit comments