datasource: use carddef custom view digest template as text (#45633)
This commit is contained in:
parent
f13f3cd80f
commit
ed1698d5b0
|
@ -418,3 +418,101 @@ def test_get_data_source_custom_view(pub):
|
|||
assert CardDef.get_data_source_custom_view('carddef:foo-1:view', carddef=carddef2) is None
|
||||
assert CardDef.get_data_source_custom_view('carddef:foo-2:view', carddef=carddef2).id == custom_view2.id
|
||||
assert CardDef.get_data_source_custom_view('carddef:foo-2:view', carddef=carddef1) is None
|
||||
|
||||
|
||||
def test_data_source_custom_view_digest(pub):
|
||||
CardDef.wipe()
|
||||
carddef = CardDef()
|
||||
carddef.name = 'foo'
|
||||
carddef.fields = [
|
||||
StringField(id='1', label='Test', type='string', varname='foo'),
|
||||
]
|
||||
carddef.digest_templates = {'default': '{{ form_var_foo }}'}
|
||||
carddef.store()
|
||||
carddef.data_class().wipe()
|
||||
|
||||
carddata = carddef.data_class()()
|
||||
carddata.data = {'1': 'Hello'}
|
||||
carddata.just_created()
|
||||
carddata.store()
|
||||
|
||||
carddata2 = carddef.data_class()()
|
||||
carddata2.data = {'1': 'Bye'}
|
||||
carddata2.just_created()
|
||||
carddata2.store()
|
||||
|
||||
custom_view = pub.custom_view_class()
|
||||
custom_view.title = 'view'
|
||||
custom_view.formdef = carddef
|
||||
custom_view.columns = {'list': [{'id': 'id'}]}
|
||||
custom_view.filters = {}
|
||||
custom_view.visibility = 'datasource'
|
||||
custom_view.store()
|
||||
|
||||
assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo')] == ['Bye', 'Hello']
|
||||
assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo:view')] == ['Bye', 'Hello']
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', query='hello')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello'
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', query='hello')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello'
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', query='foo')
|
||||
assert len(cards) == 0
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', query='foo')
|
||||
assert len(cards) == 0
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello'
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello'
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello Foo Bar')
|
||||
assert len(cards) == 0
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello Foo Bar')
|
||||
assert len(cards) == 0
|
||||
|
||||
carddef.digest_templates = {
|
||||
'default': '{{ form_var_foo }}',
|
||||
'custom-view:view': '{{ form_var_foo }} Foo Bar',
|
||||
}
|
||||
carddef.store()
|
||||
# rebuild digests
|
||||
carddata.store()
|
||||
carddata2.store()
|
||||
|
||||
assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo')] == ['Bye', 'Hello']
|
||||
assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo:view')] == [
|
||||
'Bye Foo Bar',
|
||||
'Hello Foo Bar',
|
||||
]
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', query='hello')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello'
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', query='hello')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello Foo Bar'
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', query='foo')
|
||||
assert len(cards) == 0
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', query='foo')
|
||||
assert len(cards) == 2
|
||||
assert cards[0]['text'] == 'Bye Foo Bar'
|
||||
assert cards[1]['text'] == 'Hello Foo Bar'
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello'
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello')
|
||||
assert len(cards) == 0
|
||||
|
||||
cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello Foo Bar')
|
||||
assert len(cards) == 0
|
||||
cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello Foo Bar')
|
||||
assert len(cards) == 1
|
||||
assert cards[0]['text'] == 'Hello Foo Bar'
|
||||
|
|
|
@ -32,10 +32,10 @@ class CardData(FormData):
|
|||
|
||||
formdef = property(get_formdef)
|
||||
|
||||
def get_data_source_structured_item(self):
|
||||
def get_data_source_structured_item(self, digest_key='default'):
|
||||
item = {
|
||||
'id': self.id,
|
||||
'text': self.default_digest,
|
||||
'text': self.digests.get(digest_key),
|
||||
}
|
||||
for field in self.formdef.get_all_fields():
|
||||
if not field.varname:
|
||||
|
|
|
@ -202,6 +202,7 @@ class CardDef(FormDef):
|
|||
return []
|
||||
criterias = [NotEqual('status', 'draft')]
|
||||
order_by = None
|
||||
digest_key = 'default'
|
||||
if len(parts) > 2:
|
||||
if custom_view is None:
|
||||
custom_view = cls.get_data_source_custom_view(data_source_id, carddef=carddef)
|
||||
|
@ -213,9 +214,13 @@ class CardDef(FormDef):
|
|||
if not Template.is_template_string(criteria.value):
|
||||
continue
|
||||
criteria.value = WorkflowStatusItem.compute(criteria.value)
|
||||
if custom_view:
|
||||
view_digest_key = 'custom-view:%s' % custom_view.get_url_slug()
|
||||
if view_digest_key in (carddef.digest_templates or {}):
|
||||
digest_key = view_digest_key
|
||||
|
||||
if query:
|
||||
criterias.append(ElementILike('digests', 'default', query))
|
||||
criterias.append(ElementILike('digests', digest_key, query))
|
||||
if get_by_id:
|
||||
try:
|
||||
if int(get_by_id) >= 2 ** 31:
|
||||
|
@ -228,10 +233,10 @@ class CardDef(FormDef):
|
|||
else:
|
||||
criterias.append(Equal('id', get_by_id))
|
||||
if get_by_text:
|
||||
criterias.append(ElementEqual('digests', 'default', get_by_text))
|
||||
criterias.append(ElementEqual('digests', digest_key, get_by_text))
|
||||
|
||||
items = [
|
||||
x.get_data_source_structured_item()
|
||||
x.get_data_source_structured_item(digest_key=digest_key)
|
||||
for x in carddef.data_class().select(clause=criterias, order_by=order_by, limit=limit)
|
||||
]
|
||||
if order_by is None:
|
||||
|
|
Loading…
Reference in New Issue