diff --git a/CHANGES b/CHANGES index 3346df9..07a6652 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,16 @@ Flask-Security Changelog Here you can see the full list of changes between each Flask-Security release. +Version 1.6.9 +------------- + +Released August 20th 2013 + +- Fix bug in SQLAlchemy datastore's `get_user` function +- Fix bug in PeeWee datastore's `remove_role_from_user` function +- Fixed import error caused by new Flask-WTF release + + Version 1.6.8 ------------- @@ -12,6 +22,7 @@ Released August 1st 2013 - Code cleanup regarding token_callback - Ignore validation errors in find_user function for MongoEngineUserDatastore + Version 1.6.7 ------------- diff --git a/flask_security/datastore.py b/flask_security/datastore.py index 029bf09..2adc7a7 100644 --- a/flask_security/datastore.py +++ b/flask_security/datastore.py @@ -180,9 +180,20 @@ class SQLAlchemyUserDatastore(SQLAlchemyDatastore, UserDatastore): UserDatastore.__init__(self, user_model, role_model) def get_user(self, id_or_email): - return (self.user_model.query.get(id_or_email) or - self.user_model.query.filter( - self.user_model.email.ilike(id_or_email)).first()) + returned = None + if self._is_numeric(id_or_email): + returned = self.user_model.query.get(id_or_email) + if not returned: + returned = self.user_model.query.filter( + self.user_model.email.ilike(id_or_email)).first() + return returned + + def _is_numeric(self, value): + try: + int(value) + except ValueError: + return False + return True def find_user(self, **kwargs): return self.user_model.query.filter_by(**kwargs).first() @@ -291,8 +302,9 @@ class PeeweeUserDatastore(PeeweeDatastore, UserDatastore): result = self.UserRole.select() \ .where(self.UserRole.user == user, self.UserRole.role == role) if result.count(): - self.UserRole.delete().where( + query = self.UserRole.delete().where( self.UserRole.user == user, self.UserRole.role == role) + query.execute() return True else: return False diff --git a/flask_security/forms.py b/flask_security/forms.py index 0c1bd70..e43ffd0 100644 --- a/flask_security/forms.py +++ b/flask_security/forms.py @@ -15,7 +15,8 @@ import urlparse import flask_wtf as wtf from flask import request, current_app -from flask_wtf import Form as BaseForm, TextField, PasswordField, \ +from flask_wtf import Form as BaseForm +from wtforms import TextField, PasswordField, validators, \ SubmitField, HiddenField, BooleanField, ValidationError, Field from flask_login import current_user from werkzeug.local import LocalProxy @@ -50,19 +51,19 @@ class ValidatorMixin(object): return super(ValidatorMixin, self).__call__(form, field) -class EqualTo(ValidatorMixin, wtf.EqualTo): +class EqualTo(ValidatorMixin, validators.EqualTo): pass -class Required(ValidatorMixin, wtf.Required): +class Required(ValidatorMixin, validators.Required): pass -class Email(ValidatorMixin, wtf.Email): +class Email(ValidatorMixin, validators.Email): pass -class Length(ValidatorMixin, wtf.Length): +class Length(ValidatorMixin, validators.Length): pass