Now the width and height of the map are parsed from <googlemap> as well.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sun, 15 Sep 2013 13:04:25 +0000 (13:04 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Sun, 15 Sep 2013 13:04:25 +0000 (13:04 +0000)
git-svn-id: http://www.winterrodeln.org/svn/wrpylib/trunk@1588 7aebc617-e5e2-0310-91dc-80fb5f6d2477

setup.py
tests/test_mwmarkup.py
tests/test_wrmwmarkup.py
wrpylib/mwmarkup.py
wrpylib/wrmwmarkup.py

index 1f0a4e5f7b7264825d65366fce5763226a25c1c6..61a0553f85859ea66c20e55c54b0594b82873ad4 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@
 from setuptools import setup
 
 setup(name='wrpylib',
-    version='0.2.0',
+    version='0.3.0',
     description='Winterrodeln Python Library',
     author='Philipp Spitzer',
     author_email='philipp.spitzer@winterrodeln.org',
index 52f7cdb4a15ac892cae9c744a346680a22254107..456ffa69e8aae735078ceba44572d1f73f0f22e5 100644 (file)
@@ -110,9 +110,10 @@ def test_parse_googlemap():
     47.112408,11.271119
     </googlemap>
     '''
-    center, zoom, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext)
-    assert center == (11.272337, 47.113291)
-    assert zoom == 15
+    attributes, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext)
+    assert attributes['lon'] == 11.272337
+    assert attributes['lat'] == 47.113291
+    assert attributes['zoom'] == 15
     assert coords == [
         (11.266026, 47.114958, 'Parkplatz', 'Erster Parkplatz'),
         (11.266262, 47.114715, 'Gasthaus', u'Alt Bärnbad (Gasthaus)')]
index c38c823ee8a63e86f362532526171da190c82694..1eaa06e697ec50fb0e7e4cea582dc4701a676d65 100644 (file)
@@ -61,7 +61,7 @@ def test_gasthausbox_to_inn():
 
 def test_googlemap_to_wrmap():
     wikitext = u'''
-    <googlemap version="0.9" lat="47.113291" lon="11.272337" zoom="15">
+    <googlemap version="0.9" lat="47.113291" lon="11.272337" zoom="15" height="450">
     (Parkplatz)47.114958,11.266026
     Erster Parkplatz
     
@@ -74,11 +74,12 @@ def test_googlemap_to_wrmap():
     47.112408,11.271119
     </googlemap>
     '''
-    center, zoom, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext)
-    json = wrpylib.wrmwmarkup.googlemap_to_wrmap(center, zoom, coords, paths)
+    attributes, coords, paths = wrpylib.mwmarkup.parse_googlemap(wikitext)
+    json = wrpylib.wrmwmarkup.googlemap_to_wrmap(attributes, coords, paths)
     assert json['properties']['lon'] == 11.272337
     assert json['properties']['lat'] == 47.113291
     assert json['properties']['zoom'] == 15
+    assert json['properties']['height'] == 450
     assert json['features'][0]['properties']['type'] == 'parkplatz'
     assert json['features'][0]['properties']['name'] == 'Erster Parkplatz'
     assert json['features'][0]['geometry']['coordinates'] == [11.266026, 47.114958]
index 026e4cde0da070cea00c38f56a0943faca1ba33e..ace7362f78bd0322fa3d8eddbf6b8bb74bf6b962 100644 (file)
@@ -175,12 +175,12 @@ def parse_googlemap(wikitext):
     47.112408,11.271119
     </googlemap>
     '''
-    :returns: the tuple (center, zoom, coords, paths).
-        center is the tuple (lon, lat) of the google maps or (None, None) if not provided
-        zoom is the google zoom level as integer or None if not provided
+    :returns: The tuple (attributes, coords, paths) is returned.
+        attributes is a dict that contains the attribues that are present
+        (e.g. lon, lat, zoom, width, height) converted to float (lon, lat) or int.
         coords is a list of (lon, lat, symbol, title) tuples.
         paths is a list of (style, coords) tuples.
-        coords is again a list of (lot, lat, symbol, title) tuples."""
+        coords is again a list of (lon, lat, symbol, title) tuples."""
 
     def is_coord(line):
         """Returns True if the line contains a coordinate."""
@@ -206,7 +206,7 @@ def parse_googlemap(wikitext):
 
     start, content, endtag, end = find_tag(wikitext, 'googlemap')
     if start is None:
-        raise ParseError('<googlemap> tag not found.')
+        raise ParseError(u'<googlemap> tag not found.')
     if content is None:
         xml_only = wikitext[start:endtag]
     else:
@@ -216,15 +216,21 @@ def parse_googlemap(wikitext):
         gm = xml.etree.ElementTree.XML(xml_only.encode('UTF8'))
     except xml.etree.ElementTree.ParseError as e:
         row, column = e.position
-        raise ParseError("XML parse error in <googlemap ...>.")
-    zoom = gm.get('zoom')
-    lon = gm.get('lon')
-    lat = gm.get('lat')
-    if not zoom is None: zoom = int(zoom)
-    if not lon is None: lon = float(lon)
-    if not lat is None: lat = float(lat)
-    center = (lon, lat)
+        raise ParseError(u"XML parse error in <googlemap ...>.")
 
+    # parse attributes
+    attributes = {}
+    try:
+        for key in ['lon', 'lat']:
+            if gm.get(key) is not None:
+                attributes[key] = float(gm.get(key))
+        for key in ['zoom', 'width', 'height']:
+            if gm.get(key) is not None:
+                attributes[key] = int(gm.get(key))
+    except ValueError as error:
+        raise ParseError(u'Error at parsing attribute {0} of <googlemap>: {1}'.format(key, unicode(error)))
+
+    # parse points and lines
     coords = []
     paths = []
     lines = wikitext[content:endtag].split("\n")
@@ -267,5 +273,6 @@ def parse_googlemap(wikitext):
             continue
 
         raise ParseError(u'Unknown line syntax: ' + line)
-    return (center, zoom, coords, paths)
+
+    return (attributes, coords, paths)
 
index 04fc1cc8e4c39664e5e6b9120e1de031161abf58..bcd230f5eac640642fc7d090abd43e30215d13a0 100644 (file)
@@ -324,7 +324,7 @@ def find_all_templates(wikitext, find_func):
     return results
 
 
-def googlemap_to_wrmap(center, zoom, coords, paths):
+def googlemap_to_wrmap(attributes, coords, paths):
     """Converts the output of parse_googlemap to the GeoJSON format wrmap uses.
     :returns: (GeoJSON as nested Python datatypes)
     """
@@ -361,7 +361,7 @@ def googlemap_to_wrmap(center, zoom, coords, paths):
     geojson = {
             'type': 'FeatureCollection',
             'features': json_features,
-            'properties': {'lon': center[0], 'lat': center[1], 'zoom': zoom}}
+            'properties': attributes}
     return geojson