Skip to content

Commit 5d4e699

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

File tree

2 files changed

+74
-75
lines changed

2 files changed

+74
-75
lines changed

api/issues.py

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

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)