datasources: avoid raising on lost datasource (#18431)
This commit is contained in:
parent
215209fb98
commit
0085120f84
|
@ -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',
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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'),
|
||||
|
|
Loading…
Reference in New Issue