@@ -136,6 +136,35 @@ async def errors(
136
136
137
137
return out
138
138
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 )
139
168
140
169
@router .get ("/0.3/issues" , tags = ["issues" ])
141
170
@router .get ("/0.3/issues.json" , tags = ["issues" ])
@@ -144,54 +173,49 @@ async def issues(
144
173
db : Connection = Depends (database .db ),
145
174
langs : LangsNegociation = Depends (langs .langs ),
146
175
params = Depends (commons_params .params ),
176
+ i18n : i18n .Translator = Depends (i18n .i18n ),
147
177
) -> Dict [Literal ["issues" ], List [Dict [str , Any ]]]:
148
- params .limit = min (params .limit , 100000 )
149
- results = await query ._gets (db , params )
150
178
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
+
159
191
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 ])),
177
204
),
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" ],
189
208
),
190
- }
209
+ )
191
210
)
192
- out . append ( i )
211
+ issue . pop ( "timestamp" , None )
193
212
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
+ ]}
195
219
196
220
197
221
@router .get ("/0.3/issues.josm" , tags = ["issues" ])
@@ -222,38 +246,6 @@ async def issues_josm(
222
246
)
223
247
224
248
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
-
257
249
@router .get ("/0.3/issues.rss" , response_class = RSSResponse , tags = ["issues" ])
258
250
async def issues_rss (
259
251
request : Request ,
@@ -262,6 +254,7 @@ async def issues_rss(
262
254
params = Depends (commons_params .params ),
263
255
i18n : i18n .Translator = Depends (i18n .i18n ),
264
256
) -> RSSResponse :
257
+ params .full = True
265
258
title , issues = await _issues (db , langs , params , i18n )
266
259
return RSSResponse (
267
260
rss (
@@ -286,6 +279,7 @@ async def issues_gpx(
286
279
params = Depends (commons_params .params ),
287
280
i18n : i18n .Translator = Depends (i18n .i18n ),
288
281
) -> GPXResponse :
282
+ params .full = True
289
283
title , issues = await _issues (db , langs , params , i18n )
290
284
return GPXResponse (
291
285
gpx (
@@ -310,6 +304,7 @@ async def issues_kml(
310
304
params = Depends (commons_params .params ),
311
305
i18n : i18n .Translator = Depends (i18n .i18n ),
312
306
) -> KMLResponse :
307
+ params .full = True
313
308
title , issues = await _issues (db , langs , params , i18n )
314
309
return KMLResponse (
315
310
kml (
@@ -334,6 +329,7 @@ async def issues_csv(
334
329
params = Depends (commons_params .params ),
335
330
i18n : i18n .Translator = Depends (i18n .i18n ),
336
331
) -> str :
332
+ params .full = True
337
333
title , issues = await _issues (db , langs , params , i18n )
338
334
return csv (
339
335
title = title ,
@@ -355,6 +351,7 @@ async def issues_geojson(
355
351
params = Depends (commons_params .params ),
356
352
i18n : i18n .Translator = Depends (i18n .i18n ),
357
353
) -> GeoJSONFeatureCollection :
354
+ params .full = True
358
355
title , issues = await _issues (db , langs , params , i18n )
359
356
return {
360
357
"type" : "FeatureCollection" ,
@@ -388,6 +385,7 @@ async def issues_maproulette_jsonl(
388
385
i18n : i18n .Translator = Depends (i18n .i18n ),
389
386
) -> List [Any ]:
390
387
params .limit = 100000
388
+ params .full = True
391
389
title , issues = await _issues (db , langs , params , i18n )
392
390
type_map = {"N" : "node" , "W" : "way" , "R" : "relation" }
393
391
return [
0 commit comments