Use string for xxx2Many operator

This commit is contained in:
Cédric Krier committed 2008-03-25 11:29:26 +01:00
1 parent 47381db05c
commit c0c9fdb9e1
6 files changed
+54 -50

No files matched your search

+33 -29
View File
@@ -13,13 +13,13 @@
Relationals fields
Values: (0, 0, { fields }) create
(1, ID, { fields }) modification
(2, ID) remove (delete)
(3, ID) unlink one (target id or target of relation)
(4, ID) link
(5, ID) unlink all (only valid for one2many)
(6, ?, ids) set a list of links
Values: ('create', { fields }) create
('write', ID, { fields }) modification
('unlink', ID) remove (delete)
('remove', ID) unlink one (target id or target of relation)
('add', ID) link
('remove_all') unlink all
('set', ids) set a list of links
"""
import psycopg2
@@ -404,42 +404,44 @@ class One2Many(Column):
_table = obj.pool.get(self._obj)._table
obj = obj.pool.get(self._obj)
for act in values:
if act[0] == 0:
act[2][self._field] = obj_id
obj.create(cursor, user, act[2], context=context)
elif act[0] == 1:
if act[0] == 'create':
act[1][self._field] = obj_id
obj.create(cursor, user, act[1], context=context)
elif act[0] == 'write':
obj.write(cursor, user, [act[1]] , act[2], context=context)
elif act[0] == 2:
elif act[0] == 'unlink':
obj.unlink(cursor, user, [act[1]], context=context)
elif act[0] == 3:
elif act[0] == 'remove':
cursor.execute('UPDATE "' + _table + '" ' \
'SET "' + self._field + '" = NULL ' \
'WHERE id = %s', (act[1],))
elif act[0] == 4:
elif act[0] == 'add':
cursor.execute('UPDATE "' + _table + '" ' \
'SET "' + self._field + '" = %s ' \
'WHERE id = %s', (obj_id, act[1]))
elif act[0] == 5:
elif act[0] == 'remove_all':
cursor.execute('UPDATE "' + _table + '" ' \
'SET "' + self._field + '" = NULL ' \
'WHERE "' + self._field + '" = %s', (obj_id,))
elif act[0] == 6:
if not act[2]:
elif act[0] == 'set':
if not act[1]:
ids2 = [0]
else:
ids2 = act[2]
ids2 = act[1]
cursor.execute('UPDATE "' + _table + '" ' \
'SET "' + self._field + '" = NULL ' \
'WHERE "' + self._field + '" = %s ' \
'AND id not IN (' + \
','.join([str(x) for x in ids2]) + ')',
(obj_id,))
if act[2]:
if act[1]:
cursor.execute('UPDATE "' + _table + '" ' \
'SET "' + self._field + '" = %s ' \
'WHERE id IN (' + \
','.join([str(x) for x in act[2]]) + ')',
','.join([str(x) for x in act[1]]) + ')',
(obj_id,))
else:
raise Exception('Bad arguments')
one2many = One2Many
@@ -494,20 +496,20 @@ class Many2Many(Column):
return
obj = obj.pool.get(self._obj)
for act in values:
if act[0] == 0:
idnew = obj.create(cursor, user, act[2])
if act[0] == 'create':
idnew = obj.create(cursor, user, act[1])
cursor.execute('INSERT INTO "' + self._rel + '" ' \
'(' + self._id1 + ', ' + self._id2 + ') ' \
'VALUES (%s, %s)', (obj_id, idnew))
elif act[0] == 1:
elif act[0] == 'write':
obj.write(cursor, user, [act[1]] , act[2], context=context)
elif act[0] == 2:
elif act[0] == 'unlink':
obj.unlink(cursor, user, [act[1]], context=context)
elif act[0] == 3:
elif act[0] == 'remove':
cursor.execute('DELETE FROM "' + self._rel + '" ' \
'WHERE "' + self._id1 + '" = %s ' \
'AND "'+ self._id2 + '" = %s', (obj_id, act[1]))
elif act[0] == 4:
elif act[0] == 'add':
cursor.execute('SELECT * FROM "' + self._rel + '" ' \
'WHERE ' + self._id1 + ' = %s ' \
'AND ' + self._id2 + ' = %s ',
@@ -517,11 +519,11 @@ class Many2Many(Column):
cursor.execute('INSERT INTO "' + self._rel + '" ' \
'(' + self._id1 + ', ' + self._id2 + ') ' \
'VALUES (%s, %s)', (obj_id, act[1]))
elif act[0] == 5:
elif act[0] == 'remove_all':
cursor.execute('UPDATE "' + self._rel + '" ' \
'SET "' + self._id2 + '" = NULL ' \
'WHERE "' + self._id2 + '" = %s', (obj_id,))
elif act[0] == 6:
elif act[0] == 'set':
domain1, domain2 = obj.pool.get('ir.rule').domain_get(cursor,
user, obj._name)
if domain1:
@@ -536,10 +538,12 @@ class Many2Many(Column):
obj._table + '.id ' + domain1 + ')',
[obj_id, obj_id] + domain2)
for act_nbr in act[2]:
for act_nbr in act[1]:
cursor.execute('INSERT INTO "' + self._rel + '" ' \
'(' + self._id1 + ', ' + self._id2 + ') ' \
'VALUES (%s, %s)', (obj_id, act_nbr))
else:
raise Exception('Bad arguments')
many2many = Many2Many
+8 -8
View File
@@ -890,7 +890,7 @@ class ORM(object):
if res_id2:
res_id.append(res_id2)
if len(res_id):
res_id = [(6, 0, res_id)]
res_id = [('set', res_id)]
else:
if '.' in line[i]:
module, xml_id = line[i].rsplit('.', 1)
@@ -965,7 +965,7 @@ class ORM(object):
else:
res.append(res3)
if len(res):
res = [(6, 0, res)]
res = [('set', res)]
else:
res = line[i] or False
row[field[len(prefix)]] = res
@@ -985,7 +985,7 @@ class ORM(object):
warning = warning + warning2
reduce(lambda x, y: x and y, newrow)
row[field] = (reduce(lambda x, y: x or y, newrow.values()) and \
[(0,0,newrow)]) or []
[('create', newrow)]) or []
i = max2
while (position+i)<len(datas):
test = True
@@ -1002,7 +1002,7 @@ class ORM(object):
position + i)
warning = warning + warning2
if reduce(lambda x, y: x or y, newrow.values()):
row[field].append((0, 0, newrow))
row[field].append(('create', newrow))
i += max2
nbrmax = max(nbrmax, i)
@@ -2350,14 +2350,14 @@ class ORM(object):
res = []
rel = self.pool.get(fields2[field]['relation'])
for rel_id in data[field]:
# the lines are first duplicated using the wrong (old)
# the lines are first duplicated using the wrong (old)
# parent but then are reassigned to the correct one thanks
# to the (4, ...)
res.append((4, rel.copy(cursor, user, rel_id,
# to the ('add', ...)
res.append(('add', rel.copy(cursor, user, rel_id,
context=context)))
data[field] = res
elif ftype == 'many2many':
data[field] = [(6, 0, data[field])]
data[field] = [('set', data[field])]
del data['id']
for i in self._inherits:
del data[self._inherits[i]]
+1 -1
View File
@@ -5,7 +5,7 @@
<field name="name">Admin</field>
</record>
<record model="ir.ui.menu" id="ir.menu_administration">
<field name="groups" eval="[(6, 0, [ref('group_admin')])]"/>
<field name="groups" eval="[('add', ref('group_admin'))]"/>
</record>
<record model="ir.ui.view" id="group_view_form">
<field name="model">res.group</field>
+8 -8
View File
@@ -394,28 +394,28 @@
<field name="rule_group" ref="rule_group_action"/>
</record>
<record model="ir.action.wizard" id="ir.act_module_update_list">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.ui.menu" id="ir.menu_module_update_list">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.action.wizard" id="ir.act_module_install_upgrade">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.ui.menu" id="ir.menu_module_install_upgrade">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.action.wizard" id="ir.act_translation_update">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.ui.menu" id="ir.menu_translation_update">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.action.wizard" id="ir.act_translation_export">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.ui.menu" id="ir.menu_translation_export">
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
</record>
<record model="ir.ui.view" id="module_view_form">
<field name="model">ir.module.module</field>
+1 -1
View File
@@ -8,7 +8,7 @@
<field name="signature">Administrator</field>
<field name="action" ref="ir.act_module_config_wizard"/>
<field name="menu" ref="ir.act_menu_tree"/>
<field name="groups" eval="[(4, ref('group_admin'))]"/>
<field name="groups" eval="[('add', ref('group_admin'))]"/>
</record>
<record model="ir.ui.view" id="user_view_form">
<field name="model">res.user</field>
+3 -3
View File
@@ -106,10 +106,10 @@ class MenuitemTagHandler:
for group in g_names:
if group.startswith('-'):
group_id = self.mh.get_id(group[1:])
groups_value.append((3, group_id))
groups_value.append(('remove', group_id))
else:
group_id = self.mh.get_id(group)
groups_value.append((4, group_id))
groups_value.append(('add', group_id))
values['groups'] = groups_value
if not values.get('name'):
@@ -199,7 +199,7 @@ class RecordTagHandler:
if not answer: return
if self.model._columns[field_name]._type == 'many2many':
self.values[field_name] = [(6, 0, [x['id'] for x in answer])]
self.values[field_name] = [('set', [x['id'] for x in answer])]
elif self.model._columns[field_name]._type == 'many2one':
self.values[field_name] = answer[0]['id']