From d65dcff732e977028a25d43700d69719d32815a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 12 Nov 2015 15:17:06 +0100 Subject: [PATCH] admin: make it possible to edit named data sources slugs (#8924) --- tests/test_admin_pages.py | 34 ++++++++++++++++++++++++++++++++++ wcs/admin/data_sources.py | 22 ++++++++++++++++++---- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index 115a59a..89dc68e 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -2369,6 +2369,40 @@ def test_data_sources_delete(pub): resp = resp.follow() assert NamedDataSource.count() == 0 +def test_data_sources_edit_slug(pub): + create_superuser(pub) + NamedDataSource.wipe() + data_source = NamedDataSource(name='foobar') + data_source.data_source = {'type': 'formula', 'value': '[]'} + data_source.store() + assert NamedDataSource.get(1).slug == 'foobar' + + FormDef.wipe() + app = login(get_app(pub)) + + resp = app.get('/backoffice/settings/data-sources/1/') + resp = resp.click(href='edit') + assert resp.forms[0]['name'].value == 'foobar' + resp.forms[0]['slug'] = 'foo_bar' + resp = resp.forms[0].submit('submit') + assert resp.location == 'http://example.net/backoffice/settings/data-sources/' + assert NamedDataSource.get(1).slug == 'foo_bar' + + data_source = NamedDataSource(name='barfoo') + data_source.data_source = {'type': 'formula', 'value': '[]'} + data_source.store() + + resp = app.get('/backoffice/settings/data-sources/1/') + resp = resp.click(href='edit') + assert resp.forms[0]['name'].value == 'foobar' + resp.forms[0]['slug'] = 'barfoo' + resp = resp.forms[0].submit('submit') + assert 'This value is already used' in resp.body + + resp.forms[0]['slug'] = 'foobar' + resp = resp.forms[0].submit('submit') + assert resp.location == 'http://example.net/backoffice/settings/data-sources/' + def test_settings_permissions(pub): create_superuser(pub) role1 = create_role() diff --git a/wcs/admin/data_sources.py b/wcs/admin/data_sources.py index 33daf6f..5994777 100644 --- a/wcs/admin/data_sources.py +++ b/wcs/admin/data_sources.py @@ -29,7 +29,8 @@ class NamedDataSourceUI(object): self.datasource = NamedDataSource() def get_form(self): - form = Form(enctype='multipart/form-data') + form = Form(enctype='multipart/form-data', + advanced_label=_('Additional options')) form.add(StringWidget, 'name', title=_('Name'), required=True, size=30, value=self.datasource.name) form.add(TextWidget, 'description', title=_('Description'), @@ -40,24 +41,37 @@ class NamedDataSourceUI(object): title=_('Data Source'), allow_named_sources=False, required=True) + if self.datasource.slug: + form.add(StringWidget, 'slug', + value=self.datasource.slug, + title=_('Identifier'), + hint=_('Beware it is risky to change it'), + required=True, advanced=True, + ) form.add_submit('submit', _('Submit')) form.add_submit('cancel', _('Cancel')) return form def submit_form(self, form): name = form.get_widget('name').parse() + if self.datasource.slug: + slug = form.get_widget('slug').parse() - found_error = False for nds in NamedDataSource.select(): if nds.id == self.datasource.id: continue if name == nds.name: - form.get_widget('name').set_error(_('This name is already used')) - raise ValueError() + form.get_widget('name').set_error(_('This name is already used.')) + if slug == nds.slug: + form.get_widget('slug').set_error(_('This value is already used.')) + if form.has_errors(): + raise ValueError() self.datasource.name = name self.datasource.description = form.get_widget('description').parse() self.datasource.data_source = form.get_widget('data_source') + if self.datasource.slug: + self.datasource.slug = slug self.datasource.store() -- 2.6.2