Example #1
0
 def _where_clause(self, table, map, values):
     cl = ClauseList(operator=operators.and_)
     for key, val in values.iteritems():
         if key not in map.keys():
             continue
         if val is None:
             continue
         col = map[key]
         if IRelation.providedBy(col):
             if isinstance(val, dict):
                 # read related object included in the query
                 try:
                     o = self.pickup(col.cls, **val)
                     assert len(o) == 1  # sanity check
                     val = o[0]._id
                 except IndexError:
                     raise DbError('A related object could not be ' + \
                                   'located in the database. %s: %s' % \
                                   (col.cls, str(val)))
             elif isinstance(val, col.cls):
                 # related object was included, use it's id
                 val = val._id
             elif val == DB_NULL:
                 val = None
             elif val:
                 raise DbError("Invalid value for key '%s': %s" % \
                               (str(col.name), str(val)))
             col = col.name
         cl.append(table.c[col] == val)
     return cl
Example #2
0
 def _where_clause(self, table, map, values):
     cl = ClauseList(operator=operators.and_)
     for key, val in values.iteritems():
         if key not in map.keys():
             continue
         if val is None:
             continue
         col = map[key]
         if IRelation.providedBy(col):
             if isinstance(val, dict):
                 # read related object included in the query
                 try:
                     o = self.pickup(col.cls, **val)
                     assert len(o) == 1  # sanity check
                     val = o[0]._id
                 except IndexError:
                     raise DbError('A related object could not be ' + \
                                   'located in the database. %s: %s' % \
                                   (col.cls, str(val)))
             elif isinstance(val, col.cls):
                 # related object was included, use it's id
                 val = val._id
             elif val == DB_NULL:
                 val = None
             elif val:
                 raise DbError("Invalid value for key '%s': %s" % \
                               (str(col.name), str(val)))
             col = col.name
         cl.append(table.c[col] == val)
     return cl
Example #3
0
 def get(self):
     w = ClauseList()
     for k in self.keyargs.keys():
         w.append(self.table.c[k] == self.keyargs[k])
     try:
         q = select([self.table.c[self.attr_name]], w)
         res = self.db_storage.db.execute(q).fetchall()
         assert len(res) <= 1  # sanity check
         return res[0][self.attr_name]
     except IndexError:
         raise DbError('An error occurred while getting related object ' + \
                       'data "%s": %s' % (self.attr_name, self.keyargs))
Example #4
0
 def get(self):
     w = ClauseList()
     for k in self.keyargs.keys():
         w.append(self.table.c[k] == self.keyargs[k])
     try:
         q = select([self.table.c[self.attr_name]], w)
         res = self.db_storage.db.execute(q).fetchall()
         assert len(res) <= 1  # sanity check
         return res[0][self.attr_name]
     except IndexError:
         raise DbError('An error occurred while getting related object ' + \
                       'data "%s": %s' % (self.attr_name, self.keyargs))