fixed issue 1005, thanks howesc
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.0.9 (2012-09-17 09:12:09) stable
|
Version 2.0.9 (2012-09-17 09:36:10) stable
|
||||||
|
|||||||
+8
-10
@@ -1692,9 +1692,9 @@ class BaseAdapter(ConnectionPool):
|
|||||||
elif not isinstance(obj, (list, tuple)):
|
elif not isinstance(obj, (list, tuple)):
|
||||||
obj = [obj]
|
obj = [obj]
|
||||||
if field_is_type('list:string'):
|
if field_is_type('list:string'):
|
||||||
obj = [str(item) for item in obj]
|
obj = map(str,obj)
|
||||||
else:
|
else:
|
||||||
obj = [int(item) for item in obj]
|
obj = map(int,obj)
|
||||||
if isinstance(obj, (list, tuple)):
|
if isinstance(obj, (list, tuple)):
|
||||||
obj = bar_encode(obj)
|
obj = bar_encode(obj)
|
||||||
if obj is None:
|
if obj is None:
|
||||||
@@ -2654,9 +2654,9 @@ class NewPostgreSQLAdapter(PostgreSQLAdapter):
|
|||||||
elif not isinstance(obj, (list, tuple)):
|
elif not isinstance(obj, (list, tuple)):
|
||||||
obj = [obj]
|
obj = [obj]
|
||||||
if field_is_type('list:string'):
|
if field_is_type('list:string'):
|
||||||
obj = [str(item) for item in obj]
|
obj = map(str,obj)
|
||||||
else:
|
else:
|
||||||
obj = [int(item) for item in obj]
|
obj = map(int,obj)
|
||||||
return 'ARRAY[%s]' % ','.join(repr(item) for item in obj)
|
return 'ARRAY[%s]' % ','.join(repr(item) for item in obj)
|
||||||
return BaseAdapter.represent(self, obj, fieldtype)
|
return BaseAdapter.represent(self, obj, fieldtype)
|
||||||
|
|
||||||
@@ -5701,7 +5701,7 @@ class IMAPAdapter(NoSQLAdapter):
|
|||||||
year = int(date_list[2])
|
year = int(date_list[2])
|
||||||
month = months.index(date_list[1])
|
month = months.index(date_list[1])
|
||||||
day = int(date_list[0])
|
day = int(date_list[0])
|
||||||
hms = [int(value) for value in date_list[3].split(":")]
|
hms = map(int, date_list[3].split(":"))
|
||||||
return datetime.datetime(year, month, day,
|
return datetime.datetime(year, month, day,
|
||||||
hms[0], hms[1], hms[2]) + add
|
hms[0], hms[1], hms[2]) + add
|
||||||
elif isinstance(date, (datetime.datetime, datetime.date)):
|
elif isinstance(date, (datetime.datetime, datetime.date)):
|
||||||
@@ -6384,11 +6384,9 @@ def sqlhtml_validators(field):
|
|||||||
refs = None
|
refs = None
|
||||||
db, id = r._db, r._id
|
db, id = r._db, r._id
|
||||||
if isinstance(db._adapter, GoogleDatastoreAdapter):
|
if isinstance(db._adapter, GoogleDatastoreAdapter):
|
||||||
for i in xrange(0, len(ids), 30):
|
def count(values): return db(id.belongs(values)).select(id)
|
||||||
if not refs:
|
rx = range(0, len(ids), 30)
|
||||||
refs = db(id.belongs(ids[i:i+30])).select(id)
|
refs = reduce(lambda a,b:a&b, [count(ids[i:i+30]) for i in rx])
|
||||||
else:
|
|
||||||
refs = refs&db(id.belongs(ids[i:i+30])).select(id)
|
|
||||||
else:
|
else:
|
||||||
refs = db(id.belongs(ids)).select(id)
|
refs = db(id.belongs(ids)).select(id)
|
||||||
return (refs and ', '.join(str(f(r,x.id)) for x in refs) or '')
|
return (refs and ', '.join(str(f(r,x.id)) for x in refs) or '')
|
||||||
|
|||||||
+16
-2
@@ -488,6 +488,8 @@ class IS_IN_DB(Validator):
|
|||||||
table = self.dbset.db[self.ktable]
|
table = self.dbset.db[self.ktable]
|
||||||
field = table[self.kfield]
|
field = table[self.kfield]
|
||||||
if self.multiple:
|
if self.multiple:
|
||||||
|
if self._and:
|
||||||
|
raise NotImplementedError
|
||||||
if isinstance(value,list):
|
if isinstance(value,list):
|
||||||
values=value
|
values=value
|
||||||
elif value:
|
elif value:
|
||||||
@@ -497,8 +499,20 @@ class IS_IN_DB(Validator):
|
|||||||
if isinstance(self.multiple,(tuple,list)) and \
|
if isinstance(self.multiple,(tuple,list)) and \
|
||||||
not self.multiple[0]<=len(values)<self.multiple[1]:
|
not self.multiple[0]<=len(values)<self.multiple[1]:
|
||||||
return (values, translate(self.error_message))
|
return (values, translate(self.error_message))
|
||||||
if self.dbset(field.belongs(values)).count()==len(values):
|
if self.theset:
|
||||||
return (values, None)
|
if not [v for v in values if not v in self.theset]:
|
||||||
|
return (values, None)
|
||||||
|
else:
|
||||||
|
from dal import GoogleDatastoreAdapter
|
||||||
|
def count(values, s=self.dbset, f=field):
|
||||||
|
return s(f.belongs(map(int,values))).count()
|
||||||
|
if isinstance(self.dbset.db._adapter, GoogleDatastoreAdapter):
|
||||||
|
range_ids = range(0,len(ids),30)
|
||||||
|
total = sum(count(values[i:i+30]) for i in range_ids)
|
||||||
|
if total == len(values):
|
||||||
|
return (values, None)
|
||||||
|
elif count(values) == len(values):
|
||||||
|
return (values, None)
|
||||||
elif self.theset:
|
elif self.theset:
|
||||||
if str(value) in self.theset:
|
if str(value) in self.theset:
|
||||||
if self._and:
|
if self._and:
|
||||||
|
|||||||
Reference in New Issue
Block a user