def lock_task(self, *tables): num_locked = 0 self.assertFalse(hasattr(deadlock_detector.context, 'locks')) for t in tables: deadlock_detector.handle_lock(t) num_locked += 1 self.assertEquals(len(deadlock_detector.context.locks), num_locked)
def test_not_allowed(self, curs=None): #table2 -> table3 NOT ALLOWED deadlock_detector.ALLOWED_TRANSITIONS = [ (self.table1, self.table2), (self.table1, self.table3), ] self.fill_table(self.table2, 1, curs) self.fill_table(self.table3, 1, curs) deadlock_detector.handle_lock(self.table2) self.assertRaises(deadlock_detector.TransitionNotAllowedError, deadlock_detector.handle_lock, self.table3, Eq('name', '1'))
def get_list(curs, cls, cond, order_by='id', limit=None, offset=0, for_update=False): ''' Selects list of objects @return: list of objects selected. ''' if for_update: deadlock_detector.handle_lock(cls.table) curs.execute(*Select(cls.table, cond=cond, for_update=for_update, order_by=order_by, limit=limit, offset=offset).glue()) dicts_list = fetchall_dicts(curs) if for_update and len(dicts_list) > 1: deadlock_detector.handle_lock(cls.table) return [cls(**d) for d in dicts_list]
def test_allowed_same_table(self, curs=None): deadlock_detector.ALLOWED_TRANSITIONS = [] self.fill_table(self.table1, 5, curs) deadlock_detector.handle_lock(self.table1) deadlock_detector.handle_lock(self.table1) deadlock_detector.handle_lock(self.table1)
def test_allowed(self, curs=None): deadlock_detector.ALLOWED_TRANSITIONS = [ (self.table1, self.table2), (self.table2, self.table3), ] self.fill_table(self.table1, 1, curs) self.fill_table(self.table2, 1, curs) self.fill_table(self.table3, 1, curs) deadlock_detector.handle_lock(self.table1) deadlock_detector.handle_lock(self.table2) deadlock_detector.handle_lock(self.table3)
def get(curs, cls, cond, for_update=False): if for_update: deadlock_detector.handle_lock(cls.table) curs.execute(*Select(cls.table, cond=cond, for_update=for_update).glue()) return cls(**fetchone_dict(curs))