From 289530866764be8207f716f59d626e329b302e97 Mon Sep 17 00:00:00 2001 From: Matthew Scragg Date: Mon, 29 Sep 2014 15:22:20 -0500 Subject: [PATCH] implements #4, use env to configure app --- realms/__init__.py | 8 ++---- realms/config/__init__.py | 7 +++++ realms/modules/auth/forms.py | 4 +-- realms/modules/auth/views.py | 14 ++++----- realms/modules/wiki/views.py | 56 +++++++++++++++++++----------------- 5 files changed, 48 insertions(+), 41 deletions(-) diff --git a/realms/__init__.py b/realms/__init__.py index 1a1213e..c3e6726 100644 --- a/realms/__init__.py +++ b/realms/__init__.py @@ -23,7 +23,6 @@ from flask.ext.assets import Environment, Bundle from werkzeug.routing import BaseConverter from werkzeug.exceptions import HTTPException -from realms import config from realms.lib.util import to_canonical, remove_ext, mkdir_safe, gravatar_url, to_dict @@ -100,8 +99,7 @@ class Assets(Environment): class RegexConverter(BaseConverter): - """ - Enables Regex matching on endpoints + """ Enables Regex matching on endpoints """ def __init__(self, url_map, *items): super(RegexConverter, self).__init__(url_map) @@ -167,10 +165,10 @@ def _jinja2_filter_datetime(ts): def page_not_found(e): return render_template('errors/404.html'), 404 -if config.RELATIVE_PATH: +if app.config['RELATIVE_PATH']: @app.route("/") def root(): - return redirect(url_for(config.ROOT_ENDPOINT)) + return redirect(url_for(app.config['ROOT_ENDPOINT'])) @click.group() diff --git a/realms/config/__init__.py b/realms/config/__init__.py index 1c7fdb3..f2cd42c 100644 --- a/realms/config/__init__.py +++ b/realms/config/__init__.py @@ -82,6 +82,13 @@ LOCKED = WIKI_LOCKED_PAGES ROOT_ENDPOINT = 'wiki.page' +__env = {} +for k, v in os.environ.items(): + if k.startswith('REALMS_'): + __env[k[7:]] = v + +globals().update(__env) + try: with open(os.path.join(APP_PATH, 'config.json')) as f: __settings = json.load(f) diff --git a/realms/modules/auth/forms.py b/realms/modules/auth/forms.py index b7074ee..da2db3e 100644 --- a/realms/modules/auth/forms.py +++ b/realms/modules/auth/forms.py @@ -1,6 +1,6 @@ from flask_wtf import Form, RecaptchaField from wtforms import StringField, PasswordField, validators -from realms import config +from realms import app class RegistrationForm(Form): @@ -12,7 +12,7 @@ class RegistrationForm(Form): ]) confirm = PasswordField('Repeat Password') -if config.RECAPTCHA_ENABLE: +if app.config['RECAPTCHA_ENABLE']: setattr(RegistrationForm, 'recaptcha', RecaptchaField("You Human?")) diff --git a/realms/modules/auth/views.py b/realms/modules/auth/views.py index 5eb3639..e4d2297 100644 --- a/realms/modules/auth/views.py +++ b/realms/modules/auth/views.py @@ -1,16 +1,16 @@ from flask import g, render_template, request, redirect, Blueprint, flash, url_for from realms.modules.auth.models import User from realms.modules.auth.forms import LoginForm, RegistrationForm -from realms import config +from realms import app -blueprint = Blueprint('auth', __name__, url_prefix=config.RELATIVE_PATH) +blueprint = Blueprint('auth', __name__, url_prefix=app.config['RELATIVE_PATH']) @blueprint.route("/logout") def logout_page(): User.logout() flash("You are now logged out") - return redirect(url_for(config.ROOT_ENDPOINT)) + return redirect(url_for(app.config['ROOT_ENDPOINT'])) @blueprint.route("/login", methods=['GET', 'POST']) @@ -23,7 +23,7 @@ def login(): return redirect(url_for('auth.login')) if User.auth(request.form['email'], request.form['password']): - return redirect(request.args.get("next") or url_for(config.ROOT_ENDPOINT)) + return redirect(request.args.get("next") or url_for(app.config['ROOT_ENDPOINT'])) else: flash('Email or Password Incorrect', 'warning') return redirect(url_for('auth.login')) @@ -34,9 +34,9 @@ def login(): @blueprint.route("/register", methods=['GET', 'POST']) def register(): - if not config.REGISTRATION_ENABLED: + if not app.config['REGISTRATION_ENABLED']: flash("Registration is disabled") - return redirect(url_for(config.ROOT_ENDPOINT)) + return redirect(url_for(app.config['ROOT_ENDPOINT'])) form = RegistrationForm() @@ -57,7 +57,7 @@ def register(): User.create(request.form['username'], request.form['email'], request.form['password']) User.auth(request.form['email'], request.form['password']) - return redirect(request.args.get("next") or url_for(config.ROOT_ENDPOINT)) + return redirect(request.args.get("next") or url_for(app.config['ROOT_ENDPOINT'])) return render_template("auth/register.html", form=form) diff --git a/realms/modules/wiki/views.py b/realms/modules/wiki/views.py index b266d32..30e740d 100644 --- a/realms/modules/wiki/views.py +++ b/realms/modules/wiki/views.py @@ -2,18 +2,21 @@ from flask import g, render_template, request, redirect, Blueprint, flash, url_f from flask.ext.login import login_required from realms.lib.util import to_canonical, remove_ext from realms.modules.wiki.models import Wiki -from realms import config, current_user +from realms import current_user, app -blueprint = Blueprint('wiki', __name__, url_prefix=config.RELATIVE_PATH) +blueprint = Blueprint('wiki', __name__, url_prefix=app.config['RELATIVE_PATH']) -wiki = Wiki(config.WIKI_PATH) + +@app.before_request +def init_wiki(): + g.current_wiki = Wiki(app.config['WIKI_PATH']) @blueprint.route("/_commit//") def commit(name, sha): cname = to_canonical(name) - data = wiki.get_page(cname, sha=sha) + data = g.current_wiki.get_page(cname, sha=sha) if data: return render_template('wiki/page.html', name=name, page=data, commit=sha) else: @@ -22,7 +25,7 @@ def commit(name, sha): @blueprint.route("/_compare//") def compare(name, fsha, dots, lsha): - diff = wiki.compare(name, fsha, lsha) + diff = g.current_wiki.compare(name, fsha, lsha) return render_template('wiki/compare.html', name=name, diff=diff, old=fsha, new=lsha) @@ -33,43 +36,42 @@ def revert(): commit = request.form.get('commit') cname = to_canonical(name) - if cname in config.WIKI_LOCKED_PAGES: + if cname.lower() in app.config.WIKI_LOCKED_PAGES: flash("Page is locked") - return redirect(url_for(config.ROOT_ENDPOINT)) + return redirect(url_for(app.config['ROOT_ENDPOINT'])) - wiki.revert_page(name, commit, message="Reverting %s" % cname, - username=current_user.username) + g.current_wiki.revert_page(name, commit, message="Reverting %s" % cname, + username=current_user.username) flash('Page reverted', 'success') return redirect(url_for('wiki.page', name=cname)) @blueprint.route("/_history/") def history(name): - return render_template('wiki/history.html', name=name, history=wiki.get_history(name)) + return render_template('wiki/history.html', name=name, history=g.current_wiki.get_history(name)) @blueprint.route("/_edit/", methods=['GET', 'POST']) @login_required def edit(name): - data = wiki.get_page(name) + data = g.current_wiki.get_page(name) cname = to_canonical(name) if request.method == 'POST': edit_cname = to_canonical(request.form['name']) - if edit_cname in config.WIKI_LOCKED_PAGES: - return redirect(url_for(config.ROOT_ENDPOINT)) + if edit_cname.lower() in app.config['WIKI_LOCKED_PAGES']: + return redirect(url_for(app.config['ROOT_ENDPOINT'])) if edit_cname.lower() != cname.lower(): - wiki.rename_page(cname, edit_cname) + g.current_wiki.rename_page(cname, edit_cname) - wiki.write_page(edit_cname, - request.form['content'], - message=request.form['message'], - username=current_user.username) + g.current_wiki.write_page(edit_cname, + request.form['content'], + message=request.form['message'], + username=current_user.username) else: if data: name = remove_ext(data['name']) - content = data.get('data') g.assets['js'].append('editor.js') return render_template('wiki/edit.html', name=name, content=content, partials=data.get('partials')) @@ -90,20 +92,20 @@ def create(name): if request.method == 'POST': cname = to_canonical(request.form['name']) - if cname in config.WIKI_LOCKED_PAGES: + if cname in app.config['WIKI_LOCKED_PAGES']: return redirect(url_for("wiki.create")) if not cname: return redirect(url_for("wiki.create")) - wiki.write_page(request.form['name'], - request.form['content'], - message=request.form['message'], - create=True, - username=current_user.username) + g.current_wiki.write_page(request.form['name'], + request.form['content'], + message=request.form['message'], + create=True, + username=current_user.username) else: cname = to_canonical(name) if name else "" - if cname and wiki.get_page(cname): + if cname and g.current_wiki.get_page(cname): # Page exists, edit instead return redirect(url_for('wiki.edit', name=cname)) @@ -118,7 +120,7 @@ def page(name): if cname != name: return redirect(url_for('wiki.page', name=cname)) - data = wiki.get_page(cname) + data = g.current_wiki.get_page(cname) if data: return render_template('wiki/page.html', name=cname, page=data, partials=data.get('partials'))