Draft helper script for intermap tables.
[philipp/winterrodeln/wrpylib.git] / wrpylib / wrmwcache.py
index 5b13719b670bf1af439264a3112bd374b8c82203..95e0e96805f3d0ba8a5af4ff1e97c23890b372c1 100644 (file)
@@ -6,7 +6,7 @@ from sqlalchemy import schema
 from sqlalchemy.sql import select
 from sqlalchemy.sql.expression import func as sqlfunc
 from osgeo import ogr
 from sqlalchemy.sql import select
 from sqlalchemy.sql.expression import func as sqlfunc
 from osgeo import ogr
-from wrpylib import mwdb, wrmwdb, mwmarkup, wrmwmarkup, wrvalidators
+from wrpylib import mwdb, wrmwdb, wrmwmarkup, wrvalidators
 
 
 class UpdateCacheError(RuntimeError):
 
 
 class UpdateCacheError(RuntimeError):
@@ -50,7 +50,7 @@ def update_wrsledruncache(connection):
             sledrun.page_id = sledrun_page.page_id
             sledrun.page_title = sledrun_page.page_title
             sledrun.name_url = wrvalidators.sledrun_page_title_to_pretty_url(sledrun_page.page_title)
             sledrun.page_id = sledrun_page.page_id
             sledrun.page_title = sledrun_page.page_title
             sledrun.name_url = wrvalidators.sledrun_page_title_to_pretty_url(sledrun_page.page_title)
-            sledrun.under_construction = connection.execute(select([categorylinks], (categorylinks.c.cl_from==sledrun_page.page_id) & (categorylinks.c.cl_to == 'In_Arbeit')).alias('x').count()).fetchone()[0] > 0
+            sledrun.under_construction = connection.execute(select([sqlfunc.count()], (categorylinks.c.cl_from==sledrun_page.page_id) & (categorylinks.c.cl_to == 'In_Arbeit')).alias('x')).fetchone()[0] > 0
             connection.execute(wrsledruncache.insert(sledrun.__dict__))
         except ValueError as e:
             transaction.rollback()
             connection.execute(wrsledruncache.insert(sledrun.__dict__))
         except ValueError as e:
             transaction.rollback()
@@ -73,6 +73,8 @@ def update_wrinncache(connection):
     categorylinks = mwdb.categorylinks_table(metadata)
     revision = mwdb.revision_table(metadata)
     text = mwdb.text_table(metadata)
     categorylinks = mwdb.categorylinks_table(metadata)
     revision = mwdb.revision_table(metadata)
     text = mwdb.text_table(metadata)
+    class Inn:
+        pass
 
     transaction = connection.begin()
 
 
     transaction = connection.begin()
 
@@ -86,13 +88,14 @@ def update_wrinncache(connection):
         
     # Refill wrinncache table
     for inn_page in inn_pages:
         
     # Refill wrinncache table
     for inn_page in inn_pages:
-        try: 
-            start, end, inn = wrmwmarkup.gasthausbox_to_inn(inn_page.old_text)
+        try:
+            gasthausbox = wrvalidators.gasthausbox_from_str(inn_page.old_text)
+            inn = wrmwmarkup.inn_from_gasthausbox(gasthausbox, Inn())
             inn.page_id = inn_page.page_id
             inn.page_title = inn_page.page_title
             inn.page_id = inn_page.page_id
             inn.page_title = inn_page.page_title
-            inn.under_construction = connection.execute(select([categorylinks], (categorylinks.c.cl_from==inn_page.page_id) & (categorylinks.c.cl_to == 'In_Arbeit')).alias('x').count()).fetchone()[0] > 0 # It would be better to do this in the query above
+            inn.under_construction = connection.execute(select([sqlfunc.count()], (categorylinks.c.cl_from==inn_page.page_id) & (categorylinks.c.cl_to == 'In_Arbeit')).alias('x')).fetchone()[0] > 0 # It would be better to do this in the query above
             connection.execute(wrinncache.insert(inn.__dict__))
             connection.execute(wrinncache.insert(inn.__dict__))
-        except (RuntimeError, formencode.Invalid) as e:
+        except ValueError as e:
             transaction.rollback()
             error_msg = "Error as inn '{0}': {1}".format(inn_page.page_title, str(e))
             raise UpdateCacheError(error_msg, inn_page.page_title, e)
             transaction.rollback()
             error_msg = "Error as inn '{0}': {1}".format(inn_page.page_title, str(e))
             raise UpdateCacheError(error_msg, inn_page.page_title, e)
@@ -110,7 +113,6 @@ def update_wrreportcache(connection, page_id=None):
     >>> update_wrreportcache(engine.connect())
     """
     metadata = schema.MetaData()
     >>> update_wrreportcache(engine.connect())
     """
     metadata = schema.MetaData()
-    wrreport = wrmwdb.wrreport_table(metadata)
     wrreportcache = wrmwdb.wrreportcache_table(metadata)
     transaction = connection.begin()
 
     wrreportcache = wrmwdb.wrreportcache_table(metadata)
     transaction = connection.begin()
 
@@ -170,11 +172,16 @@ def update_wrmapcache(connection):
     
     # Refill wrmappointcache and wrmappathcache tables
     for sledrun_page in sledrun_pages:
     
     # Refill wrmappointcache and wrmappathcache tables
     for sledrun_page in sledrun_pages:
-        try: 
-            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])
+        try:
+            import mwparserfromhell
+            wikicode = mwparserfromhell.parse(sledrun_page.old_text)
+            wrmap_list = wikicode.filter_tags(recursive=False, matches=lambda tag: tag.tag == 'wrmap')
+            if len(wrmap_list) == 0:
+                continue  # not wrmap in page
+            if len(wrmap_list) > 1:
+                raise UpdateCacheError('{} <wrmap ...> entries found in article "{}"'.format(len(wrmap_list), sledrun_page.page_title))
+            wrmap = wrmap_list[0]
+            geojson = wrmwmarkup.parse_wrmap(str(wrmap))
 
             for feature in geojson['features']:
                 properties = feature['properties']
 
             for feature in geojson['features']:
                 properties = feature['properties']