diff --git a/VERSION b/VERSION index d733dfd4..8477ccdf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.5.1-stable+timestamp.2013.06.23.08.50.58 +Version 2.5.1-stable+timestamp.2013.06.24.14.23.41 diff --git a/applications/examples/private/content/en/default/documentation/more.markmin b/applications/examples/private/content/en/default/documentation/more.markmin index fb0d29fc..58dd1ebf 100644 --- a/applications/examples/private/content/en/default/documentation/more.markmin +++ b/applications/examples/private/content/en/default/documentation/more.markmin @@ -9,7 +9,7 @@ #### Learning and Demos - [[Intro video http://www.youtube.com/watch?v=BXzqmHx6edY]] and [[code examples https://github.com/mjhea0/web2py]] - [[Killer Web Development Tutorial http://killer-web-development.com/]] -- [[Real Python for the Web http://www.kickstarter.com/projects/1369857650/real-python-for-web-development-featuring-web2py]] +- [[Real Python for the Web http://www.realpython.com]] (web development with web2py and more!) - [[Admin Demo http://www.web2py.com/demo_admin popup]] (web-based IDE) - [[Welcome App Demo http://www.web2py.com/welcome]] (scaffolding application) - [[Videos http://www.web2py.com/examples/default/videos/]] diff --git a/gluon/dal.py b/gluon/dal.py index b579d8cb..b837a50e 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -1255,13 +1255,22 @@ class BaseAdapter(ConnectionPool): return '(%s LIKE %s)' % (self.expand(first), self.expand('%'+second, 'string')) - def CONTAINS(self,first,second,case_sensitive=False): + def CONTAINS(self,first,second,case_sensitive=False): if first.type in ('string','text', 'json'): - second = Expression(None,self.CONCAT('%',Expression( - None,self.REPLACE(second,('%','%%'))),'%')) + if isinstance(second,Expression): + second = Expression(None,self.CONCAT('%',Expression( + None,self.REPLACE(second,('%','%%'))),'%')) + else: + second = '%'+str(second).replace('%','%%')+'%' elif first.type.startswith('list:'): - second = Expression(None,self.CONCAT('%|',Expression(None,self.REPLACE( - Expression(None,self.REPLACE(second,('%','%%'))),('|','||'))),'|%')) + if isinstance(second,Expression): + second = Expression(None,self.CONCAT( + '%|',Expression(None,self.REPLACE( + Expression(None,self.REPLACE( + second,('%','%%'))),('|','||'))),'|%')) + else: + second = '%|'+str(second).replace('%','%%')\ + .replace('|','||')+'|%' op = case_sensitive and self.LIKE or self.ILIKE return op(first,second) @@ -6866,7 +6875,7 @@ class Row(object): def __setitem__(self, key, value): setattr(self, str(key), value) - __delitem__ = delattr + __delitem__ = object.__delattr__ __copy__ = lambda self: Row(self) diff --git a/gluon/tools.py b/gluon/tools.py index 57486531..37069c32 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -1791,7 +1791,8 @@ class Auth(object): guess = keys.get('email', 'anonymous').split('@')[0] keys['first_name'] = keys.get('username', guess) user_id = table_user.insert(**table_user._filter_fields(keys)) - user = self.user = table_user[user_id] + user = self.user = table_user[user_id] + print user if self.settings.create_user_groups: group_id = self.add_group( self.settings.create_user_groups % user)