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