0002-manager-select-sections-in-site-export-46895.patch
combo/data/utils.py | ||
---|---|---|
47 | 47 |
return _('Missing groups: %s') % ', '.join(self.names) |
48 | 48 | |
49 | 49 | |
50 |
def export_site(): |
|
50 |
def export_site(pages=True, cartography=True, pwa=True, assets=True, payment=True):
|
|
51 | 51 |
'''Dump site objects to JSON-dumpable dictionnary''' |
52 |
return {'pages': Page.export_all_for_json(), |
|
53 |
'map-layers': MapLayer.export_all_for_json(), |
|
54 |
'assets': Asset.export_all_for_json(), |
|
55 |
'pwa': { |
|
56 |
'settings': PwaSettings.export_for_json(), |
|
57 |
'navigation': PwaNavigationEntry.export_all_for_json(), |
|
58 |
}, |
|
59 |
'payment': { |
|
60 |
'backends': PaymentBackend.export_all_for_json(), |
|
61 |
'regies': Regie.export_all_for_json(), |
|
62 |
} |
|
63 |
} |
|
52 |
export = {} |
|
53 |
if pages: |
|
54 |
export['pages'] = Page.export_all_for_json() |
|
55 |
if cartography: |
|
56 |
export['map-layers'] = MapLayer.export_all_for_json() |
|
57 |
if assets: |
|
58 |
export['assets'] = Asset.export_all_for_json() |
|
59 |
if pwa: |
|
60 |
export['pwa'] = { |
|
61 |
'settings': PwaSettings.export_for_json(), |
|
62 |
'navigation': PwaNavigationEntry.export_all_for_json(), |
|
63 |
} |
|
64 |
if payment: |
|
65 |
export['payment'] = { |
|
66 |
'backends': PaymentBackend.export_all_for_json(), |
|
67 |
'regies': Regie.export_all_for_json(), |
|
68 |
} |
|
69 |
return export |
|
64 | 70 | |
65 | 71 | |
66 | 72 |
def import_site(data, if_empty=False, clean=False, request=None): |
... | ... | |
118 | 124 |
raise ImportSiteError(_('Unknown page "%s".') % page_slug) |
119 | 125 | |
120 | 126 | |
121 |
def export_site_tar(fd): |
|
127 |
def export_site_tar(fd, export_kwargs=None):
|
|
122 | 128 |
tar = tarfile.open(mode='w', fileobj=fd) |
123 |
data = export_site() |
|
129 |
data = export_site(**(export_kwargs or {}))
|
|
124 | 130 |
del data['assets'] |
125 | 131 |
add_tar_content(tar, '_site.json', json.dumps(data, indent=2)) |
126 | 132 |
tar_assets_files(tar) |
combo/manager/forms.py | ||
---|---|---|
269 | 269 | |
270 | 270 | |
271 | 271 |
class SiteExportForm(forms.Form): |
272 |
include_asset = forms.BooleanField(label=_('Include assets into the export'), required=False) |
|
272 |
pages = forms.BooleanField(label=_('Pages'), required=False, initial=True) |
|
273 |
cartography = forms.BooleanField(label=_('Cartography'), required=False, initial=True) |
|
274 |
pwa = forms.BooleanField(label=_('Mobile application (PWA)'), required=False, initial=True) |
|
275 |
assets = forms.BooleanField(label=_('Assets (declarations)'), required=False, initial=True) |
|
276 |
asset_files = forms.BooleanField(label=_('Assets (files)'), required=False, initial=False) |
|
277 |
payment = forms.BooleanField(label=_('Online Payment'), required=False, initial=True) |
combo/manager/views.py | ||
---|---|---|
68 | 68 |
form_class = SiteExportForm |
69 | 69 |
template_name = 'combo/site_export.html' |
70 | 70 | |
71 |
def post(self, request, *args, **kwargs): |
|
72 |
if request.POST.get('include_asset'): |
|
71 |
def form_valid(self, form): |
|
72 |
asset_files = form.cleaned_data.pop('asset_files') |
|
73 |
if asset_files: |
|
73 | 74 |
fd = BytesIO() |
74 |
export_site_tar(fd) |
|
75 |
export_site_tar(fd, export_kwargs=form.cleaned_data)
|
|
75 | 76 |
response = HttpResponse(content=fd.getvalue(), content_type='application/x-tar') |
76 | 77 |
response['Content-Disposition'] = 'attachment; filename="site-export.tar"' |
77 | 78 |
else: |
78 | 79 |
response = HttpResponse(content_type='application/json') |
79 | 80 |
response['Content-Disposition'] = 'attachment; filename="site-export.json"' |
80 |
json.dump(export_site(), response, indent=2) |
|
81 |
json.dump(export_site(**form.cleaned_data), response, indent=2)
|
|
81 | 82 |
return response |
82 | 83 | |
83 | 84 |
tests/test_manager.py | ||
---|---|---|
771 | 771 |
assert LinkCell.objects.get(page__slug='one').link_page.slug == 'two' |
772 | 772 |
assert LinkCell.objects.get(page__slug='two').link_page.slug == 'one' |
773 | 773 | |
774 |
resp = app.get('/manage/') |
|
775 |
resp = resp.click('Export Site') |
|
776 |
resp.form['pages'] = False |
|
777 |
resp = resp.form.submit() |
|
778 |
site_export = resp.body |
|
779 | ||
780 |
site_json = json.loads(site_export) |
|
781 |
assert 'pages' not in site_json |
|
782 |
assert 'pwa' in site_json |
|
783 | ||
784 |
Page.objects.all().delete() |
|
785 |
resp = app.get('/manage/') |
|
786 |
resp = resp.click('Import Site') |
|
787 |
resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json') |
|
788 |
assert Page.objects.count() == 0 |
|
789 | ||
774 | 790 |
# check with invalid file |
775 | 791 |
resp = app.get('/manage/') |
776 | 792 |
resp = resp.click('Import Site') |
... | ... | |
792 | 808 |
app = login(app) |
793 | 809 |
resp = app.get('/manage/') |
794 | 810 |
resp = resp.click('Export Site') |
795 |
resp.form['include_asset'] = True
|
|
811 |
resp.form['asset_files'] = True
|
|
796 | 812 |
resp = resp.form.submit() |
797 | 813 |
assert resp.headers['content-type'] == 'application/x-tar' |
798 | 814 |
site_export = resp.body |
799 |
- |