Return new records from copy following the input order
issue7512 review58291002
This commit is contained in:
1 parent
f4b1789339
commit
0d07dea2ac
3 files changed
+28
-5
No files matched your search
@@ -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]]]])
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user