1import unittest 2 3from pony.orm.core import * 4from pony.orm.tests.testutils import * 5from pony.orm.tests import setup_database, teardown_database 6 7db = Database() 8 9class Group(db.Entity): 10 students = Set('Student') 11 12class Student(db.Entity): 13 first_name = Required(str) 14 last_name = Required(str) 15 login = Optional(str, nullable=True) 16 graduated = Optional(bool, default=False) 17 group = Required(Group) 18 passport = Optional('Passport', column='passport') 19 20class Passport(db.Entity): 21 student = Optional(Student) 22 23 24class TestExists(unittest.TestCase): 25 @classmethod 26 def setUpClass(cls): 27 setup_database(db) 28 with db_session: 29 g1 = Group(id=1) 30 g2 = Group(id=2) 31 32 p = Passport(id=1) 33 34 Student(id=1, first_name='Mashu', last_name='Kyrielight', login='Shielder', group=g1) 35 Student(id=2, first_name='Okita', last_name='Souji', login='Sakura', group=g1) 36 Student(id=3, first_name='Francis', last_name='Drake', group=g2, graduated=True) 37 Student(id=4, first_name='Oda', last_name='Nobunaga', group=g2, graduated=True) 38 Student(id=5, first_name='William', last_name='Shakespeare', group=g2, graduated=True, passport=p) 39 40 @classmethod 41 def tearDownClass(cls): 42 teardown_database(db) 43 44 def setUp(self): 45 rollback() 46 db_session.__enter__() 47 48 def tearDown(self): 49 rollback() 50 db_session.__exit__() 51 52 def test_1(self): 53 q = select(g for g in Group if exists(s.login for s in g.students))[:] 54 self.assertEqual(q[0], Group[1]) 55 56 def test_2(self): 57 q = select(g for g in Group if exists(s.graduated for s in g.students))[:] 58 self.assertEqual(q[0], Group[2]) 59 60 def test_3(self): 61 q = select(s for s in Student if 62 exists(len(s2.first_name) == len(s.first_name) and s != s2 for s2 in Student))[:] 63 self.assertEqual(set(q), {Student[1], Student[2], Student[3], Student[5]}) 64 65 def test_4(self): 66 q = select(g for g in Group if not exists(not s.graduated for s in g.students))[:] 67 self.assertEqual(q[0], Group[2]) 68 69 def test_5(self): 70 q = select(g for g in Group if exists(s for s in g.students))[:] 71 self.assertEqual(set(q), {Group[1], Group[2]}) 72 73 def test_6(self): 74 q = select(g for g in Group if exists(s.login for s in g.students if s.first_name != 'Okita') and g.id != 10)[:] 75 self.assertEqual(q[0], Group[1]) 76 77 def test_7(self): 78 q = select(g for g in Group if exists(s.passport for s in g.students))[:] 79 self.assertEqual(q[0], Group[2])