summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2016-01-22 17:26:00 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2016-01-22 17:26:26 +0100
commit5fde298d4b705bd256d5510493955ca98a31acdc (patch)
tree15d8cb83e531778ce865deca52a4ce123bf0c19f
parent41a881815fe7c8d8e236f8146b9434b51af75ecc (diff)
downloadweb-5fde298d4b705bd256d5510493955ca98a31acdc.tar.gz
web-5fde298d4b705bd256d5510493955ca98a31acdc.tar.bz2
web-5fde298d4b705bd256d5510493955ca98a31acdc.zip
Bump flask version
-rw-r--r--app.py11
-rw-r--r--flaskext_compat.py125
-rw-r--r--forms.py5
-rw-r--r--requirements.txt2
-rw-r--r--utils.py3
5 files changed, 8 insertions, 138 deletions
diff --git a/app.py b/app.py
index 15434bf..c29054c 100644
--- a/app.py
+++ b/app.py
@@ -1,8 +1,5 @@
# -*- coding: utf-8 -*-
-import flaskext_compat
-flaskext_compat.activate()
-
import account
import ldap
import os
@@ -20,6 +17,7 @@ if 'SPLINE_ACCOUNT_WEB_SETTINGS' in os.environ:
app.config.from_envvar('SPLINE_ACCOUNT_WEB_SETTINGS')
app.all_services = account.SERVICES #TODO: take that from our json file or so
+app.username_blacklist = list()
@app.before_request
def session_permanent():
@@ -46,12 +44,9 @@ def initialize_user():
# we had crap in the session, delete it
logout_user()
-@app.before_request
+@app.before_first_request
def read_blacklist():
- app.username_blacklist = None
-
- # use @before_first_request as soon as we require flask 0.8
- if app.username_blacklist is None and app.config.get('USERNAME_BLACKLIST_FILE'):
+ if app.config.get('USERNAME_BLACKLIST_FILE'):
with open(app.config['USERNAME_BLACKLIST_FILE']) as f:
app.username_blacklist = f.read().split('\n')
diff --git a/flaskext_compat.py b/flaskext_compat.py
deleted file mode 100644
index cb0b436..0000000
--- a/flaskext_compat.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flaskext_compat
- ~~~~~~~~~~~~~~~
-
- Implements the ``flask.ext`` virtual package for versions of Flask
- older than 0.7. This module is a noop if Flask 0.8 was detected.
-
- Usage::
-
- import flaskext_compat
- flaskext_compat.activate()
- from flask.ext import foo
-
- :copyright: (c) 2011 by Armin Ronacher.
- :license: BSD, see LICENSE for more details.
-"""
-import sys
-import os
-import imp
-
-
-class ExtensionImporter(object):
- """This importer redirects imports from this submodule to other locations.
- This makes it possible to transition from the old flaskext.name to the
- newer flask_name without people having a hard time.
- """
-
- def __init__(self, module_choices, wrapper_module):
- self.module_choices = module_choices
- self.wrapper_module = wrapper_module
- self.prefix = wrapper_module + '.'
- self.prefix_cutoff = wrapper_module.count('.') + 1
-
- def __eq__(self, other):
- return self.__class__.__module__ == other.__class__.__module__ and \
- self.__class__.__name__ == other.__class__.__name__ and \
- self.wrapper_module == other.wrapper_module and \
- self.module_choices == other.module_choices
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
- def install(self):
- sys.meta_path[:] = [x for x in sys.meta_path if self != x] + [self]
-
- def find_module(self, fullname, path=None):
- if fullname.startswith(self.prefix):
- return self
-
- def load_module(self, fullname):
- if fullname in sys.modules:
- return sys.modules[fullname]
- modname = fullname.split('.', self.prefix_cutoff)[self.prefix_cutoff]
- for path in self.module_choices:
- realname = path % modname
- try:
- __import__(realname)
- except ImportError:
- exc_type, exc_value, tb = sys.exc_info()
- # since we only establish the entry in sys.modules at the
- # end this seems to be redundant, but if recursive imports
- # happen we will call into the move import a second time.
- # On the second invocation we still don't have an entry for
- # fullname in sys.modules, but we will end up with the same
- # fake module name and that import will succeed since this
- # one already has a temporary entry in the modules dict.
- # Since this one "succeeded" temporarily that second
- # invocation now will have created a fullname entry in
- # sys.modules which we have to kill.
- sys.modules.pop(fullname, None)
-
- # If it's an important traceback we reraise it, otherwise
- # we swallow it and try the next choice. The skipped frame
- # is the one from __import__ above which we don't care about.
- if self.is_important_traceback(realname, tb):
- raise exc_type, exc_value, tb.tb_next
- continue
- module = sys.modules[fullname] = sys.modules[realname]
- if '.' not in modname:
- setattr(sys.modules[self.wrapper_module], modname, module)
- return module
- raise ImportError('No module named %s' % fullname)
-
- def is_important_traceback(self, important_module, tb):
- """Walks a traceback's frames and checks if any of the frames
- originated in the given important module. If that is the case then we
- were able to import the module itself but apparently something went
- wrong when the module was imported. (Eg: import of an import failed).
- """
- while tb is not None:
- if self.is_important_frame(important_module, tb):
- return True
- tb = tb.tb_next
- return False
-
- def is_important_frame(self, important_module, tb):
- """Checks a single frame if it's important."""
- g = tb.tb_frame.f_globals
- if '__name__' not in g:
- return False
-
- module_name = g['__name__']
-
- # Python 2.7 Behavior. Modules are cleaned up late so the
- # name shows up properly here. Success!
- if module_name == important_module:
- return True
-
- # Some python versions will clean up modules so early that the
- # module name at that point is no longer set. Try guessing from
- # the filename then.
- filename = os.path.abspath(tb.tb_frame.f_code.co_filename)
- test_string = os.path.sep + important_module.replace('.', os.path.sep)
- return test_string + '.py' in filename or \
- test_string + os.path.sep + '__init__.py' in filename
-
-
-def activate():
- import flask
- ext_module = imp.new_module('flask.ext')
- ext_module.__path__ = []
- flask.ext = sys.modules['flask.ext'] = ext_module
- importer = ExtensionImporter(['flask_%s', 'flaskext.%s'], 'flask.ext')
- importer.install()
diff --git a/forms.py b/forms.py
index d10d27e..deaffa8 100644
--- a/forms.py
+++ b/forms.py
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
from account import SERVICES, NoSuchUserError
from flask import g, current_app, session, Markup
-from flask.ext.wtf import Form, validators, TextField, PasswordField,\
- ValidationError, BooleanField
+from flask.ext.wtf import Form
+from wtforms import TextField, PasswordField, ValidationError, BooleanField,\
+ validators
from functools import partial
from utils import _username_re, _username_exclude_re, decrypt_password,\
NotRegexp, url_for
diff --git a/requirements.txt b/requirements.txt
index 164552f..7edd959 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-Flask>=0.6
+Flask>=0.8
Flask-WTF
Werkzeug>=0.6
Jinja2>=2.4
diff --git a/utils.py b/utils.py
index 28b5207..86991b3 100644
--- a/utils.py
+++ b/utils.py
@@ -12,13 +12,12 @@ from email.utils import parseaddr
from functools import wraps
from flask import current_app, flash, g, redirect, render_template, request, session
from flask import url_for as flask_url_for
-from flask.ext.wtf import ValidationError
from hashlib import sha1
from itertools import izip
from random import randint
from time import time
from werkzeug.exceptions import Forbidden
-from wtforms.validators import Regexp
+from wtforms.validators import Regexp, ValidationError