Esempio n. 1
0
    def test_change_sub_name_bulk(self):
        with CaptureQueriesContext(connection) as queries:
            old = preupdate_dependent(SubChildReverseNotO.objects.all())
            SubChildReverseNotO.objects.all().update(name='S')
            update_dependent(SubChildReverseNotO.objects.all(), old=old)
        unoptimized = len(queries.captured_queries)

        with CaptureQueriesContext(connection) as queries:
            old = preupdate_dependent(SubChildReverseO.objects.all())
            SubChildReverseO.objects.all().update(name='S')
            update_dependent(SubChildReverseO.objects.all(), old=old)
        optimized = len(queries.captured_queries)

        # should turn all sub names into single S
        self.p1_not_o.refresh_from_db()
        self.p1_o.refresh_from_db()
        self.assertEqual(
            self.p1_not_o.children_comp,
            'c1_0#S,S,S,S,S,S,S,S,S,S$c1_1$c1_2$c1_3$c1_4$c1_5$c1_6$c1_7$c1_8$c1_9'
        )
        self.assertEqual(
            self.p1_o.children_comp,
            'c1_0#S,S,S,S,S,S,S,S,S,S$c1_1$c1_2$c1_3$c1_4$c1_5$c1_6$c1_7$c1_8$c1_9'
        )

        # should save 10 individual subqueries, but adds one --> 9
        self.assertEqual(unoptimized - optimized, 9)
    def test_move_bulk_subchildren(self):
        p1 = Parent.objects.create()
        p2 = Parent.objects.create()
        c1 = Child.objects.create(parent=p1)
        c2 = Child.objects.create(parent=p2)
        s11 = Subchild.objects.create(subparent=c1)
        s12 = Subchild.objects.create(subparent=c1)
        s21 = Subchild.objects.create(subparent=c2)
        s22 = Subchild.objects.create(subparent=c2)

        p1.refresh_from_db()
        p2.refresh_from_db()
        self.assertEqual(p1.subchildren_count, 2)
        self.assertEqual(p2.subchildren_count, 2)

        old_relations = preupdate_dependent(Subchild.objects.all())
        Subchild.objects.all().update(subparent=c2)
        update_dependent(Subchild.objects.all(), old=old_relations)

        p1.refresh_from_db()
        p2.refresh_from_db()
        self.assertEqual(p1.subchildren_count, 0)
        self.assertEqual(p2.subchildren_count, 4)
        self.assertEqual(p1.subchildren_count_proxy, 0)
        self.assertEqual(p2.subchildren_count_proxy, 4)
    def test_update_bulk_s1(self):
        old_relations = preupdate_dependent(DepSub1.objects.filter(b=self.bb2))
        DepSub1.objects.filter(b=self.bb2).update(b=self.bb1)
        update_dependent(DepSub1.objects.filter(b=self.bb1), old=old_relations)

        self.ba1.refresh_from_db()
        self.ba2.refresh_from_db()
        self.bb1.refresh_from_db()
        self.bb2.refresh_from_db()
        self.assertEqual(self.ba1.final_proxy, 'f1f2f3f4f5')
        self.assertEqual(self.ba2.final_proxy, 'f6f7f8f9f0')
        self.assertEqual(self.bb1.final_proxy, 'f1f2f3f4f5f6f7f8f9f0')
        self.assertEqual(self.bb2.final_proxy, '')
 def test_update(self):
     ComputeLocal.objects.all().update(name='other')
     update_dependent(ComputeLocal.objects.all(), update_fields=['name'])
     self.cl.refresh_from_db()
     self.bu.refresh_from_db()
     self.assertEqual(self.cl.c1, 'OTHER')
     self.assertEqual(self.cl.c2, 'c2OTHER')
     self.assertEqual(self.cl.c3, 'c3OTHER')
     self.assertEqual(self.cl.c4, 'c4c3OTHER')
     self.assertEqual(self.cl.c5, 'c5c2OTHERc4c3OTHERc6123')
     self.assertEqual(self.cl.c6, 'c6123')
     self.assertEqual(self.cl.c7, 'c7c8')
     self.assertEqual(self.cl.c8, 'c8')
     self.assertEqual(self.bu.same_as_fk_c5, 'c5c2OTHERc4c3OTHERc6123')
    def test_update_bulk_final_name(self):
        # here old is not needed, since the QS is stable itself (only endpoint data changed),
        # thus all data changes correctly trigger updates
        DepSubFinal.objects.filter(sub2=self.s21).update(name='X')
        update_dependent(DepSubFinal.objects.filter(sub2=self.s21))

        self.ba1.refresh_from_db()
        self.ba2.refresh_from_db()
        self.bb1.refresh_from_db()
        self.bb2.refresh_from_db()
        self.assertEqual(self.ba1.final_proxy, 'XXXXX')
        self.assertEqual(self.ba2.final_proxy, 'f6f7f8f9f0')
        self.assertEqual(self.bb1.final_proxy, 'XXXXX')
        self.assertEqual(self.bb2.final_proxy, 'f6f7f8f9f0')
    def test_base_change(self):
        for i in range(10):
            MtPtrDerived.objects.create(basename='D{}'.format(i))

        b = MtPtrBase.objects.get(pk=1)
        b.basename = 'changed'
        b.save(update_fields=['basename'])
        self.assertEqual(b.mtptrderived.comp, 'changed')

        # create plain Basee object
        new_b = MtPtrBase.objects.create(basename='hello')

        # mass action
        MtPtrBase.objects.all().update(basename='new value')
        update_dependent(MtPtrBase.objects.all(), update_fields=['basename'])

        self.assertEqual(list(MtPtrDerived.objects.all().values_list('basename', flat=True)), ['new value'] * 10)
    def test_update_bulk_final_sub2(self):
        # this needs old handling - seems a good indicator for this is whether the QS changes itself
        # here: filter(sub2=self.s21) before vs. filter(sub2=self.s22) after the update
        old_relations = preupdate_dependent(
            DepSubFinal.objects.filter(sub2=self.s21))
        DepSubFinal.objects.filter(sub2=self.s21).update(sub2=self.s22)
        update_dependent(DepSubFinal.objects.filter(sub2=self.s22),
                         old=old_relations)

        self.ba1.refresh_from_db()
        self.ba2.refresh_from_db()
        self.bb1.refresh_from_db()
        self.bb2.refresh_from_db()
        self.assertEqual(self.ba1.final_proxy, '')
        self.assertEqual(self.ba2.final_proxy, 'f1f2f3f4f5f6f7f8f9f0')
        self.assertEqual(self.bb1.final_proxy, '')
        self.assertEqual(self.bb2.final_proxy, 'f1f2f3f4f5f6f7f8f9f0')
    def test_move_bulk(self):
        p1 = Parent.objects.create()
        p2 = Parent.objects.create()
        for i in range(10):
            Child.objects.create(parent=p1)

        p1.refresh_from_db()
        p2.refresh_from_db()
        self.assertEqual(p1.children_count, 10)
        self.assertEqual(p2.children_count, 0)

        old_relations = preupdate_dependent(Child.objects.all())
        Child.objects.all().update(parent=p2)
        update_dependent(Child.objects.all(), old=old_relations)

        p1.refresh_from_db()
        p2.refresh_from_db()
        self.assertEqual(p1.children_count, 0)
        self.assertEqual(p2.children_count, 10)
    def test_manually_cf_update_bulk(self):
        # do cfs updates manually after bulk create of many records
        names = ['testa', 'testb', 'testc']
        ComputeLocal.objects.bulk_create(
            [ComputeLocal(name=name, xy=666, c8='SENTINEL') for name in names])
        # get pks to test against after update
        pks = [el.pk for el in ComputeLocal.objects.filter(c8='SENTINEL')]
        update_dependent(
            ComputeLocal.objects.filter(c8='SENTINEL'),
            update_fields=['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8'])

        for i, el in enumerate(ComputeLocal.objects.filter(pk__in=pks)):
            name = names[i].upper()
            self.assertEqual(el.c1, name)
            self.assertEqual(el.c2, 'c2{}'.format(name))
            self.assertEqual(el.c3, 'c3{}'.format(name))
            self.assertEqual(el.c4, 'c4c3{}'.format(name))
            self.assertEqual(el.c5, 'c5c2{}c4c3{}c6666'.format(name, name))
            self.assertEqual(el.c6, 'c6666')
            self.assertEqual(el.c7, 'c7c8')
            self.assertEqual(el.c8, 'c8')
Esempio n. 10
0
def update_APRs(modeladmin, request, queryset):
    update_dependent(models.Balance.objects.filter(account__in=queryset))
Esempio n. 11
0
 def test_updatetime(self):
     print('update 10000 records of SelfRef:')
     timer(lambda: update_dependent(SelfRef.objects.all()))
     print('check 10000 records of SelfRef:')
     timer(lambda: update_dependent(SelfRef.objects.all()))