]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/controllers/rodelbahn.py
71e633f424b69c4800c52e8cfefb6eb6e29f6223
[philipp/winterrodeln/wradmin.git] / wradmin / controllers / rodelbahn.py
1 #!/usr/bin/python3.4
2 from flask import request, abort, redirect, url_for, flash, render_template
3 import paginate
4 import sqlalchemy as sa
5
6 import wrpylib.wrmwmarkup
7 import wrpylib.wrmwcache
8 import wrpylib.mwmarkup
9
10 import wradmin.model as model
11
12
13 class RodelbahnController:
14
15     def list(self):
16         """Lists all sled runs"""
17         q = model.meta.Session.query(model.WrSledrunCache)
18         q = q.order_by(model.WrSledrunCache.page_title)
19         paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
20                                   url_maker=lambda page: url_for('rodelbahn_list', page=page),
21                                   items_per_page=25)
22         return render_template('rodelbahn_list.html', paginator=paginator)
23
24     def view(self, id):
25         """Displays a sled run"""
26         q = model.meta.Session.query(model.WrSledrunCache)
27         sledding = q.get(id)
28         if sledding is None:
29             abort(404)
30         q = model.meta.Session.query(model.WrReport)
31         q = q.filter_by(page_id=id).order_by(sa.sql.expression.desc(model.WrReport.id))
32         paginator = paginate.Page(q.all(), page=int(request.args.get('page', 1)),
33                                   url_maker=lambda page: url_for('rodelbahn_view', id=id, page=page),
34                                   items_per_page=25)
35         return render_template('rodelbahn_view.html', sledding=sledding, paginator=paginator)
36
37     def update(self):
38         """Updates the wrsledruncache table from the wiki"""
39         c = model.meta.Session.connection()
40         try:
41             wrpylib.wrmwcache.update_wrsledruncache(c)
42             model.meta.Session.commit()
43             flash('Die Rodelbahnliste wurde erfolgreich aktualisiert.', 'info')
44         except wrpylib.wrmwcache.UpdateCacheError as e:
45             title = str(e.args[1])
46             title = wrpylib.mwmarkup.to_title(title)
47             msg = str(e.args[2])
48             msg = msg.replace('\n', '; ')
49             if len(e.args) == 3:
50                 flash("Fehler bei Rodelbahn '{0}': {1}".format(title, msg), 'error')
51             else:
52                 flash(str(e), 'error')
53         # Redirect to result page
54         return redirect(url_for('rodelbahn_list'))
55
56     def update_regioncache(self):
57         """Updates the wrregioncache table from the wiki"""
58         c = model.meta.Session.connection()
59         try:
60             wrpylib.wrmwcache.update_wrregioncache(c)
61             model.meta.Session.commit()
62             flash('Die Rodelbahneinträge in den Regionslisten wurden erfolgreich aktualisiert.', 'info')
63         except wrpylib.wrmwcache.UpdateCacheError as e:
64             flash(str(e), 'error')
65         # Redirect to result page
66         return redirect(url_for('rodelbahn_list'))