cards: add support for importing items field (#48775)
This commit is contained in:
parent
901b2006ae
commit
9fd6500aea
|
@ -287,6 +287,7 @@ def test_backoffice_cards_import_data_from_csv(pub, studio):
|
|||
fields.EmailField(id='8', label='Email'),
|
||||
fields.TextField(id='9', label='Long'),
|
||||
fields.ItemField(id='10', label='List2', data_source=data_source),
|
||||
fields.ItemsField(id='11', label='Items', data_source=data_source, required=False),
|
||||
]
|
||||
carddef.workflow_roles = {'_editor': user.roles[0]}
|
||||
carddef.store()
|
||||
|
@ -315,7 +316,7 @@ def test_backoffice_cards_import_data_from_csv(pub, studio):
|
|||
sample_resp = resp.click('Download sample file for this card')
|
||||
today = datetime.date.today()
|
||||
assert sample_resp.text == (
|
||||
"Table,Map,Test,Boolean,List,Date,File,Email,Long,List2\r\n"
|
||||
"Table,Map,Test,Boolean,List,Date,File,Email,Long,List2,Items\r\n"
|
||||
"will be ignored - type Table not supported,"
|
||||
"%s,"
|
||||
"value,"
|
||||
|
@ -325,7 +326,8 @@ def test_backoffice_cards_import_data_from_csv(pub, studio):
|
|||
"will be ignored - type File Upload not supported,"
|
||||
"foo@example.com,"
|
||||
"value,"
|
||||
"value\r\n" % (pub.get_default_position(), today))
|
||||
"value,"
|
||||
"id1|id2|...\r\n" % (pub.get_default_position(), today))
|
||||
|
||||
# missing file
|
||||
resp = resp.forms[0].submit()
|
||||
|
@ -345,9 +347,9 @@ def test_backoffice_cards_import_data_from_csv(pub, studio):
|
|||
resp = resp.forms[0].submit()
|
||||
assert 'CSV file contains less columns than card fields.' in resp.text
|
||||
|
||||
data = [b'Table,Map,Test,Boolean,List,Date,File,Email,Long,List2']
|
||||
data = [b'Table,Map,Test,Boolean,List,Date,File,Email,Long,List2,Items']
|
||||
for i in range(1, 150):
|
||||
data.append(b'table,48.81;2.37,data%d ,%s,item%d,2020-01-%02d,filename-%d,test@localhost,"plop\nplop",1' % (
|
||||
data.append(b'table,48.81;2.37,data%d ,%s,item%d,2020-01-%02d,filename-%d,test@localhost,"plop\nplop",1,1|2' % (
|
||||
i, str(bool(i % 2)).encode('utf-8'), i, i % 31 + 1, i))
|
||||
|
||||
resp.forms[0]['file'] = Upload('test.csv', b'\n'.join(data),
|
||||
|
@ -365,6 +367,11 @@ def test_backoffice_cards_import_data_from_csv(pub, studio):
|
|||
assert card1.data['10'] == '1'
|
||||
assert card1.data['10_display'] == 'un'
|
||||
assert card1.data['10_structured'] == {'id': '1', 'text': 'un', 'more': 'foo'}
|
||||
assert card1.data['11'] == ['1', '2']
|
||||
assert card1.data['11_display'] == 'un, deux'
|
||||
assert card1.data['11_structured'] == [
|
||||
{'id': '1', 'text': 'un', 'more': 'foo'},
|
||||
{'id': '2', 'text': 'deux', 'more': 'bar'}]
|
||||
assert card2.data['2'] == 'data2'
|
||||
assert card2.data['3'] is False
|
||||
assert card2.data['5'].tm_mday == 3
|
||||
|
|
|
@ -160,6 +160,8 @@ class CardPage(FormPage):
|
|||
value = 'foo@example.com'
|
||||
elif isinstance(f, fields.MapField):
|
||||
value = get_publisher().get_default_position()
|
||||
elif isinstance(f, fields.ItemsField):
|
||||
value = 'id1|id2|...'
|
||||
else:
|
||||
value = 'value'
|
||||
sample_line.append(value)
|
||||
|
|
|
@ -1785,6 +1785,13 @@ class ItemsField(WidgetField):
|
|||
def convert_value_to_str(self, value):
|
||||
return value
|
||||
|
||||
def convert_value_from_str(self, value):
|
||||
if not isinstance(value, str):
|
||||
return value
|
||||
if not value.strip():
|
||||
return None
|
||||
return [x.strip() for x in value.split('|') if x.strip()]
|
||||
|
||||
def get_view_value(self, value, **kwargs):
|
||||
if type(value) is str: # == display_value
|
||||
return value
|
||||
|
|
Loading…
Reference in New Issue