[FIX] ir.ui.view:render() can render view by xmlid/path
bzr revid: chs@openerp.com-20130627142506-gdmre0jj36v5inc0
This commit is contained in:
parent
0982851153
commit
4efebc6fd0
|
@ -19,9 +19,11 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import copy
|
import copy
|
||||||
|
from functools import partial
|
||||||
import itertools
|
import itertools
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
@ -33,7 +35,7 @@ from openerp.tools import graph, SKIPPED_ELEMENT_TYPES
|
||||||
from openerp.tools.safe_eval import safe_eval as eval
|
from openerp.tools.safe_eval import safe_eval as eval
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.tools.view_validation import valid_view
|
from openerp.tools.view_validation import valid_view
|
||||||
from openerp.tools import misc
|
from openerp.tools import misc, qweb
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -829,14 +831,46 @@ class view(osv.osv):
|
||||||
raise orm.except_orm('View error', msg)
|
raise orm.except_orm('View error', msg)
|
||||||
return arch, fields
|
return arch, fields
|
||||||
|
|
||||||
|
def _get_arch(self, cr, uid, id_, context=None):
|
||||||
|
from pprint import pprint as pp
|
||||||
|
pp(id_)
|
||||||
|
try:
|
||||||
|
id_ = int(id_)
|
||||||
|
except ValueError:
|
||||||
|
if '/' not in id_ and '.' not in id_:
|
||||||
|
raise ValueError('Invalid id: %r' % (id_,))
|
||||||
|
s = id_.find('/')
|
||||||
|
s = s if s >= 0 else sys.maxint
|
||||||
|
d = id_.find('.')
|
||||||
|
d = d if d >= 0 else sys.maxint
|
||||||
|
|
||||||
|
if d < s:
|
||||||
|
# xml id
|
||||||
|
IMD = self.pool['ir.model.data']
|
||||||
|
m, _, n = id_.partition('.')
|
||||||
|
_, id_ = IMD.get_object_reference(cr, uid, m, n)
|
||||||
|
else:
|
||||||
|
# path id => read directly on disk
|
||||||
|
# TODO apply inheritence
|
||||||
|
try:
|
||||||
|
with misc.file_open(id_) as f:
|
||||||
|
return f.read().decode('utf-8')
|
||||||
|
except Exception:
|
||||||
|
raise ValueError('Invalid id: %r' % (id_,))
|
||||||
|
|
||||||
|
pp(id_)
|
||||||
|
r = self.read_combined(cr, uid, id_, fields=['arch'], view_type=None, model=None, context=context)
|
||||||
|
pp(r)
|
||||||
|
return r['arch']
|
||||||
|
|
||||||
def render(self, cr, uid, id_or_xml_id, values, context=None):
|
def render(self, cr, uid, id_or_xml_id, values, context=None):
|
||||||
def loader(name):
|
def loader(name):
|
||||||
xml = self.read_combined(self, cr, uid, id_or_xml_id, context=context)
|
arch = self._get_arch(cr, uid, name, context=context)
|
||||||
# parse arch
|
# parse arch
|
||||||
# on the root tag of arch add the attribute t-name="<name>"
|
# on the root tag of arch add the attribute t-name="<name>"
|
||||||
return xml['arch']
|
arch = u'<?xml version="1.0" encoding="utf-8"?><tpl><t t-name="{0}">{1}</t></tpl>'.format(name, arch)
|
||||||
|
return arch
|
||||||
engine = openerp.tools.qweb.QWebXml(loader)
|
engine = qweb.QWebXml(loader)
|
||||||
return engine.render(id_or_xml_id, values)
|
return engine.render(id_or_xml_id, values)
|
||||||
|
|
||||||
class view_sc(osv.osv):
|
class view_sc(osv.osv):
|
||||||
|
|
Loading…
Reference in New Issue