[ADD] model-less fields & views munging thing

bzr revid: xmo@openerp.com-20130425093739-v0kya956yzcy5wp3
This commit is contained in:
Xavier Morel 2013-04-25 11:37:39 +02:00
parent 4923d1b82d
commit e30b6edb41
2 changed files with 82 additions and 12 deletions

View File

@ -560,7 +560,7 @@ class view(osv.osv):
children = True
modifiers = {}
Model = self.pool[model]
Model = self.pool.get(model)
def encode(s):
if isinstance(s, unicode):
@ -577,19 +577,17 @@ class view(osv.osv):
:return: True if field should be included in the result of fields_view_get
"""
if node.tag == 'field' and node.get('name') in Model._all_columns:
if Model and node.tag == 'field' and node.get('name') in Model._all_columns:
column = Model._all_columns[node.get('name')].column
if column.groups and not self.user_has_groups(cr, user,
groups=column.groups,
context=context):
if column.groups and not self.user_has_groups(
cr, user, groups=column.groups, context=context):
node.getparent().remove(node)
fields.pop(node.get('name'), None)
# no point processing view-level ``groups`` anymore, return
return False
if node.get('groups'):
can_see = self.user_has_groups(cr, user,
groups=node.get('groups'),
context=context)
can_see = self.user_has_groups(
cr, user, groups=node.get('groups'), context=context)
if not can_see:
node.set('invisible', '1')
modifiers['invisible'] = True
@ -728,7 +726,7 @@ class view(osv.osv):
def _disable_workflow_buttons(self, cr, user, model, node):
""" Set the buttons in node to readonly if the user can't activate them. """
if user == 1:
if model is None or user == 1:
# admin user can always activate workflow buttons
return node
@ -763,7 +761,8 @@ class view(osv.osv):
"""
fields = {}
Model = self.pool[model]
Model = self.pool.get(model)
if node.tag == 'diagram':
if node.getchildren()[0].tag == 'node':
node_model = self.pool[node.getchildren()[0].get('object')]
@ -774,8 +773,9 @@ class view(osv.osv):
if node.getchildren()[1].tag == 'arrow':
arrow_fields = self.pool[node.getchildren()[1].get('object')].fields_get(cr, user, None, context)
fields.update(arrow_fields)
else:
elif Model:
fields = Model.fields_get(cr, user, None, context)
fields_def = self.__view_look_dom(cr, user, model, node, view_id, False, fields, context=context)
node = self._disable_workflow_buttons(cr, user, model, node)
if node.tag in ('kanban', 'tree', 'form', 'gantt'):

View File

@ -1,5 +1,6 @@
# -*- encoding: utf-8 -*-
from lxml import etree as ET
from lxml.builder import E
from lxml.builder import E, ElementMaker
from openerp.tests import common
import unittest2
@ -220,3 +221,72 @@ class TestViewCombined(common.TransactionCase):
* defaults mapping
* ?
"""
class TestNoModel(common.TransactionCase):
def test_create_view_nomodel(self):
View = self.registry('ir.ui.view')
view_id = View.create(self.cr, self.uid, {
'name': 'dummy',
'arch': '<form/>',
'inherit_id': False
})
[view] = View.read(self.cr, self.uid, [view_id])
self.assertEqual(view, {
'id': view_id,
'name': 'dummy',
'arch': '<form/>',
'type': 'form',
'priority': 16,
'inherit_id': False,
'field_parent': False,
'groups_id': [],
'xml_id': '',
'model_ids': [],
'model': '',
})
arch = E.body(
E.div(
E.h1("Title"),
id="header"),
E.p("Welcome!"),
E.div(
E.hr(),
E.p("Copyright copyrighter", {'class': 'legalese'}),
id="footer"),
{'class': "index"},)
def test_fields_mess(self):
"""
Try to call __view_look_dom_arch without a model provided, will need
to be altered once it's broken up into sane components
"""
View = self.registry('ir.ui.view')
sarch, fields = View._view__view_look_dom_arch(
self.cr, self.uid, None, self.arch, None)
self.assertEqual(sarch, ET.tostring(self.arch, encoding='utf-8'))
self.assertEqual(fields, {})
def test_mess_translation(self):
"""
Test if translations work correctly without a model
"""
View = self.registry('ir.ui.view')
self.registry('res.lang').load_lang(self.cr, self.uid, 'fr_FR')
self.registry('ir.translation').create(self.cr, self.uid, {
'name': '',
'type': 'view',
'lang': 'fr_FR',
'src': 'Copyright copyrighter',
'value': u"Copyrighter, tous droits réservés",
})
sarch, fields = View._view__view_look_dom_arch(
self.cr, self.uid, None,self.arch, None, {'lang': 'fr_FR'})
self.assertEqual(
sarch,
ET.tostring(self.arch, encoding='utf-8')
.replace('Copyright copyrighter',
'Copyrighter, tous droits réservés'))
self.assertEqual(fields, {})