X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wrpylib.git/blobdiff_plain/f64a954a8596d88ee77707d2c42892aba161b385..cfeddbc71fd478a591c35f9336b81e0356cc4de7:/wrpylib/wrmwcache.py diff --git a/wrpylib/wrmwcache.py b/wrpylib/wrmwcache.py index d9da56f..ba384b5 100644 --- a/wrpylib/wrmwcache.py +++ b/wrpylib/wrmwcache.py @@ -18,8 +18,7 @@ def update_wrsledruncache(connection): is raised. No other exception type should be raised under normal circumstances. >>> from sqlalchemy.engine import create_engine - >>> engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=0') - >>> # see: https://sourceforge.net/tracker/?func=detail&aid=2837134&group_id=22307&atid=374932 + >>> engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1') >>> update_wrsledruncache(engine.connect()) """ metadata = schema.MetaData() @@ -61,8 +60,7 @@ def update_wrinncache(connection): is raised. No other exception type should be raised under normal circumstances. >>> from sqlalchemy.engine import create_engine - >>> engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=0') - >>> # see: https://sourceforge.net/tracker/?func=detail&aid=2837134&group_id=22307&atid=374932 + >>> engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1') >>> update_wrinncache(engine.connect()) """ metadata = schema.MetaData() @@ -105,7 +103,6 @@ def update_wrreportcache(connection, page_id=None): >>> from sqlalchemy.engine import create_engine >>> engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1') - >>> # see: https://sourceforge.net/tracker/?func=detail&aid=2837134&group_id=22307&atid=374932 >>> update_wrreportcache(engine.connect()) """ metadata = schema.MetaData() @@ -144,11 +141,9 @@ def update_wrmapcache(connection): is raised. No other exception type should be raised under normal circumstances. >>> from sqlalchemy.engine import create_engine - >>> engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=0') - >>> # or: engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=0&passwd=XXXXX') - >>> # see: https://sourceforge.net/tracker/?func=detail&aid=2837134&group_id=22307&atid=374932 - >>> connection = engine.connect() - >>> update_wrmapcache(connection) + >>> engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1') + >>> # or: engine = create_engine('mysql://philipp@localhost:3306/philipp_winterrodeln_wiki?charset=utf8&use_unicode=1&passwd=XXXXX') + >>> update_wrmapcache(engine.connect()) """ metadata = schema.MetaData() page = mwdb.page_table(metadata) @@ -172,29 +167,36 @@ def update_wrmapcache(connection): # Refill wrmappointcache and wrmappathcache tables for sledrun_page in sledrun_pages: try: - result = mwmarkup.parse_googlemap(sledrun_page.old_text) - if not result is None: - center, zoom, coords, paths = result + start, content, endtag, end = mwmarkup.find_tag(sledrun_page.old_text, 'wrmap') + if content is None: + continue + geojson = wrmwmarkup.parse_wrmap(sledrun_page.old_text[start:end]) + + for feature in geojson['features']: + properties = feature['properties'] + coordinates = feature['geometry']['coordinates'] + # Points - for coord in coords: - lon, lat, point_type, label = coord - point_types = {u'Gasthaus': u'hut', u'Haltestelle': u'busstop', u'Parkplatz': u'carpark', u'Achtung': u'warning'} - if not point_type is None: - if not point_types.has_key(point_type): raise RuntimeError(u'Unknown point type {0}'.format(point_type)) - point_type = point_types[point_type] - sql = u'insert into wrmappointcache (page_id, type, point, label) values (%s, %s, POINT(%s, %s), %s)' - connection.execute(sql, (sledrun_page.page_id, point_type, lon, lat, label)) + if properties['type'] in wrmwmarkup.WRMAP_POINT_TYPES: + lon, lat = coordinates + label = properties.get('name') + point_types = {u'gasthaus': u'hut', u'haltestelle': u'busstop', u'parkplatz': u'carpark', u'achtung': u'warning', u'punkt': u'point'} + point_type = point_types[properties['type']] + sql = u'insert into wrmappointcache (page_id, type, point, label) values (%s, %s, POINT(%s, %s), %s)' + connection.execute(sql, (sledrun_page.page_id, point_type, lon, lat, label)) + # Paths - for path_type, coords in paths: - path_type = path_type.lower() - path_types = {u'6#ff014e9a': u'sledrun', u'6#ffe98401': u'walkup', u'6#ff7f7fff': u'alternative', u'3#ff000000': u'lift', u'3#ffe1e100': u'recommendedcarroute'} - if not path_types.has_key(path_type): raise RuntimeError(u'Unknown path type {0}'.format(path_type)) - path_type = path_types[path_type] - path = u", ".join(["{0} {1}".format(lon, lat) for lon, lat, symbol, title in coords]) + elif properties['type'] in wrmwmarkup.WRMAP_LINE_TYPES: + path_types = {u'rodelbahn': u'sledrun', u'gehweg': u'walkup', u'alternative': u'alternative', u'lift': u'lift', u'anfahrt': u'recommendedcarroute', u'linie': u'line'} + path_type = path_types[properties['type']] + path = u", ".join(["{0} {1}".format(lon, lat) for lon, lat in coordinates]) path = u'LineString({0})'.format(path) if path_type == u'recommendedcarroute': continue sql = u'insert into wrmappathcache (path, page_id, type) values (GeomFromText(%s), %s, %s)' connection.execute(sql, (path, sledrun_page.page_id, path_type)) + + else: + raise RuntimeError(u'Unknown feature type {0}'.format(properties['type'])) except RuntimeError as e: error_msg = u"Error at sledrun '{0}': {1}".format(sledrun_page.page_title, unicode(e)) transaction.rollback()