forked from edward/owl-map
Fix for OSM objects with multiple geometry
This commit is contained in:
parent
6f30e1232a
commit
19a9010aa7
23
web_view.py
23
web_view.py
|
@ -3,6 +3,7 @@
|
|||
from flask import (Flask, render_template, request, jsonify, redirect, url_for, g,
|
||||
flash, session, Response, stream_with_context)
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.sql.expression import update
|
||||
from matcher import (nominatim, model, database, commons, wikidata, wikidata_api,
|
||||
osm_oauth, edit, mail, api)
|
||||
from matcher.data import property_map
|
||||
|
@ -578,10 +579,12 @@ def process_edit(changeset_id, e):
|
|||
existing = root.find('.//tag[@k="wikidata"]')
|
||||
if e["op"] == "add" and existing is not None:
|
||||
return "already_added"
|
||||
if e["op"] == "remove" and existing is None:
|
||||
return "already_removed"
|
||||
if e["op"] == "remove":
|
||||
if existing is None:
|
||||
return "already_removed"
|
||||
if existing.get("v") != qid:
|
||||
return "different_qid"
|
||||
|
||||
root = etree.fromstring(r.content)
|
||||
root[0].set("changeset", str(changeset_id))
|
||||
if e["op"] == "add":
|
||||
tag = etree.Element("tag", k="wikidata", v=qid)
|
||||
|
@ -604,8 +607,18 @@ def process_edit(changeset_id, e):
|
|||
if not success:
|
||||
return "element-error"
|
||||
|
||||
osm.tags["wikidata"] = qid
|
||||
flag_modified(osm, "tags")
|
||||
new_tags = dict(osm.tags)
|
||||
if e["op"] == "add":
|
||||
new_tags["wikidata"] = qid
|
||||
if e["op"] == "remove":
|
||||
del new_tags["wikidata"]
|
||||
|
||||
cls = type(osm)
|
||||
database.session.execute(
|
||||
update(cls).
|
||||
where(cls.src_id == osm.src_id).
|
||||
values(tags=new_tags)
|
||||
)
|
||||
|
||||
db_edit = model.ChangesetEdit(
|
||||
changeset_id=changeset_id,
|
||||
|
|
Loading…
Reference in a new issue