diff --git a/trytond/CHANGELOG b/trytond/CHANGELOG index e857c6c88a..c008cdf270 100644 --- a/trytond/CHANGELOG +++ b/trytond/CHANGELOG @@ -1,3 +1,4 @@ +* Remove support for ``:id`` suffix in import data * Add export translations option to trytond-admin * Update TinyMCE to version 7 * Add python-format flag to PO files diff --git a/trytond/trytond/ir/message.xml b/trytond/trytond/ir/message.xml index 19a4e4da59..861a82a6ee 100644 --- a/trytond/trytond/ir/message.xml +++ b/trytond/trytond/ir/message.xml @@ -169,9 +169,6 @@ this repository contains the full copyright notices and license terms. --> Syntax error for reference: %(value)r in "%(field)s" of "%(model)s" (%(column)s). - - Syntax error for XML id: %(value)r in "%(field)s" of "%(model)s" (%(column)s). - The value "%(value)s" for field "%(field)s" in record "%(record)s" of "%(model)s" is not valid according to its domain. diff --git a/trytond/trytond/model/modelstorage.py b/trytond/trytond/model/modelstorage.py index 93afbede0f..46a1040857 100644 --- a/trytond/trytond/model/modelstorage.py +++ b/trytond/trytond/model/modelstorage.py @@ -924,44 +924,6 @@ class ModelStorage(Model): res = '%s,%s' % (relation, res[0].id) return res - @lru_cache(maxsize=1000) - def get_by_id(value, ftype, field, klass, column): - if not value: - return None - relation = None - if ftype == 'many2many': - value = next(csv.reader(value.splitlines(), delimiter=',', - quoting=csv.QUOTE_NONE, escapechar='\\')) - elif ftype == 'reference': - try: - relation, value = value.split(',', 1) - except ValueError as e: - raise ImportDataError( - gettext('ir.msg_reference_syntax_error', - value=value, - column=column, - **klass.__names__(field))) from e - value = [value] - else: - value = [value] - res_ids = [] - for word in value: - try: - module, xml_id = word.rsplit('.', 1) - db_id = ModelData.get_id(module, xml_id) - except (ValueError, KeyError) as e: - raise ImportDataError( - gettext('ir.msg_xml_id_syntax_error', - value=word, - column=column, - **klass.__names__(field))) from e - res_ids.append(db_id) - if ftype == 'many2many' and res_ids: - return res_ids - elif ftype == 'reference' and res_ids: - return '%s,%s' % (relation, str(res_ids[0])) - return res_ids[0] - def dispatch(create, write, row, Relation=cls): id_ = row.pop('id', None) if id_: @@ -1063,15 +1025,7 @@ class ModelStorage(Model): is_prefix_len = (len(field) == (prefix_len + 1)) value = line[i] column = '/'.join(field) - if is_prefix_len and field[-1].endswith(':id'): - field_name = field[-1][:-3] - ftype = fields_def[field_name]['type'] - res = get_by_id(value, ftype, field_name, klass, column) - if ftype == 'many2many': - res = [('add', res)] if res else [] - many2many.add(field_name) - row[field[0][:-3]] = res - elif is_prefix_len and ':lang=' in field[-1]: + if is_prefix_len and ':lang=' in field[-1]: field_name, lang = field[-1].split(':lang=') translate.setdefault(lang, {})[field_name] = value elif is_prefix_len and prefix == field[:-1]: @@ -1157,8 +1111,6 @@ class ModelStorage(Model): data.pop(0) return (row, nbrmax, translate) - ModelData = pool.get('ir.model.data') - fields_names = [x.split('/') for x in fields_names] fields_def = cls.fields_get() diff --git a/trytond/trytond/tests/import_data.xml b/trytond/trytond/tests/import_data.xml deleted file mode 100644 index c4df503bf1..0000000000 --- a/trytond/trytond/tests/import_data.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - Test - - - - Duplicate - - - - Duplicate - - - - Test 1 - - - - Test 2 - - - - Test, comma - - - - Duplicate - - - - Duplicate - - - - Test - - - - Duplicate - - - - Duplicate - - - - diff --git a/trytond/trytond/tests/test_importdata.py b/trytond/trytond/tests/test_importdata.py index d95347725d..8d2ba3f37d 100644 --- a/trytond/trytond/tests/test_importdata.py +++ b/trytond/trytond/tests/test_importdata.py @@ -305,28 +305,23 @@ class ImportDataTestCase(unittest.TestCase): 'Test many2one' pool = Pool() Many2one = pool.get('test.import_data.many2one') + Target = pool.get('test.import_data.many2one.target') + + Target.create([{'name': "Test"}]) for value in ['Test', '']: with self.subTest(value=value): self.assertEqual( Many2one.import_data(['many2one'], [[value]]), 1) - @with_transaction() - def test_many2one_id(self): - "Test many2one with id" - pool = Pool() - Many2one = pool.get('test.import_data.many2one') - - self.assertEqual( - Many2one.import_data( - ['many2one:id'], [['tests.import_data_many2one_target_test']]), - 1) - @with_transaction() def test_many2one_many_rows(self): "Test many2one many rows" pool = Pool() Many2one = pool.get('test.import_data.many2one') + Target = pool.get('test.import_data.many2one.target') + + Target.create([{'name': "Test"}]) self.assertEqual( Many2one.import_data(['many2one'], [['Test'], ['Test']]), 2) @@ -342,22 +337,18 @@ class ImportDataTestCase(unittest.TestCase): with self.assertRaises(ImportDataError): Many2one.import_data(['many2one'], [[value]]) - @with_transaction() - def test_many2one_id_invalid(self): - "Test many2one invalid id" - pool = Pool() - Many2one = pool.get('test.import_data.many2one') - - for value in ['foo', 'tests.foo']: - with self.subTest(value=value): - with self.assertRaises(ImportDataError): - Many2one.import_data(['many2one:id'], [[value]]) - @with_transaction() def test_many2many(self): 'Test many2many' pool = Pool() Many2many = pool.get('test.import_data.many2many') + Target = pool.get('test.import_data.many2many.target') + + Target.create([ + {'name': "Test 1"}, + {'name': "Test 2"}, + {'name': "Test, comma"}, + ]) for value in [ 'Test 1', 'Test\\, comma', 'Test\\, comma,Test 1', @@ -366,25 +357,18 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual( Many2many.import_data(['many2many'], [[value]]), 1) - @with_transaction() - def test_many2many_id(self): - "Test many2many with id" - pool = Pool() - Many2many = pool.get('test.import_data.many2many') - - for value in [ - 'tests.import_data_many2many_target_test1', - 'tests.import_data_many2many_target_test1,' - 'tests.import_data_many2many_target_test2']: - with self.subTest(value=value): - self.assertEqual( - Many2many.import_data(['many2many:id'], [[value]]), 1) - @with_transaction() def test_many2many_many_rows(self): "Test many2many many rows" pool = Pool() Many2many = pool.get('test.import_data.many2many') + Target = pool.get('test.import_data.many2many.target') + + Target.create([ + {'name': "Test 1"}, + {'name': "Test 2"}, + {'name': "Test, comma"}, + ]) self.assertEqual( Many2many.import_data(['many2many'], [['Test 1'], ['Test 2']]), 2) @@ -486,6 +470,9 @@ class ImportDataTestCase(unittest.TestCase): 'Test reference' pool = Pool() Reference = pool.get('test.import_data.reference') + Selection = pool.get('test.import_data.reference.selection') + + Selection.create([{'name': "Test"}]) self.assertEqual(Reference.import_data(['reference'], [['test.import_data.reference.selection,Test']]), 1) @@ -493,19 +480,6 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(reference.reference.__name__, 'test.import_data.reference.selection') - @with_transaction() - def test_reference_id(self): - "Test reference with id" - pool = Pool() - Reference = pool.get('test.import_data.reference') - - self.assertEqual(Reference.import_data(['reference:id'], - [['test.import_data.reference.selection,' - 'tests.import_data_reference_selection_test']]), 1) - reference, = Reference.search([]) - self.assertEqual(reference.reference.__name__, - 'test.import_data.reference.selection') - @with_transaction() def test_reference_empty(self): "Test reference empty" @@ -522,6 +496,9 @@ class ImportDataTestCase(unittest.TestCase): "Test reference many rows" pool = Pool() Reference = pool.get('test.import_data.reference') + Selection = pool.get('test.import_data.reference.selection') + + Selection.create([{'name': "Test"}]) self.assertEqual(Reference.import_data(['reference'], [['test.import_data.reference.selection,Test'], @@ -544,17 +521,6 @@ class ImportDataTestCase(unittest.TestCase): with self.assertRaises(ImportDataError): Reference.import_data(['reference'], [[value]]) - @with_transaction() - def test_reference_id_invalid(self): - "Test reference invalid id" - pool = Pool() - Reference = pool.get('test.import_data.reference') - - with self.assertRaises(ImportDataError): - Reference.import_data( - ['reference:id'], - [['test.import_data.reference.selection,foo']]) - @with_transaction() def test_binary_bytes(self): "Test binary bytes" @@ -622,22 +588,6 @@ class ImportDataTestCase(unittest.TestCase): self.assertEqual(count, 1) self.assertEqual([m.name for m in record.many2many], ["Bar"]) - @with_transaction() - def test_update_many2many_id(self): - "Test update many2many with id" - pool = Pool() - Many2many = pool.get('test.import_data.many2many') - - record = Many2many(many2many=[{'name': "Foo"}]) - record.save() - - count = Many2many.import_data( - ['id', 'many2many:id'], - [[record.id, 'tests.import_data_many2many_target_test1']]) - - self.assertEqual(count, 1) - self.assertEqual([m.name for m in record.many2many], ["Test 1"]) - @with_transaction() def test_update_one2many(self): "Test update one2many" diff --git a/trytond/trytond/tests/tryton.cfg b/trytond/trytond/tests/tryton.cfg index 67ad062c15..3ccff9290e 100644 --- a/trytond/trytond/tests/tryton.cfg +++ b/trytond/trytond/tests/tryton.cfg @@ -3,7 +3,6 @@ depends: ir res xml: - import_data.xml sequence.xml workflow.xml wizard.xml