0001-manager-add-link-to-export-page-snapshot-62023.patch
combo/manager/templates/combo/page_history.html | ||
---|---|---|
21 | 21 |
<li>{{ snapshot.timestamp }}, {{ snapshot.comment }} |
22 | 22 |
{% if snapshot.user %} ({{ snapshot.user.get_full_name }}){% endif %} |
23 | 23 |
— <a href="{% url 'combo-snapshot-view' pk=snapshot.id %}">{% trans "view" %}</a> |
24 |
— <a href="{% url 'combo-manager-snapshot-export' page_pk=view.page.id pk=snapshot.id %}">{% trans "export" %}</a> |
|
24 | 25 |
— <a href="{% url 'combo-manager-snapshot-restore' page_pk=view.page.id pk=snapshot.id %}" rel="popup">{% trans "restore" %}</a> |
25 | 26 |
</li> |
26 | 27 |
{% endfor %} |
combo/manager/urls.py | ||
---|---|---|
96 | 96 |
pages_admin_required(views.snapshot_restore), |
97 | 97 |
name='combo-manager-snapshot-restore', |
98 | 98 |
), |
99 |
url( |
|
100 |
r'^pages/(?P<page_pk>\d+)/history/(?P<pk>\d+)/export$', |
|
101 |
pages_admin_required(views.snapshot_export), |
|
102 |
name='combo-manager-snapshot-export', |
|
103 |
), |
|
99 | 104 |
url( |
100 | 105 |
r'^pages/(?P<page_pk>\d+)/add-cell-to-(?P<ph_key>[\w_-]+)/(?P<cell_type>\w+)/(?P<variant>[\w-]+)/$', |
101 | 106 |
views.page_add_cell, |
combo/manager/views.py | ||
---|---|---|
625 | 625 |
snapshot_restore = SnapshotRestoreView.as_view() |
626 | 626 | |
627 | 627 | |
628 |
def snapshot_export(request, *args, **kwargs): |
|
629 |
snapshot = PageSnapshot.objects.get(id=kwargs['pk']) |
|
630 |
page = snapshot.get_page() |
|
631 |
response = HttpResponse(content_type='application/json') |
|
632 |
response['Content-Disposition'] = 'attachment; filename="export_page_{}_{}.json"'.format( |
|
633 |
snapshot.get_page().slug, snapshot.timestamp.strftime('%Y%m%d') |
|
634 |
) |
|
635 |
json.dump(page.get_serialized_page(), response, indent=2) |
|
636 |
return response |
|
637 | ||
638 | ||
628 | 639 |
class PageRedirectToEditView(RedirectView): |
629 | 640 |
permanent = False |
630 | 641 |
tests/test_manager.py | ||
---|---|---|
901 | 901 |
assert resp.json['pages'][0].get('fields').get('slug') == 'one' |
902 | 902 | |
903 | 903 | |
904 |
def test_export_page_snapshot(freezer, app, admin_user): |
|
905 |
Page.objects.all().delete() |
|
906 |
page = Page(title='One', slug='one', template_name='standard') |
|
907 |
page.save() |
|
908 |
app = login(app) |
|
909 | ||
910 |
freezer.move_to('2020-07-16') |
|
911 |
resp = app.get('/manage/pages/%s/' % page.id, status=200) |
|
912 |
resp = resp.click(href='.*/title') |
|
913 |
resp.form['title'].value = 'Initial Title' |
|
914 |
resp = resp.form.submit() |
|
915 |
resp = resp.follow() |
|
916 | ||
917 |
freezer.move_to('2020-07-17') |
|
918 |
resp = resp.click(href='.*/title') |
|
919 |
resp.form['title'].value = 'Updated Title' |
|
920 |
resp = resp.form.submit() |
|
921 | ||
922 |
history = app.get('/manage/pages/%s/history' % page.id, status=200) |
|
923 |
resp = history.click('export', index=0, verbose=True) |
|
924 | ||
925 |
assert resp.headers['content-type'] == 'application/json' |
|
926 |
assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200717.json"' |
|
927 |
assert resp.json['fields']['title'] == 'Updated Title' |
|
928 | ||
929 |
resp = history.click('export', index=1, verbose=True) |
|
930 | ||
931 |
assert resp.headers['content-type'] == 'application/json' |
|
932 |
assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200716.json"' |
|
933 |
assert resp.json['fields']['title'] == 'Initial Title' |
|
934 | ||
935 | ||
904 | 936 |
def test_export_page_without_child(freezer, app, admin_user): |
905 | 937 |
page = Page.objects.create(title='One', slug='one', template_name='standard') |
906 | 938 |
Page.objects.create(title='Two', slug='two', parent=page, template_name='standard') |
907 |
- |