Changeset afabfc9 in osmose-frontend


Ignore:
Timestamp:
Mar 8, 2014 10:32:30 PM (6 years ago)
Author:
Frédéric Rodrigo <fred.rodrigo@…>
Children:
d052091
Parents:
f8d64dd7
git-author:
Frédéric Rodrigo <fred.rodrigo@…> (04/03/2014 22:47:47)
git-committer:
Frédéric Rodrigo <fred.rodrigo@…> (08/03/2014 22:32:30)
Message:

Add error/fresh_elem to API

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • error.py

    r832fcc5 rafabfc9  
    2121 
    2222from bottle import route, request, template, response, abort 
    23 import StringIO, os, tempfile, urllib2 
     23import StringIO, os, tempfile 
    2424 
    2525from tools import osmose_common 
    2626from tools import utils 
    2727from tools import tag2link 
     28from tools import OsmSax 
    2829 
    2930t2l = tag2link.tag2link("tools/tag2link_sources.xml") 
     
    8485        elements=elements, columns_elements=columns_elements, 
    8586        fix=fix, columns_fix=columns_fix) 
     87 
     88 
     89@route('/api/0.2/error/<err_id:int>/fresh_elems') 
     90def fresh_elems(db, lang, err_id): 
     91    (marker, columns_marker, elements, columns_elements, fix, columns_fix) = _get(db, err_id) 
     92 
     93    data_type = { "N": "node", "W": "way", "R": "relation", "I": "infos"} 
     94 
     95    def expand_tags(tags): 
     96      t = [] 
     97      for (k, v) in tags.items(): 
     98        t.append({"k": k, "v": v}) 
     99      return t 
     100 
     101    elems = [] 
     102    for elem in elements: 
     103      if elem["data_type"]: 
     104        fresh_elem = utils.fetch_osm_elem(data_type[elem["data_type"]], elem["id"]) 
     105 
     106        if len(fresh_elem) > 0: 
     107            tmp_elem = {data_type[elem["data_type"]]: True, 
     108                    "type": data_type[elem["data_type"]], 
     109                    "id": elem["id"], 
     110                    "version": fresh_elem["version"], 
     111                    "tags": expand_tags(fresh_elem[u'tag']), 
     112                   } 
     113            elems.append(tmp_elem) 
     114 
     115    return { 
     116        "error_id":err_id, 
     117        "elems":elems, 
     118    } 
    86119 
    87120 
     
    184217@route('/api/0.2/error/<err_id:int>/fix/<fix_num:int>') 
    185218def fix(db, err_id, fix_num=0): 
    186     remote_url = "http://api.openstreetmap.fr/api/0.6" 
    187  
    188219    data_type = {"N": "node", "W": "way", "R": "relation"} 
    189220 
     
    199230        response.content_type = 'text/xml; charset=utf-8' 
    200231        if res["elem_id"] > 0: 
    201             elem_url = os.path.join(remote_url, 
    202                                     data_type[res["elem_data_type"]], 
    203                                     str(res["elem_id"]) 
    204                                    ) 
    205             if res["elem_data_type"] == "W": 
    206                 elem_url = os.path.join(elem_url, "full") 
    207             elem_io = urllib2.urlopen(elem_url) 
    208             osm_read = OsmSax.OsmSaxReader(elem_io) 
    209232            out = StringIO.StringIO() 
    210233            o = OsmSaxFixWriter(out, "UTF-8", 
     
    212235                                res["tags_create"], res["tags_modify"], res["tags_delete"]) 
    213236            o.startDocument() 
     237 
     238            osm_read = utils.fetch_osm_data(data_type[res["elem_data_type"]], res["elem_id"]) 
    214239            osm_read.CopyTo(o) 
    215240 
     
    241266 
    242267 
    243  
    244 from tools import OsmSax 
    245  
    246268class OsmSaxFixWriter(OsmSax.OsmSaxWriter): 
    247269 
  • tools/OsmSax.py

    rab4e907 rafabfc9  
    430430            self.Element("member", m) 
    431431        self.endElement("relation") 
    432        
     432 
     433class OsmDictWriter: 
     434 
     435    def __init__(self): 
     436        self.data = { 
     437            'node': [], 
     438            'way': [], 
     439            'relation': [] 
     440        } 
     441 
     442    def begin(self): 
     443        pass 
     444 
     445    def end(self): 
     446        pass 
     447 
     448    def NodeCreate(self, data): 
     449        if data: 
     450            self.data[u'node'].append(data) 
     451 
     452    def WayCreate(self, data): 
     453        if data: 
     454            self.data[u'way'].append(data) 
     455 
     456    def RelationCreate(self, data): 
     457        if data: 
     458            self.data[u'relation'].append(data) 
    433459 
    434460def NodeToXml(data, full = False): 
  • tools/utils.py

    re05a982 rafabfc9  
    33 
    44import os, re, Cookie 
    5 import datetime 
     5import datetime, urllib2 
     6import OsmSax 
    67 
    78################################################################################ 
     
    1213pg_base           = "osmose_frontend" 
    1314website           = "osmose.openstreetmap.fr" 
     15 
     16remote_url_read   = "http://api.openstreetmap.fr/" 
     17remote_url_write  = "http://api.openstreetmap.org/" 
    1418 
    1519################################################################################ 
     
    7781                return res[l] 
    7882        return no_translation 
     83 
     84########################################################################### 
     85## API 
     86 
     87def fetch_osm_data(type, id, full=True): 
     88    elem_url = os.path.join(remote_url_read + 'api/0.6/', type, str(id)) 
     89    if type == "way" and full: 
     90        elem_url = os.path.join(elem_url, "full") 
     91    elem_io = urllib2.urlopen(elem_url) 
     92    osm_read = OsmSax.OsmSaxReader(elem_io) 
     93 
     94    return osm_read 
     95 
     96def fetch_osm_elem(type, id): 
     97    osmdw = OsmSax.OsmDictWriter() 
     98    osm_read = fetch_osm_data(type, id, full=False) 
     99    osm_read.CopyTo(osmdw) 
     100    elem = osmdw.data[type] 
     101    if len(elem) > 0: 
     102        return elem[0] 
Note: See TracChangeset for help on using the changeset viewer.