manager: add link to export page snapshot (#62023)
This commit is contained in:
parent
2b68a863ed
commit
3d4f53fde3
|
@ -21,6 +21,7 @@
|
|||
<li>{{ snapshot.timestamp }}, {{ snapshot.comment }}
|
||||
{% if snapshot.user %} ({{ snapshot.user.get_full_name }}){% endif %}
|
||||
— <a href="{% url 'combo-snapshot-view' pk=snapshot.id %}">{% trans "view" %}</a>
|
||||
— <a href="{% url 'combo-manager-snapshot-export' page_pk=view.page.id pk=snapshot.id %}">{% trans "export" %}</a>
|
||||
— <a href="{% url 'combo-manager-snapshot-restore' page_pk=view.page.id pk=snapshot.id %}" rel="popup">{% trans "restore" %}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
|
|
@ -96,6 +96,11 @@ urlpatterns = [
|
|||
pages_admin_required(views.snapshot_restore),
|
||||
name='combo-manager-snapshot-restore',
|
||||
),
|
||||
url(
|
||||
r'^pages/(?P<page_pk>\d+)/history/(?P<pk>\d+)/export$',
|
||||
pages_admin_required(views.snapshot_export),
|
||||
name='combo-manager-snapshot-export',
|
||||
),
|
||||
url(
|
||||
r'^pages/(?P<page_pk>\d+)/add-cell-to-(?P<ph_key>[\w_-]+)/(?P<cell_type>\w+)/(?P<variant>[\w-]+)/$',
|
||||
views.page_add_cell,
|
||||
|
|
|
@ -632,6 +632,17 @@ class SnapshotRestoreView(ManagedPageMixin, DetailView):
|
|||
snapshot_restore = SnapshotRestoreView.as_view()
|
||||
|
||||
|
||||
def snapshot_export(request, *args, **kwargs):
|
||||
snapshot = PageSnapshot.objects.get(id=kwargs['pk'])
|
||||
page = snapshot.get_page()
|
||||
response = HttpResponse(content_type='application/json')
|
||||
response['Content-Disposition'] = 'attachment; filename="export_page_{}_{}.json"'.format(
|
||||
snapshot.get_page().slug, snapshot.timestamp.strftime('%Y%m%d')
|
||||
)
|
||||
json.dump(page.get_serialized_page(), response, indent=2)
|
||||
return response
|
||||
|
||||
|
||||
class PageRedirectToEditView(RedirectView):
|
||||
permanent = False
|
||||
|
||||
|
|
|
@ -904,6 +904,38 @@ def test_export_page(freezer, app, admin_user):
|
|||
assert resp.json['pages'][0].get('fields').get('slug') == 'one'
|
||||
|
||||
|
||||
def test_export_page_snapshot(freezer, app, admin_user):
|
||||
Page.objects.all().delete()
|
||||
page = Page(title='One', slug='one', template_name='standard')
|
||||
page.save()
|
||||
app = login(app)
|
||||
|
||||
freezer.move_to('2020-07-16')
|
||||
resp = app.get('/manage/pages/%s/' % page.id, status=200)
|
||||
resp = resp.click(href='.*/title')
|
||||
resp.form['title'].value = 'Initial Title'
|
||||
resp = resp.form.submit()
|
||||
resp = resp.follow()
|
||||
|
||||
freezer.move_to('2020-07-17')
|
||||
resp = resp.click(href='.*/title')
|
||||
resp.form['title'].value = 'Updated Title'
|
||||
resp = resp.form.submit()
|
||||
|
||||
history = app.get('/manage/pages/%s/history' % page.id, status=200)
|
||||
resp = history.click('export', index=0, verbose=True)
|
||||
|
||||
assert resp.headers['content-type'] == 'application/json'
|
||||
assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200717.json"'
|
||||
assert resp.json['fields']['title'] == 'Updated Title'
|
||||
|
||||
resp = history.click('export', index=1, verbose=True)
|
||||
|
||||
assert resp.headers['content-type'] == 'application/json'
|
||||
assert resp.headers['content-disposition'] == 'attachment; filename="export_page_one_20200716.json"'
|
||||
assert resp.json['fields']['title'] == 'Initial Title'
|
||||
|
||||
|
||||
def test_export_page_without_child(freezer, app, admin_user):
|
||||
page = Page.objects.create(title='One', slug='one', template_name='standard')
|
||||
Page.objects.create(title='Two', slug='two', parent=page, template_name='standard')
|
||||
|
|
Loading…
Reference in New Issue