Return new records from copy following the input order

issue7512
review58291002
This commit is contained in:
Cédric Krier committed 2018-06-24 16:48:27 +02:00
1 parent f4b1789339
commit 0d07dea2ac
3 files changed
+28 -5

No files matched your search

+1
View File
@@ -285,6 +285,7 @@ Class methods:
Duplicate the records. ``default`` is a dictionary of default value for the
created records.
New records are returned following the input order.
.. classmethod:: ModelStorage.search(domain[, offset[, limit[, order[, count]]]])
+7 -5
View File
@@ -338,7 +338,7 @@ class ModelStorage(Model):
data = convert_data(field_defs, datas[id])
to_create.append(data)
new_records = cls.create(to_create)
new_ids = dict(izip(ids, map(int, new_records)))
id2new_record = dict(izip(ids, new_records))
fields_translate = {}
for field_name, field in field_defs.iteritems():
@@ -358,11 +358,13 @@ class ModelStorage(Model):
fuzzy_translation=False):
datas = cls.read(ids,
fields_names=fields_translate.keys() + ['id'])
to_write = []
for data in datas:
data_id = data['id']
data = convert_data(fields_translate, data)
cls.write([cls(new_ids[data_id])], data)
return cls.browse(new_ids.values())
to_write.append([id2new_record[data['id']]])
to_write.append(
convert_data(fields_translate, data))
cls.write(*to_write)
return new_records
@classmethod
def search(cls, domain, offset=0, limit=None, order=None, count=False):
+20
View File
@@ -36,6 +36,26 @@ class ModelStorageTestCase(unittest.TestCase):
self.assertTrue(
all(x['name'] >= y['name'] for x, y in zip(rows, rows[1:])))
@with_transaction()
def test_copy_order(self):
"Test copy order"
pool = Pool()
ModelStorage = pool.get('test.modelstorage')
# Use both order to avoid false positive by chance
records = ModelStorage.create(
[{'name': n} for n in ['foo', 'bar', 'test']])
new_records = ModelStorage.copy(records)
reversed_records = list(reversed(records))
new_reversed_records = ModelStorage.copy(reversed_records)
self.assertListEqual(
[r.name for r in records],
[r.name for r in new_records])
self.assertListEqual(
[r.name for r in reversed_records],
[r.name for r in new_reversed_records])
@with_transaction()
def test_search_count(self):
"Test search_count"