source: osmose-frontend/false_positive.py

Last change on this file was 034ae3f, checked in by Jocelyn Jaubert <jocelyn.jaubert@…>, 6 years ago

Add pages for information and deletion of false_positives

  • Property mode set to 100644
File size: 3.9 KB
Line 
1#! /usr/bin/env python
2#-*- coding: utf-8 -*-
3###########################################################################
4##                                                                       ##
5## Copyrights Jocelyn Jaubert 2013                                       ##
6##                                                                       ##
7## This program is free software: you can redistribute it and/or modify  ##
8## it under the terms of the GNU General Public License as published by  ##
9## the Free Software Foundation, either version 3 of the License, or     ##
10## (at your option) any later version.                                   ##
11##                                                                       ##
12## This program is distributed in the hope that it will be useful,       ##
13## but WITHOUT ANY WARRANTY; without even the implied warranty of        ##
14## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         ##
15## GNU General Public License for more details.                          ##
16##                                                                       ##
17## You should have received a copy of the GNU General Public License     ##
18## along with this program.  If not, see <http://www.gnu.org/licenses/>. ##
19##                                                                       ##
20###########################################################################
21
22from bottle import route, request, template, response, abort, delete
23import StringIO, os, tempfile, urllib2
24
25from tools import osmose_common
26from tools import utils
27from tools import tag2link
28
29t2l = tag2link.tag2link("tools/tag2link_sources.xml")
30
31
32def _get(db, err_id, status):
33    columns = ["item", "source", "class", "elems", "subclass",
34        "lat", "lon",
35        "title", "subtitle",
36        "dynpoi_status.date", "dynpoi_class.timestamp"]
37    sql = "SELECT " + ",".join(columns) + """
38    FROM
39        dynpoi_status
40        JOIN dynpoi_class USING (source,class)
41    WHERE
42        dynpoi_status.status = %s AND
43        dynpoi_status.id = %s
44    """
45    db.execute(sql, (status, err_id, ))
46    marker = db.fetchone()
47
48    if not marker:
49        abort(410, "Id is not present in database.")
50
51    return (marker, columns)
52
53
54@route('/false-positive/<err_id:int>')
55def fp_(db, lang, err_id):
56    (marker, columns) = _get(db, err_id, 'false')
57
58    return template('false-positive/index', err_id=err_id, marker=marker, columns_marker=columns)
59
60
61@route('/api/0.2/false-positive/<err_id:int>')
62def fp(db, lang, err_id):
63    data_type = { "N": "node", "W": "way", "R": "relation", "I": "infos"}
64
65    # TRANSLATORS: link to tooltip help
66    url_help = _("http://wiki.openstreetmap.org/wiki/Osmose/errors")
67
68    translate = utils.translator(lang)
69
70    (marker, columns) = _get(db, err_id, 'false')
71
72    lat       = str(marker["lat"])
73    lon       = str(marker["lon"])
74    title     = translate.select(marker["title"])
75    subtitle  = translate.select(marker["subtitle"])
76    b_date    = marker["timestamp"] or ""
77    item      = marker["item"] or 0
78    date      = marker["date"].isoformat() or 0
79
80    return {
81        "lat":lat, "lon":lon,
82        "minlat": float(lat) - 0.002, "maxlat": float(lat) + 0.002,
83        "minlon": float(lon) - 0.002, "maxlon": float(lon) + 0.002,
84        "error_id":err_id,
85        "title":title, "subtitle":subtitle,
86        "b_date":b_date.strftime("%Y-%m-%d"),
87        "item":item,
88        "date":date,
89        "url_help":url_help
90    }
91
92
93@delete('/api/0.2/false-positive/<err_id:int>')
94def fp_delete(db, err_id):
95
96    sql = """SELECT id FROM dynpoi_status
97    WHERE
98        status = %s AND
99        id = %s
100    """
101    db.execute(sql, ('false', err_id, ))
102    m = db.fetchone()
103    if not m:
104        abort(410, "FAIL")
105
106    sql = """DELETE FROM dynpoi_status
107    WHERE
108        status = %s AND
109        id = %s
110    """
111    db.execute(sql, ('false', err_id, ))
112    db.connection.commit()
113
114    return
Note: See TracBrowser for help on using the repository browser.