2 # -*- coding: iso-8859-15 -*-
5 from pylons import request, response, session, url, tmpl_context as c
6 from pylons.controllers.util import abort, redirect
7 import webhelpers.paginate as paginate
9 from wradmin.lib.base import BaseController, render
10 import wradmin.model as model
11 import sqlalchemy as sa
15 import wrpylib.wrmwmarkup
17 from weberror import collector # Prevent a bug of weberror # See https://bitbucket.org/bbangert/weberror/issue/3/nameerror-global-name-fallback_encoding-is-not
18 collector.FALLBACK_ENCODING = 'utf-8' # --"--
20 log = logging.getLogger(__name__)
22 class RodelbahnController(BaseController):
25 return render('index.html')
30 q = model.meta.Session.query(model.WrSledrunCache)
31 q = q.order_by(model.WrSledrunCache.page_title)
32 c.paginator = paginate.Page(q, page=int(request.params.get('page', 1)), items_per_page = 25)
33 return render('rodelbahn_list.html')
38 q = model.meta.Session.query(model.WrSledrunCache)
39 c.sledding = q.get(id)
40 if c.sledding is None: abort(404)
41 q = model.meta.Session.query(model.WrReport)
42 q = q.filter_by(page_id=id).order_by(sa.sql.expression.desc(model.WrReport.id))
43 c.paginator = paginate.Page(q, page=int(request.params.get('page', 1)), items_per_page = 25)
44 return render('rodelbahn_view.html')
48 "Updates the wrsledruncache table from the wiki"
49 from wradmin.model import page_table as page, wrsledruncache_table as wrsledruncache, categorylinks_table as categorylinks, revision_table as revision, text_table as text
50 from sqlalchemy.sql import select
51 c = model.meta.Session.connection()
53 # As MySQL does not support transactions we make a dry run first and only continue if there is no fatal error
55 # Query all sledding routes
56 q = select([page, categorylinks, revision, text], (page.c.page_latest==revision.c.rev_id) & (text.c.old_id==revision.c.rev_text_id) & (categorylinks.c.cl_from==page.c.page_id) & (categorylinks.c.cl_to==u'Rodelbahn'))
57 sledding_pages = c.execute(q)
59 # sql = u"select page_id, rev_id, old_id, page_title, old_text, 'In_Arbeit' in (select cl_to from categorylinks where cl_from=page_id) as under_construction from page, revision, text, categorylinks where page_latest=rev_id and old_id=rev_text_id and cl_from=page_id and cl_to='Rodelbahn' order by page_title"
61 # Delete all existing entries in wrsledruncache
62 if i == 1: c.execute(wrsledruncache.delete())
64 # Refill wrsledruncache table
66 for sl in sledding_pages:
68 start, end, sledrun = wrpylib.wrmwmarkup.rodelbahnbox_to_sledrun(sl.old_text, model.WrSledrunCache())
69 sledrun.page_id = sl.page_id
70 sledrun.page_title = sl.page_title
71 sledrun.under_construction = c.execute(select([categorylinks], (categorylinks.c.cl_from==sl.page_id) & (categorylinks.c.cl_to == u'In_Arbeit')).alias('x').count()).fetchone()[0] > 0 # It would be better to do this in the query above
72 if i == 1: model.meta.Session.add(sledrun)
73 except (RuntimeError, formencode.Invalid) as e: error_msg = u"Fehler bei Rodelbahn '%s': " % sl.page_title + unicode(e)
74 if i == 1: model.meta.Session.commit()
76 # Redirect to result page
77 if error_msg == '': session['flash'] = u'Die Rodelbahnliste wurde erfolgreich aktualisiert.'
78 else: session['flash'] = error_msg
80 return redirect(url(controller='rodelbahn', action='list'))