rb@217: # -*- coding: utf-8 -*- rb@217: rb@186: import os rb@186: import codecs rb@186: rb@186: from docutils.core import publish_parts peter@1: from flask import Flask peter@1: from flask import render_template peter@1: from flask import request rb@95: from flask.ext.babel import gettext as _ peter@1: from flask.ext.babel import Babel rb@95: from config import LANGUAGES peter@141: from sayings import get_saying rb@161: rb@161: rb@122: LANGUAGE_SELECTED = "de" rb@122: #ToDo after engelish is implemented set LANGUAGE_SELECTED = None rb@95: peter@1: app = Flask(__name__) peter@1: babel = Babel(app) peter@1: peter@145: app.config['BABEL_DEFAULT_LOCALE'] = 'de' peter@145: rb@186: rb@214: def get_content(filename, overrides=None): rb@162: content = u"" rb@162: if os.path.isfile(filename): rb@162: with codecs.open(filename, 'r', 'utf-8') as f: rb@162: rst_data = f.read() rb@162: f.close() rb@214: content = publish_parts(rst_data, writer_name='html', settings_overrides=overrides)['html_body'] rb@162: return content rb@162: peter@142: def get_topmenue(): rb@186: menue = [('/competition', _(u'Competition')), rb@154: ('/task', _(u'Task')), peter@223: ('/coursematerial', _(u'Coursematerial')), rb@154: ('/submission', _(u'Submission')), peter@223: ('/prizes', _(u'Prizes')), rb@186: ] peter@145: return menue peter@142: peter@142: app.jinja_env.globals.update(get_topmenue=get_topmenue) peter@142: peter@142: peter@1: @babel.localeselector peter@1: def get_locale(): peter@109: """ToDo: if translation is completed, switch to en """ rb@118: return LANGUAGE_SELECTED or request.accept_languages.best_match(LANGUAGES.keys()) or 'de' peter@1: rb@100: peter@1: @app.route("/") rb@100: @app.route("/index") peter@1: def index(): peter@141: saying, author = get_saying() rb@213: return render_template("/index.html", rb@186: saying=saying, rb@186: author=author, rb@169: competition_info=_(u'About Competition'), rb@173: dates=_(u'Dates'), rb@173: impressions=_(u'Impressions')) peter@1: rb@118: @app.route('/de') rb@118: def de(): rb@118: global LANGUAGE_SELECTED rb@118: LANGUAGE_SELECTED = "de" peter@146: saying, author = get_saying() peter@160: return render_template("/index.html", rb@186: saying=saying, rb@186: author=author, rb@169: competition_info=_(u'About Competition'), rb@173: dates=_(u'Dates'), rb@173: impressions=_(u'Impressions')) rb@118: rb@118: @app.route('/en') rb@118: def en(): peter@146: saying, author = get_saying() rb@118: global LANGUAGE_SELECTED rb@118: LANGUAGE_SELECTED = "en" peter@160: return render_template("/index.html", rb@186: saying=saying, rb@186: author=author, rb@169: competition_info=_(u'About Competition'), rb@173: dates=_(u'Dates'), rb@173: impressions=_(u'Impressions')) rb@118: rb@100: @app.route("/competition") peter@1: def competition(): rb@162: filename = os.path.join("templates", get_locale(), "rst", "competition.rst") rb@162: content = get_content(filename) rb@170: return render_template("/content.html", act="competition", content=content) peter@1: rb@100: @app.route("/task") peter@1: def task(): rb@165: filename = os.path.join("templates", get_locale(), "rst", "task.rst") rb@165: content = get_content(filename) rb@170: return render_template("/content.html", act="task", content=content) peter@1: rb@100: @app.route("/submission") peter@1: def submission(): rb@167: filename = os.path.join("templates", get_locale(), "rst", "submission.rst") rb@167: content = get_content(filename) rb@170: return render_template("/content.html", act="submission", content=content) peter@1: rb@100: @app.route("/coursematerial") peter@1: def coursematerial(): rb@166: filename = os.path.join("templates", get_locale(), "rst", "coursematerial.rst") rb@166: content = get_content(filename) rb@170: return render_template("/content.html", act="coursematerial", content=content) peter@1: rb@100: @app.route("/imprint") peter@88: def imprint(): rb@163: filename = os.path.join("templates", get_locale(), "rst", "imprint.rst") rb@163: content = get_content(filename) rb@170: return render_template("/content.html", act="imprint", content=content) peter@88: rb@100: @app.route("/privacy") peter@88: def privacy(): rb@164: filename = os.path.join("templates", get_locale(), "rst", "privacy.rst") rb@214: overrides = { rb@214: 'initial_header_level': 2, rb@214: } rb@214: content = get_content(filename, overrides=overrides) rb@170: return render_template("/content.html", act="privacy", content=content) rb@170: rb@170: @app.route("/dates") rb@170: def dates(): rb@170: filename = os.path.join("templates", get_locale(), "rst", "dates.rst") rb@170: content = get_content(filename) rb@170: return render_template("/content.html", rb@170: act="dates", content=content) peter@88: rb@222: @app.route("/prizes") rb@222: def prizes(): rb@222: filename = os.path.join("templates", get_locale(), "rst", "prizes.rst") rb@222: overrides = { rb@222: 'initial_header_level': 2, rb@222: } rb@222: content = get_content(filename, overrides=overrides) info@226: return render_template("/prizes.html",act="prizes", content=content) rb@222: rb@222: rb@222: peter@123: @app.route("/competition/2013") peter@109: def competition_2013(): rb@217: competition = _(u'Competition 2013') rb@217: introduction = _(u'The winners of the programming competition, ' rb@217: u'showed at the PyCon.DE 2013 in Cologne their results. ' rb@217: u'A short presentation inlcuding a movie about their work done.') rb@217: article = [_(u'Both students presented to the astonished audience of over 250 Python developers their work.'), rb@217: _(u'A long applause showed up.' rb@217: u' Valentin had 9 months ago learned Python and Blender discovered earlier. ' rb@217: u'His Skatsimulation even includes 3D sound.'), rb@217: _(u'The preparatory courses were made by volunteers, such as the ' rb@217: u'employees of the magazine "Time Online" performed. ' rb@217: u'The following blog entry is a little impression of the success of the courses'), rb@217: ] rb@217: game_of_life = _(u'Anne a 15 year old girl showed a 3D-Version of the »Game of life«') rb@217: skat_simulation = _(u'Valentin (13 years) demomstrates his »Skat-Simulation«') rb@217: awards = _(u'The award ceremony') rb@176: return render_template("/impressions_2013.html", rb@217: act="competition_2013", rb@217: competition=competition, rb@217: introduction=introduction, rb@217: article=article, rb@217: game_of_life=game_of_life, rb@217: skat_simulation=skat_simulation, rb@217: awards=awards) peter@109: peter@88: peter@1: @app.errorhandler(404) peter@1: def page_not_found(e): rb@213: msg = _(u"Url: %(url)s not found", url=request.url) rb@157: info = _(u"This information is not available!") rb@157: return render_template("404.html", msg=msg, info=info) peter@1: peter@1: if __name__ == "__main__": peter@1: app.run(host='localhost', port=5014, debug=True)