# HG changeset patch
# User Richard Vézina <ml.richard.vezina@gmail.com>
# Date 1376059556 14400
#      ven aoû 09 10:45:56 2013 -0400
# Node ID 24ce1df77f7127994232dbd40183219875a124c5
# Parent  26fca890704c9b77277a3914508f4916d907ded1
New IS_NOT_EMAIL() validator and prevent username to be an email

diff -r 26fca890704c -r 24ce1df77f71 gluon/tools.py
--- a/gluon/tools.py	ven aoû 09 04:49:10 2013 -0500
+++ b/gluon/tools.py	ven aoû 09 10:45:56 2013 -0400
@@ -55,6 +55,15 @@
 
 DEFAULT = lambda: None
 
+# I include this validator here because I have been unable to use the one from validators
+class IS_NOT_EMAIL():
+    def __init__(self, error_message='You can\'t use email as username'):
+        self.error_message = error_message
+
+    def __call__(self, value):
+        if not IS_EMAIL()(value)[1]:
+            return (value, self.error_message)
+        return (value, None)
 
 def getarg(position, default=None):
     args = current.request.args
@@ -2064,7 +2073,7 @@
             username = 'email'
         if 'username' in table_user.fields or \
                 not self.settings.login_email_validate:
-            tmpvalidator = IS_NOT_EMPTY(error_message=self.messages.is_empty)
+            tmpvalidator = [IS_NOT_EMPTY(error_message=self.messages.is_empty), IS_NOT_EMAIL()]
         else:
             tmpvalidator = IS_EMAIL(error_message=self.messages.invalid_email)
         old_requires = table_user[username].requires
@@ -2080,7 +2089,7 @@
         except:
             pass
 
-        ### use session for federated login        
+        ### use session for federated login
         snext = self.get_vars_next()
         if snext:
             session._auth_next = snext
diff -r 26fca890704c -r 24ce1df77f71 gluon/validators.py
--- a/gluon/validators.py	ven aoû 09 04:49:10 2013 -0500
+++ b/gluon/validators.py	ven aoû 09 10:45:56 2013 -0400
@@ -42,6 +42,7 @@
     'IS_DATETIME',
     'IS_DECIMAL_IN_RANGE',
     'IS_EMAIL',
+    # 'IS_NOT_EMAIL',
     'IS_EMPTY_OR',
     'IS_EXPR',
     'IS_FLOAT_IN_RANGE',
@@ -1178,6 +1179,15 @@
                 return (value, None)
         return (value, translate(self.error_message))
 
+# TODO: Not working yet...
+# class IS_NOT_EMAIL(Validator):
+    # def __init__(self, error_message='You can\'t use email as username'):
+        # self.error_message = error_message
+#
+    # def __call__(self, value):
+        # if not IS_EMAIL.__init__(self)(value)[1]:
+            # return (value, self.error_message)
+        # return (value, None)
 
 # URL scheme source:
 # <http://en.wikipedia.org/wiki/URI_scheme> obtained on 2008-Nov-10
@@ -3495,7 +3505,7 @@
     ('2001::8ffa:fe22:b3af', None)
     >>> IS_IPV6(subnets='invalidsubnet')('2001::8ffa:fe22:b3af')
     ('2001::8ffa:fe22:b3af', 'invalid subnet provided')
-    
+
     """
 
     def __init__(
