diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 81fa9d27c..49c3eb8ee 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -4238,6 +4238,25 @@ def test_form_text_field_submit(pub): resp = resp.forms[0].submit('submit') assert 'Check values then click submit.' in resp.body +def test_unknown_datasource(pub): + formdef = create_formdef() + formdef.fields = [ + fields.StringField(id='1', label='string', + varname='string', required=False, data_source={'type': 'foobar'}), + fields.ItemField(id='2', label='item', + varname='item', required=False, data_source={'type': 'foobar'}), + fields.ItemsField(id='3', label='items', + varname='items', required=False, data_source={'type': 'foobar'}), + ] + + formdef.store() + data_class = formdef.data_class() + data_class.wipe() + resp = get_app(pub).get('/test/') + formdef.data_class().wipe() + resp = resp.forms[0].submit('submit') # should go straight to validation + assert 'Check values then click submit.' in resp.body + def test_form_items_datasource(pub): formdef = create_formdef() formdef.fields = [fields.ItemsField(id='1', label='items', diff --git a/wcs/data_sources.py b/wcs/data_sources.py index 5bafd4d06..04bcf1729 100644 --- a/wcs/data_sources.py +++ b/wcs/data_sources.py @@ -249,6 +249,12 @@ def get_object(data_source): return NamedDataSource.get_by_slug(ds_type) +class StubNamedDataSource(object): + type = 'formula' + data_source = {'type': 'formula', 'value': []} + cache_duration = None + + class NamedDataSource(XmlStorableObject): _names = 'datasources' _xml_tagname = 'datasources' @@ -330,7 +336,8 @@ class NamedDataSource(XmlStorableObject): objects = [x for x in cls.select() if x.slug == slug] if objects: return objects[0] - raise KeyError("data source '%s' does not exist" % slug) + get_logger().warn("data source '%s' does not exist" % slug) + return StubNamedDataSource() def get_json_query_url(self): url = self.data_source.get('value').strip() diff --git a/wcs/formdef.py b/wcs/formdef.py index 3ba4219ec..5d35fafed 100644 --- a/wcs/formdef.py +++ b/wcs/formdef.py @@ -1010,9 +1010,8 @@ class FormDef(StorableObject): for field in formdef.fields: data_source = getattr(field, 'data_source', None) if data_source: - try: - data_sources.get_real(data_source) - except KeyError: + if isinstance(data_sources.get_object(data_source), + data_sources.StubNamedDataSource): unknown_datasources.add(data_source.get('type')) if unknown_datasources: raise FormdefImportError(N_('Unknown datasources'),