[IMP] make resolve_o2m_commands_to_record_dicts's result eager as per vmt's suggestion
bzr revid: xmo@openerp.com-20111011085715-cvcficcy4di9q29i
This commit is contained in:
parent
2646a34cf0
commit
8507ceddcf
|
@ -4809,12 +4809,14 @@ class BaseModel(object):
|
||||||
for record in self.pool.get(o2m_model).read(
|
for record in self.pool.get(o2m_model).read(
|
||||||
cr, uid, ids_to_read, fields=fields, context=context))
|
cr, uid, ids_to_read, fields=fields, context=context))
|
||||||
|
|
||||||
|
record_dicts = []
|
||||||
# merge record from db with record provided by command
|
# merge record from db with record provided by command
|
||||||
for command, id, record in commands:
|
for command, id, record in commands:
|
||||||
item = {}
|
item = {}
|
||||||
if command in (1, 4): item.update(records_by_id[id])
|
if command in (1, 4): item.update(records_by_id[id])
|
||||||
if command in (0, 1): item.update(record)
|
if command in (0, 1): item.update(record)
|
||||||
yield item
|
record_dicts.append(item)
|
||||||
|
return record_dicts
|
||||||
|
|
||||||
# keep this import here, at top it will cause dependency cycle errors
|
# keep this import here, at top it will cause dependency cycle errors
|
||||||
import expression
|
import expression
|
||||||
|
|
|
@ -27,15 +27,16 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
|
|
||||||
def test_no_command(self):
|
def test_no_command(self):
|
||||||
" empty list of commands yields an empty list of records "
|
" empty list of commands yields an empty list of records "
|
||||||
results = list(self.partner.resolve_o2m_commands_to_record_dicts(self.cr, UID, 'address', []))
|
results = self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
|
self.cr, UID, 'address', [])
|
||||||
|
|
||||||
self.assertEqual(results, [])
|
self.assertEqual(results, [])
|
||||||
|
|
||||||
def test_CREATE_commands(self):
|
def test_CREATE_commands(self):
|
||||||
" returns the VALUES dict as-is "
|
" returns the VALUES dict as-is "
|
||||||
results = list(self.partner.resolve_o2m_commands_to_record_dicts(
|
results = self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address',
|
self.cr, UID, 'address',
|
||||||
map(CREATE, [{'foo': 'bar'}, {'foo': 'baz'}, {'foo': 'baq'}])))
|
map(CREATE, [{'foo': 'bar'}, {'foo': 'baz'}, {'foo': 'baq'}]))
|
||||||
self.assertEqual(results, [
|
self.assertEqual(results, [
|
||||||
{'foo': 'bar'},
|
{'foo': 'bar'},
|
||||||
{'foo': 'baz'},
|
{'foo': 'baz'},
|
||||||
|
@ -51,7 +52,8 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
]
|
]
|
||||||
commands = map(LINK_TO, ids)
|
commands = map(LINK_TO, ids)
|
||||||
|
|
||||||
results = list(self.partner.resolve_o2m_commands_to_record_dicts(self.cr, UID, 'address', commands, ['name']))
|
results = self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
|
self.cr, UID, 'address', commands, ['name'])
|
||||||
|
|
||||||
self.assertEqual(results, [
|
self.assertEqual(results, [
|
||||||
{'id': ids[0], 'name': 'foo'},
|
{'id': ids[0], 'name': 'foo'},
|
||||||
|
@ -67,7 +69,8 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
self.address.create(self.cr, UID, {'name': 'baz'})
|
self.address.create(self.cr, UID, {'name': 'baz'})
|
||||||
]
|
]
|
||||||
|
|
||||||
results = list(self.partner.resolve_o2m_commands_to_record_dicts(self.cr, UID, 'address', ids, ['name']))
|
results = self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
|
self.cr, UID, 'address', ids, ['name'])
|
||||||
|
|
||||||
self.assertEqual(results, [
|
self.assertEqual(results, [
|
||||||
{'id': ids[0], 'name': 'foo'},
|
{'id': ids[0], 'name': 'foo'},
|
||||||
|
@ -81,12 +84,12 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
id_bar = self.address.create(self.cr, UID, {'name': 'bar'})
|
id_bar = self.address.create(self.cr, UID, {'name': 'bar'})
|
||||||
id_baz = self.address.create(self.cr, UID, {'name': 'baz', 'city': 'tag'})
|
id_baz = self.address.create(self.cr, UID, {'name': 'baz', 'city': 'tag'})
|
||||||
|
|
||||||
results = list(self.partner.resolve_o2m_commands_to_record_dicts(
|
results = self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', [
|
self.cr, UID, 'address', [
|
||||||
LINK_TO(id_foo),
|
LINK_TO(id_foo),
|
||||||
UPDATE(id_bar, {'name': 'qux', 'city': 'tagtag'}),
|
UPDATE(id_bar, {'name': 'qux', 'city': 'tagtag'}),
|
||||||
UPDATE(id_baz, {'name': 'quux'})
|
UPDATE(id_baz, {'name': 'quux'})
|
||||||
], ['name', 'city']))
|
], ['name', 'city'])
|
||||||
|
|
||||||
self.assertEqual(results, [
|
self.assertEqual(results, [
|
||||||
{'id': id_foo, 'name': 'foo', 'city': False},
|
{'id': id_foo, 'name': 'foo', 'city': False},
|
||||||
|
@ -100,7 +103,7 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
for name in ['NObar', 'baz', 'qux', 'NOquux', 'NOcorge', 'garply']
|
for name in ['NObar', 'baz', 'qux', 'NOquux', 'NOcorge', 'garply']
|
||||||
]
|
]
|
||||||
|
|
||||||
results = list(self.partner.resolve_o2m_commands_to_record_dicts(
|
results = self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', [
|
self.cr, UID, 'address', [
|
||||||
CREATE({'name': 'foo'}),
|
CREATE({'name': 'foo'}),
|
||||||
UPDATE(ids[0], {'name': 'bar'}),
|
UPDATE(ids[0], {'name': 'bar'}),
|
||||||
|
@ -110,7 +113,7 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
UPDATE(ids[4], {'name': 'corge'}),
|
UPDATE(ids[4], {'name': 'corge'}),
|
||||||
CREATE({'name': 'grault'}),
|
CREATE({'name': 'grault'}),
|
||||||
LINK_TO(ids[5])
|
LINK_TO(ids[5])
|
||||||
], ['name']))
|
], ['name'])
|
||||||
|
|
||||||
self.assertEqual(results, [
|
self.assertEqual(results, [
|
||||||
{'name': 'foo'},
|
{'name': 'foo'},
|
||||||
|
@ -132,8 +135,8 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
]
|
]
|
||||||
commands = map(lambda id: (4, id), ids)
|
commands = map(lambda id: (4, id), ids)
|
||||||
|
|
||||||
results = list(self.partner.resolve_o2m_commands_to_record_dicts(
|
results = self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', commands, ['name']))
|
self.cr, UID, 'address', commands, ['name'])
|
||||||
|
|
||||||
self.assertEqual(results, [
|
self.assertEqual(results, [
|
||||||
{'id': ids[0], 'name': 'foo'},
|
{'id': ids[0], 'name': 'foo'},
|
||||||
|
@ -145,8 +148,8 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
"DELETE_ALL can appear as a singleton"
|
"DELETE_ALL can appear as a singleton"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
list(self.partner.resolve_o2m_commands_to_record_dicts(
|
self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', [(5,)], ['name']))
|
self.cr, UID, 'address', [(5,)], ['name'])
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
# 5 should fail with an assert error, but not e.g. a ValueError
|
# 5 should fail with an assert error, but not e.g. a ValueError
|
||||||
pass
|
pass
|
||||||
|
@ -155,18 +158,18 @@ class TestO2MSerialization(unittest2.TestCase):
|
||||||
"Commands with uncertain semantics in this context should be forbidden"
|
"Commands with uncertain semantics in this context should be forbidden"
|
||||||
|
|
||||||
with self.assertRaises(AssertionError):
|
with self.assertRaises(AssertionError):
|
||||||
list(self.partner.resolve_o2m_commands_to_record_dicts(
|
self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', [DELETE(42)], ['name']))
|
self.cr, UID, 'address', [DELETE(42)], ['name'])
|
||||||
|
|
||||||
with self.assertRaises(AssertionError):
|
with self.assertRaises(AssertionError):
|
||||||
list(self.partner.resolve_o2m_commands_to_record_dicts(
|
self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', [FORGET(42)], ['name']))
|
self.cr, UID, 'address', [FORGET(42)], ['name'])
|
||||||
|
|
||||||
with self.assertRaises(AssertionError):
|
with self.assertRaises(AssertionError):
|
||||||
list(self.partner.resolve_o2m_commands_to_record_dicts(
|
self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', [DELETE_ALL()], ['name']))
|
self.cr, UID, 'address', [DELETE_ALL()], ['name'])
|
||||||
|
|
||||||
with self.assertRaises(AssertionError):
|
with self.assertRaises(AssertionError):
|
||||||
list(self.partner.resolve_o2m_commands_to_record_dicts(
|
self.partner.resolve_o2m_commands_to_record_dicts(
|
||||||
self.cr, UID, 'address', [REPLACE_WITH([42])], ['name']))
|
self.cr, UID, 'address', [REPLACE_WITH([42])], ['name'])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue