[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 children = True
modifiers = {} modifiers = {}
Model = self.pool[model] Model = self.pool.get(model)
def encode(s): def encode(s):
if isinstance(s, unicode): 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 :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 column = Model._all_columns[node.get('name')].column
if column.groups and not self.user_has_groups(cr, user, if column.groups and not self.user_has_groups(
groups=column.groups, cr, user, groups=column.groups, context=context):
context=context):
node.getparent().remove(node) node.getparent().remove(node)
fields.pop(node.get('name'), None) fields.pop(node.get('name'), None)
# no point processing view-level ``groups`` anymore, return # no point processing view-level ``groups`` anymore, return
return False return False
if node.get('groups'): if node.get('groups'):
can_see = self.user_has_groups(cr, user, can_see = self.user_has_groups(
groups=node.get('groups'), cr, user, groups=node.get('groups'), context=context)
context=context)
if not can_see: if not can_see:
node.set('invisible', '1') node.set('invisible', '1')
modifiers['invisible'] = True modifiers['invisible'] = True
@ -728,7 +726,7 @@ class view(osv.osv):
def _disable_workflow_buttons(self, cr, user, model, node): def _disable_workflow_buttons(self, cr, user, model, node):
""" Set the buttons in node to readonly if the user can't activate them. """ """ 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 # admin user can always activate workflow buttons
return node return node
@ -763,7 +761,8 @@ class view(osv.osv):
""" """
fields = {} fields = {}
Model = self.pool[model] Model = self.pool.get(model)
if node.tag == 'diagram': if node.tag == 'diagram':
if node.getchildren()[0].tag == 'node': if node.getchildren()[0].tag == 'node':
node_model = self.pool[node.getchildren()[0].get('object')] node_model = self.pool[node.getchildren()[0].get('object')]
@ -774,8 +773,9 @@ class view(osv.osv):
if node.getchildren()[1].tag == 'arrow': if node.getchildren()[1].tag == 'arrow':
arrow_fields = self.pool[node.getchildren()[1].get('object')].fields_get(cr, user, None, context) arrow_fields = self.pool[node.getchildren()[1].get('object')].fields_get(cr, user, None, context)
fields.update(arrow_fields) fields.update(arrow_fields)
else: elif Model:
fields = Model.fields_get(cr, user, None, context) fields = Model.fields_get(cr, user, None, context)
fields_def = self.__view_look_dom(cr, user, model, node, view_id, False, fields, context=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) node = self._disable_workflow_buttons(cr, user, model, node)
if node.tag in ('kanban', 'tree', 'form', 'gantt'): 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 import etree as ET
from lxml.builder import E from lxml.builder import E, ElementMaker
from openerp.tests import common from openerp.tests import common
import unittest2 import unittest2
@ -220,3 +221,72 @@ class TestViewCombined(common.TransactionCase):
* defaults mapping * 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, {})