From 1aab089205b2bdd007a210c8acc5a74dac9c167c Mon Sep 17 00:00:00 2001 From: Mirko Galimberti Date: Thu, 19 Jul 2018 17:13:38 +0200 Subject: [PATCH 1/3] Fixes login_bare + register_bare w/ custom login_userfield --- gluon/tools.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/gluon/tools.py b/gluon/tools.py index bf4bd902..edccc825 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -775,8 +775,8 @@ class Mail(object): if attachments: result = mail.send_mail( sender=sender, to=origTo, - subject=to_unicode(subject, encoding), - body=to_unicode(text or '', encoding), + subject=to_unicode(subject, encoding), + body=to_unicode(text or '', encoding), html=html, attachments=attachments, **xcc) elif html and (not raw): @@ -794,7 +794,7 @@ class Mail(object): try: raw = {'Data': payload.as_string()} response = client.send_raw_email(RawMessage=raw, - Source=sender, + Source=sender, Destinations=to) return True except ClientError as e: @@ -2161,7 +2161,10 @@ class Auth(AuthAPI): user = None checks = [] # make a guess about who this user is - for fieldname in ['registration_id', 'username', 'email']: + guess_fields = ['registration_id', 'username', 'email'] + if self.settings.login_userfield: + guess_fields.append(self.settings.login_userfield) + for fieldname in guess_fields: if fieldname in table_user.fields() and \ keys.get(fieldname, None): checks.append(fieldname) @@ -2255,7 +2258,8 @@ class Auth(AuthAPI): def _get_login_settings(self): table_user = self.table_user() userfield = self.settings.login_userfield or 'username' \ - if 'username' in table_user.fields else 'email' + if self.settings.login_userfield or 'username' \ + in table_user.fields else 'email' passfield = self.settings.password_field return Storage({'table_user': table_user, 'userfield': userfield, @@ -3630,7 +3634,7 @@ class Auth(AuthAPI): onaccept = self.settings.profile_onaccept if log is DEFAULT: log = self.messages['profile_log'] - + form = SQLFORM( table_user, self.user.id, From a22aac1e6532d54b03c355ba21abc2caef21f20c Mon Sep 17 00:00:00 2001 From: Mirko Galimberti Date: Fri, 27 Jul 2018 11:18:24 +0200 Subject: [PATCH 2/3] Fixes ipython console listindex error --- gluon/widget.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gluon/widget.py b/gluon/widget.py index ce731e5d..fbd522ae 100644 --- a/gluon/widget.py +++ b/gluon/widget.py @@ -943,9 +943,7 @@ def console(): k = len(sys.argv) sys.argv, other_args = sys.argv[:k], sys.argv[k + 1:] (options, args) = parser.parse_args() - options.args = other_args - if options.run: - options.args.insert(0, options.run) + options.args = [options.run] + other_args copy_options = copy.deepcopy(options) copy_options.password = '******' From a053df7b7515b32a812a5fbef41c1a1993b33a86 Mon Sep 17 00:00:00 2001 From: Mirko Galimberti Date: Fri, 27 Jul 2018 12:03:39 +0200 Subject: [PATCH 3/3] Adds type error for handling NoneType exceptions --- gluon/sqlhtml.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index b005b35e..e7b08adb 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -103,17 +103,18 @@ class CacheRepresenter(object): cache[field][value] = nvalue return nvalue + def safe_int(x, i=0): try: return int(x) - except ValueError: + except (ValueError, TypeError): return i def safe_float(x): try: return float(x) - except ValueError: + except (ValueError, TypeError): return 0 @@ -2055,7 +2056,7 @@ class SQLFORM(FORM): reduce(lambda a,b: a|b, [ field.contains(k) for field in sfields] ) for k in key.split()]) - + # from https://groups.google.com/forum/#!topic/web2py/hKe6lI25Bv4 # needs testing... #words = key.split(' ') if key else []