X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wrpylib.git/blobdiff_plain/cb4a43b77797ccae9e6c1744508fa3c6634f2f8f..8e51ab5879cb7901759939246df67d17dd26923b:/wrpylib/wrmwcache.py diff --git a/wrpylib/wrmwcache.py b/wrpylib/wrmwcache.py index 1540dc8..95e0e96 100644 --- a/wrpylib/wrmwcache.py +++ b/wrpylib/wrmwcache.py @@ -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 wrpylib import mwdb, wrmwdb, mwmarkup, wrmwmarkup, wrvalidators +from wrpylib import mwdb, wrmwdb, wrmwmarkup, wrvalidators 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.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() @@ -93,7 +93,7 @@ def update_wrinncache(connection): inn = wrmwmarkup.inn_from_gasthausbox(gasthausbox, Inn()) 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__)) except ValueError as e: transaction.rollback() @@ -172,11 +172,16 @@ def update_wrmapcache(connection): # 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('{} 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']