-#!/usr/bin/python3.4
-from flask import request, abort, redirect, url_for, flash, render_template
+from urllib.parse import quote_plus
+
import paginate
import sqlalchemy as sa
+from flask import request, abort, redirect, url_for, flash, render_template, current_app
-import wrpylib.wrmwmarkup
-import wrpylib.wrmwcache
import wrpylib.mwmarkup
-
-import wradmin.model as model
+import wrpylib.wrmwcache
+import wrpylib.wrmwmarkup
+from wradmin.app import db
+from wradmin.model import WrSledrunCache, WrReport
+from wradmin.template_helper import PylonsHelper
class RodelbahnController:
def list(self):
"""Lists all sled runs"""
- q = model.meta.Session.query(model.WrSledrunCache)
- q = q.order_by(model.WrSledrunCache.page_title)
+ q = db.session.query(WrSledrunCache)
+ q = q.order_by(WrSledrunCache.page_title)
paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
url_maker=lambda page: url_for('rodelbahn_list', page=page),
items_per_page=25)
def view(self, id):
"""Displays a sled run"""
- q = model.meta.Session.query(model.WrSledrunCache)
- sledding = q.get(id)
- if sledding is None:
+ q = db.session.query(WrSledrunCache)
+ sledrun = q.get(id)
+ if sledrun is None:
abort(404)
- q = model.meta.Session.query(model.WrReport)
- q = q.filter_by(page_id=id).order_by(sa.sql.expression.desc(model.WrReport.id))
+ q = db.session.query(WrReport)
+ q = q.filter_by(page_id=id).order_by(sa.sql.expression.desc(WrReport.id))
paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
url_maker=lambda page: url_for('rodelbahn_view', id=id, page=page),
items_per_page=25)
- return render_template('rodelbahn_view.html', sledding=sledding, paginator=paginator)
+ return render_template('rodelbahn_view.html', sledding=sledrun, paginator=paginator)
+
+ def json_edit(self, sledrun_id):
+ q = db.session.query(WrSledrunCache)
+ sledrun = q.get(sledrun_id)
+ if sledrun is None:
+ abort(404)
+ mediawiki_index = f'{current_app.config["MEDIAWIKI_ROOT"]}/index.php'
+ schema_url = f'{mediawiki_index}?title=Winterrodeln:Datenschema/Rodelbahn/V1.json&action=raw'
+ json_url = f'{mediawiki_index}?title={quote_plus(sledrun.page_title)}/Rodelbahn.json&action=raw'
+ return render_template('json_editor.html', schema_url=schema_url, json_url=json_url)
def update(self):
"""Updates the wrsledruncache table from the wiki"""
- c = model.meta.Session.connection()
+ c = db.session.connection()
try:
wrpylib.wrmwcache.update_wrsledruncache(c)
- model.meta.Session.commit()
+ db.session.commit()
flash('Die Rodelbahnliste wurde erfolgreich aktualisiert.', 'info')
except wrpylib.wrmwcache.UpdateCacheError as e:
title = str(e.args[1])
- title = wrpylib.mwmarkup.to_title(title)
+ title = wrpylib.mwmarkup.dbkey_to_title(title)
msg = str(e.args[2])
msg = msg.replace('\n', '; ')
if len(e.args) == 3:
def update_regioncache(self):
"""Updates the wrregioncache table from the wiki"""
- c = model.meta.Session.connection()
+ c = db.session.connection()
try:
wrpylib.wrmwcache.update_wrregioncache(c)
- model.meta.Session.commit()
+ db.session.commit()
flash('Die Rodelbahneinträge in den Regionslisten wurden erfolgreich aktualisiert.', 'info')
except wrpylib.wrmwcache.UpdateCacheError as e:
flash(str(e), 'error')
# Redirect to result page
return redirect(url_for('rodelbahn_list'))
+
+ def update_mapcache(self):
+ """Updates the wrmappointcache and wrmappathcache tables from the wiki."""
+ c = db.session.connection()
+ try:
+ wrpylib.wrmwcache.update_wrmapcache(c)
+ db.session.commit()
+ flash('Die Landkarteninformationen aus dem Wiki wurden erfolgreich aktualisiesrt.', 'info')
+ except wrpylib.wrmwcache.UpdateCacheError as e:
+ flash(str(e), 'error')
+ # Redirect to result page
+ return redirect(url_for('rodelbahn_list'))