519 req.create_entity('Personne', nom=u'Vincent', fiche=c) |
519 req.create_entity('Personne', nom=u'Vincent', fiche=c) |
520 req.create_entity('Personne', nom=u'Florent', fiche=c) |
520 req.create_entity('Personne', nom=u'Florent', fiche=c) |
521 self.commit() |
521 self.commit() |
522 self.assertEqual(len(c.reverse_fiche), 1) |
522 self.assertEqual(len(c.reverse_fiche), 1) |
523 |
523 |
524 def test_set_attributes_in_before_update(self): |
524 def test_cw_set_in_before_update(self): |
525 # local hook |
525 # local hook |
526 class DummyBeforeHook(Hook): |
526 class DummyBeforeHook(Hook): |
527 __regid__ = 'dummy-before-hook' |
527 __regid__ = 'dummy-before-hook' |
528 __select__ = Hook.__select__ & is_instance('EmailAddress') |
528 __select__ = Hook.__select__ & is_instance('EmailAddress') |
529 events = ('before_update_entity',) |
529 events = ('before_update_entity',) |
531 # safety belt: avoid potential infinite recursion if the test |
531 # safety belt: avoid potential infinite recursion if the test |
532 # fails (i.e. RuntimeError not raised) |
532 # fails (i.e. RuntimeError not raised) |
533 pendings = self._cw.transaction_data.setdefault('pending', set()) |
533 pendings = self._cw.transaction_data.setdefault('pending', set()) |
534 if self.entity.eid not in pendings: |
534 if self.entity.eid not in pendings: |
535 pendings.add(self.entity.eid) |
535 pendings.add(self.entity.eid) |
536 self.entity.set_attributes(alias=u'foo') |
536 self.entity.cw_set(alias=u'foo') |
537 with self.temporary_appobjects(DummyBeforeHook): |
537 with self.temporary_appobjects(DummyBeforeHook): |
538 req = self.request() |
538 req = self.request() |
539 addr = req.create_entity('EmailAddress', address=u'a@b.fr') |
539 addr = req.create_entity('EmailAddress', address=u'a@b.fr') |
540 addr.set_attributes(address=u'a@b.com') |
540 addr.cw_set(address=u'a@b.com') |
541 rset = self.execute('Any A,AA WHERE X eid %(x)s, X address A, X alias AA', |
541 rset = self.execute('Any A,AA WHERE X eid %(x)s, X address A, X alias AA', |
542 {'x': addr.eid}) |
542 {'x': addr.eid}) |
543 self.assertEqual(rset.rows, [[u'a@b.com', u'foo']]) |
543 self.assertEqual(rset.rows, [[u'a@b.com', u'foo']]) |
544 |
544 |
545 def test_set_attributes_in_before_add(self): |
545 def test_cw_set_in_before_add(self): |
546 # local hook |
546 # local hook |
547 class DummyBeforeHook(Hook): |
547 class DummyBeforeHook(Hook): |
548 __regid__ = 'dummy-before-hook' |
548 __regid__ = 'dummy-before-hook' |
549 __select__ = Hook.__select__ & is_instance('EmailAddress') |
549 __select__ = Hook.__select__ & is_instance('EmailAddress') |
550 events = ('before_add_entity',) |
550 events = ('before_add_entity',) |
551 def __call__(self): |
551 def __call__(self): |
552 # set_attributes is forbidden within before_add_entity() |
552 # cw_set is forbidden within before_add_entity() |
553 self.entity.set_attributes(alias=u'foo') |
553 self.entity.cw_set(alias=u'foo') |
554 with self.temporary_appobjects(DummyBeforeHook): |
554 with self.temporary_appobjects(DummyBeforeHook): |
555 req = self.request() |
555 req = self.request() |
556 # XXX will fail with python -O |
556 # XXX will fail with python -O |
557 self.assertRaises(AssertionError, req.create_entity, |
557 self.assertRaises(AssertionError, req.create_entity, |
558 'EmailAddress', address=u'a@b.fr') |
558 'EmailAddress', address=u'a@b.fr') |
559 |
559 |
560 def test_multiple_edit_set_attributes(self): |
560 def test_multiple_edit_cw_set(self): |
561 """make sure cw_edited doesn't get cluttered |
561 """make sure cw_edited doesn't get cluttered |
562 by previous entities on multiple set |
562 by previous entities on multiple set |
563 """ |
563 """ |
564 # local hook |
564 # local hook |
565 class DummyBeforeHook(Hook): |
565 class DummyBeforeHook(Hook): |
661 req = self.request() |
661 req = self.request() |
662 toto = req.create_entity('EmailAddress', address=u'toto@logilab.fr') |
662 toto = req.create_entity('EmailAddress', address=u'toto@logilab.fr') |
663 self.commit() |
663 self.commit() |
664 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'}) |
664 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'}) |
665 self.assertEqual(rset.rows, []) |
665 self.assertEqual(rset.rows, []) |
666 req.user.set_relations(use_email=toto) |
666 req.user.cw_set(use_email=toto) |
667 self.commit() |
667 self.commit() |
668 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'}) |
668 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'}) |
669 self.assertEqual(rset.rows, [[req.user.eid]]) |
669 self.assertEqual(rset.rows, [[req.user.eid]]) |
670 req.execute('DELETE X use_email Y WHERE X login "admin", Y eid %(y)s', |
670 req.execute('DELETE X use_email Y WHERE X login "admin", Y eid %(y)s', |
671 {'y': toto.eid}) |
671 {'y': toto.eid}) |
672 self.commit() |
672 self.commit() |
673 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'}) |
673 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'toto'}) |
674 self.assertEqual(rset.rows, []) |
674 self.assertEqual(rset.rows, []) |
675 tutu = req.create_entity('EmailAddress', address=u'tutu@logilab.fr') |
675 tutu = req.create_entity('EmailAddress', address=u'tutu@logilab.fr') |
676 req.user.set_relations(use_email=tutu) |
676 req.user.cw_set(use_email=tutu) |
677 self.commit() |
677 self.commit() |
678 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'}) |
678 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'}) |
679 self.assertEqual(rset.rows, [[req.user.eid]]) |
679 self.assertEqual(rset.rows, [[req.user.eid]]) |
680 tutu.set_attributes(address=u'hip@logilab.fr') |
680 tutu.cw_set(address=u'hip@logilab.fr') |
681 self.commit() |
681 self.commit() |
682 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'}) |
682 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'tutu'}) |
683 self.assertEqual(rset.rows, []) |
683 self.assertEqual(rset.rows, []) |
684 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'hip'}) |
684 rset = req.execute('Any X WHERE X has_text %(t)s', {'t': 'hip'}) |
685 self.assertEqual(rset.rows, [[req.user.eid]]) |
685 self.assertEqual(rset.rows, [[req.user.eid]]) |
787 for i in xrange(2000): |
787 for i in xrange(2000): |
788 p = req.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M') |
788 p = req.create_entity('Personne', nom=u'Doe%03d'%i, prenom=u'John', sexe=u'M') |
789 personnes.append(p) |
789 personnes.append(p) |
790 abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M') |
790 abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M') |
791 for j in xrange(0, 2000, 100): |
791 for j in xrange(0, 2000, 100): |
792 abraham.set_relations(personne_composite=personnes[j:j+100]) |
792 abraham.cw_set(personne_composite=personnes[j:j+100]) |
793 t1 = time.time() |
793 t1 = time.time() |
794 self.info('creation: %.2gs', (t1 - t0)) |
794 self.info('creation: %.2gs', (t1 - t0)) |
795 req.cnx.commit() |
795 req.cnx.commit() |
796 t2 = time.time() |
796 t2 = time.time() |
797 self.info('commit creation: %.2gs', (t2 - t1)) |
797 self.info('commit creation: %.2gs', (t2 - t1)) |
813 abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M', |
813 abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M', |
814 personne_composite=personnes[:100]) |
814 personne_composite=personnes[:100]) |
815 t1 = time.time() |
815 t1 = time.time() |
816 self.info('creation: %.2gs', (t1 - t0)) |
816 self.info('creation: %.2gs', (t1 - t0)) |
817 for j in xrange(100, 2000, 100): |
817 for j in xrange(100, 2000, 100): |
818 abraham.set_relations(personne_composite=personnes[j:j+100]) |
818 abraham.cw_set(personne_composite=personnes[j:j+100]) |
819 t2 = time.time() |
819 t2 = time.time() |
820 self.info('more relations: %.2gs', (t2-t1)) |
820 self.info('more relations: %.2gs', (t2-t1)) |
821 req.cnx.commit() |
821 req.cnx.commit() |
822 t3 = time.time() |
822 t3 = time.time() |
823 self.info('commit creation: %.2gs', (t3 - t2)) |
823 self.info('commit creation: %.2gs', (t3 - t2)) |
833 abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M', |
833 abraham = req.create_entity('Personne', nom=u'Abraham', prenom=u'John', sexe=u'M', |
834 personne_inlined=personnes[:100]) |
834 personne_inlined=personnes[:100]) |
835 t1 = time.time() |
835 t1 = time.time() |
836 self.info('creation: %.2gs', (t1 - t0)) |
836 self.info('creation: %.2gs', (t1 - t0)) |
837 for j in xrange(100, 2000, 100): |
837 for j in xrange(100, 2000, 100): |
838 abraham.set_relations(personne_inlined=personnes[j:j+100]) |
838 abraham.cw_set(personne_inlined=personnes[j:j+100]) |
839 t2 = time.time() |
839 t2 = time.time() |
840 self.info('more relations: %.2gs', (t2-t1)) |
840 self.info('more relations: %.2gs', (t2-t1)) |
841 req.cnx.commit() |
841 req.cnx.commit() |
842 t3 = time.time() |
842 t3 = time.time() |
843 self.info('commit creation: %.2gs', (t3 - t2)) |
843 self.info('commit creation: %.2gs', (t3 - t2)) |
914 def test_optional_relation_reset_1(self): |
914 def test_optional_relation_reset_1(self): |
915 req = self.request() |
915 req = self.request() |
916 p1 = req.create_entity('Personne', nom=u'Vincent') |
916 p1 = req.create_entity('Personne', nom=u'Vincent') |
917 p2 = req.create_entity('Personne', nom=u'Florent') |
917 p2 = req.create_entity('Personne', nom=u'Florent') |
918 w = req.create_entity('Affaire', ref=u'wc') |
918 w = req.create_entity('Affaire', ref=u'wc') |
919 w.set_relations(todo_by=[p1,p2]) |
919 w.cw_set(todo_by=[p1,p2]) |
920 w.cw_clear_all_caches() |
920 w.cw_clear_all_caches() |
921 self.commit() |
921 self.commit() |
922 self.assertEqual(len(w.todo_by), 1) |
922 self.assertEqual(len(w.todo_by), 1) |
923 self.assertEqual(w.todo_by[0].eid, p2.eid) |
923 self.assertEqual(w.todo_by[0].eid, p2.eid) |
924 |
924 |
925 def test_optional_relation_reset_2(self): |
925 def test_optional_relation_reset_2(self): |
926 req = self.request() |
926 req = self.request() |
927 p1 = req.create_entity('Personne', nom=u'Vincent') |
927 p1 = req.create_entity('Personne', nom=u'Vincent') |
928 p2 = req.create_entity('Personne', nom=u'Florent') |
928 p2 = req.create_entity('Personne', nom=u'Florent') |
929 w = req.create_entity('Affaire', ref=u'wc') |
929 w = req.create_entity('Affaire', ref=u'wc') |
930 w.set_relations(todo_by=p1) |
930 w.cw_set(todo_by=p1) |
931 self.commit() |
931 self.commit() |
932 w.set_relations(todo_by=p2) |
932 w.cw_set(todo_by=p2) |
933 w.cw_clear_all_caches() |
933 w.cw_clear_all_caches() |
934 self.commit() |
934 self.commit() |
935 self.assertEqual(len(w.todo_by), 1) |
935 self.assertEqual(len(w.todo_by), 1) |
936 self.assertEqual(w.todo_by[0].eid, p2.eid) |
936 self.assertEqual(w.todo_by[0].eid, p2.eid) |
937 |
937 |