469 |
469 |
return serialized_page
|
470 |
470 |
|
471 |
471 |
@classmethod
|
472 |
|
def load_serialized_page(cls, json_page, snapshot=None, request=None):
|
|
472 |
def load_serialized_page(cls, json_page, page=None, snapshot=None, request=None):
|
473 |
473 |
json_page['model'] = 'data.page'
|
474 |
474 |
json_page['fields']['groups'] = [
|
475 |
475 |
[x] for x in json_page['fields']['groups'] if isinstance(x, six.string_types)
|
476 |
476 |
]
|
477 |
|
page, created = Page.objects.get_or_create(slug=json_page['fields']['slug'], snapshot=snapshot)
|
|
477 |
created = None
|
|
478 |
if page is None:
|
|
479 |
page, created = Page.objects.get_or_create(slug=json_page['fields']['slug'], snapshot=snapshot)
|
478 |
480 |
json_page['pk'] = page.id
|
479 |
481 |
parent_slug = json_page['fields'].get('parent') or []
|
480 |
482 |
if parent_slug and not Page.objects.filter(slug=parent_slug[0]).exists():
|
... | ... | |
521 |
523 |
|
522 |
524 |
@classmethod
|
523 |
525 |
def load_serialized_pages(cls, json_site, request=None):
|
524 |
|
cells = []
|
525 |
|
for json_page in json_site:
|
526 |
|
cls.load_serialized_page(json_page, request=request)
|
527 |
|
cells.extend(json_page.get('cells'))
|
528 |
|
cls.load_serialized_cells(cells)
|
|
526 |
cells_to_load = []
|
|
527 |
to_load = []
|
|
528 |
to_build = []
|
|
529 |
try:
|
|
530 |
post_save.disconnect(cell_maintain_page_cell_cache)
|
|
531 |
post_delete.disconnect(cell_maintain_page_cell_cache)
|
|
532 |
|
|
533 |
for json_page in json_site:
|
|
534 |
# pre-create pages
|
|
535 |
page, created = Page.objects.get_or_create(slug=json_page['fields']['slug'])
|
|
536 |
to_load.append((page, created, json_page))
|
|
537 |
|
|
538 |
# delete cells of already existing pages
|
|
539 |
to_clean = [p for p, created, j in to_load if not created]
|
|
540 |
for klass in get_cell_classes():
|
|
541 |
if klass is None:
|
|
542 |
continue
|
|
543 |
klass.objects.filter(page__in=to_clean).delete()
|
|
544 |
|
|
545 |
# now load pages
|
|
546 |
for (page, created, json_page) in to_load:
|
|
547 |
to_build.append(cls.load_serialized_page(json_page, page=page, request=request))
|
|
548 |
cells_to_load.extend(json_page.get('cells'))
|
|
549 |
|
|
550 |
# and cells
|
|
551 |
cls.load_serialized_cells(cells_to_load)
|
|
552 |
finally:
|
|
553 |
post_save.connect(cell_maintain_page_cell_cache)
|
|
554 |
post_delete.connect(cell_maintain_page_cell_cache)
|
|
555 |
|
|
556 |
# build cache
|
|
557 |
for page in to_build:
|
|
558 |
page.build_cell_cache()
|
529 |
559 |
|
530 |
560 |
@classmethod
|
531 |
561 |
def export_all_for_json(cls):
|