Projet

Général

Profil

0006-data-snapshot-restore-performances-51472.patch

Lauréline Guérin, 01 mars 2021 11:22

Télécharger (4,18 ko)

Voir les différences:

Subject: [PATCH 6/7] data: snapshot restore performances (#51472)

 combo/data/models.py  | 20 ++++++++++++++------
 tests/test_manager.py |  6 +++---
 2 files changed, 17 insertions(+), 9 deletions(-)
combo/data/models.py
232 232
        return os.path.splitext(self.picture.name)[-1]
233 233

  
234 234
    def save(self, *args, **kwargs):
235
        if 'update_fields' in kwargs:
236
            return super().save(*args, **kwargs)
237

  
235 238
        if not self.id:
236 239
            self.related_cells = {'cell_types': []}
237 240
        if self.order is None:
......
493 496
            cell['fields']['groups'] = [
494 497
                [x] for x in cell['fields']['groups'] if isinstance(x, six.string_types)
495 498
            ]
496
            if snapshot:
497
                cell['fields']['page'] = page.object.id
498
            else:
499
                cell['fields']['page'] = page.object.natural_key()
499
            cell['fields']['page'] = page.object.id
500 500

  
501 501
        # if there were cells, remove them
502 502
        # if page was created, do nothing
503 503
        if created is False:
504
            for cell in CellBase.get_cells(page_id=page.object.id):
505
                cell.delete()
504
            for klass in get_cell_classes():
505
                if klass is None:
506
                    continue
507
                klass.objects.filter(page=page.object).delete()
506 508
        return page.object  # get page out of deserialization object
507 509

  
508 510
    @classmethod
......
615 617
    def load_page(self, json_page, snapshot=None):
616 618
        try:
617 619
            post_save.disconnect(cell_maintain_page_cell_cache)
620
            post_delete.disconnect(cell_maintain_page_cell_cache)
621

  
618 622
            page = Page.load_serialized_page(json_page, snapshot=snapshot)
619 623
            page.load_serialized_cells(json_page['cells'])
620 624
        finally:
621 625
            post_save.connect(cell_maintain_page_cell_cache)
626
            post_delete.connect(cell_maintain_page_cell_cache)
627

  
622 628
        page.build_cell_cache()
623 629
        return page
624 630

  
......
1990 1996
def create_redirects(sender, instance, raw, **kwargs):
1991 1997
    if raw or not instance.id or instance.snapshot_id:
1992 1998
        return
1999
    if kwargs.get('update_fields') and kwargs['update_fields'] == frozenset({'related_cells'}):
2000
        return
1993 2001
    try:
1994 2002
        old_page = Page.objects.get(id=instance.id)
1995 2003
    except Page.DoesNotExist:
tests/test_manager.py
832 832
    resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json')
833 833
    with CaptureQueriesContext(connection) as ctx:
834 834
        resp = resp.form.submit()
835
        assert len(ctx.captured_queries) in [853, 854]
835
        assert len(ctx.captured_queries) in [823, 824]
836 836

  
837 837
    Page.objects.all().delete()
838 838
    assert LinkCell.objects.count() == 0
......
841 841
    resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json')
842 842
    with CaptureQueriesContext(connection) as ctx:
843 843
        resp = resp.form.submit()
844
        assert len(ctx.captured_queries) == 378
844
        assert len(ctx.captured_queries) == 364
845 845
    assert set(Page.objects.get(slug='one').related_cells['cell_types']) == set(
846 846
        ['data_textcell', 'data_linkcell']
847 847
    )
......
2187 2187
    resp = resp.click('restore', index=6)
2188 2188
    with CaptureQueriesContext(connection) as ctx:
2189 2189
        resp = resp.form.submit().follow()
2190
        assert len(ctx.captured_queries) == 327
2190
        assert len(ctx.captured_queries) == 143
2191 2191

  
2192 2192
    resp2 = resp.click('See online')
2193 2193
    assert resp2.text.index('Foobar1') < resp2.text.index('Foobar2') < resp2.text.index('Foobar3')
2194
-