Skip to content

Commit 837f014

Browse files
committed
Add full tags to 0.3 issues API JSON response
1 parent 6265571 commit 837f014

File tree

2 files changed

+73
-75
lines changed

2 files changed

+73
-75
lines changed

api/issues.py

Lines changed: 71 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -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"])
258250
async 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 [

docker/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Docker
22

3-
Copy `.env.template` as `.env` and adjustcontent, only required to enable loggin from osm.org.
3+
Copy `.env.template` as `.env` and adjust content, only required to enable loggin from osm.org.
44

55
Build the Docker image, within the docker directory:
66
```
7-
curl http://osmose.openstreetmap.fr/export/osmose-menu.sql.bz2 | bzcat > osmose-menu.sql
7+
curl https://osmose.openstreetmap.fr/export/osmose-menu.sql.bz2 | bzcat > osmose-menu.sql
88
docker-compose build
99
```
1010

0 commit comments

Comments
 (0)