app/soc/logic/models/base.py
changeset 1179 427d2ec42823
parent 1165 4db62684ce13
child 1183 03db1f6d222a
equal deleted inserted replaced
1178:f0de31a14797 1179:427d2ec42823
   287     if not filter:
   287     if not filter:
   288       filter = {}
   288       filter = {}
   289     if unique:
   289     if unique:
   290       limit = 1
   290       limit = 1
   291 
   291 
   292     q = db.Query(self._model)
   292     format_eq = '%(key)s = :%(num)d'
   293 
   293     format_in = '%(key)s IN (%(values)s)'
   294     for key, values in filter.iteritems():
   294 
   295       for value in (values if isinstance(values, list) else [values]):
   295     n = 1
   296         q.filter(key, value)
   296     conditionals = []
   297 
   297     args = []
       
   298 
       
   299     for key, value in filter.iteritems():
       
   300       if isinstance(value, list):
       
   301         count = len(value)
       
   302         args.extend(value)
       
   303         values = ', '.join([':%d' % i for i in range(n, n + count)])
       
   304         sub = format_in % {'key': key, 'values': values}
       
   305         n = n + count
       
   306       else:
       
   307         sub = format_eq % {'key': key, 'num': n}
       
   308         args.append(value)
       
   309         n = n + 1
       
   310       conditionals.append(sub)
       
   311 
       
   312     joined_pairs = ' AND '.join(conditionals)
       
   313     condition = 'WHERE ' + joined_pairs
       
   314 
       
   315     q = self._model.gql(condition, *args)
   298     result = q.fetch(limit, offset)
   316     result = q.fetch(limit, offset)
   299 
   317 
   300     if unique:
   318     if unique:
   301       return result[0] if result else None
   319       return result[0] if result else None
   302 
   320