summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/report/custom.py25
-rw-r--r--bin/report/interface.py56
-rw-r--r--bin/report/printscreen/ps_form.py12
-rw-r--r--bin/report/printscreen/ps_list.py13
-rw-r--r--bin/tools/convert.py6
-rwxr-xr-xsetup.py2
6 files changed, 42 insertions, 72 deletions
diff --git a/bin/report/custom.py b/bin/report/custom.py
index 4c0c9b1ece0..0f770a8760a 100644
--- a/bin/report/custom.py
+++ b/bin/report/custom.py
@@ -34,11 +34,10 @@ from osv.orm import browse_null
from osv.orm import browse_record_list
import pooler
from xml.dom import minidom
-import libxml2
-import libxslt
from pychart import *
import misc
import cStringIO
+from lxml import etree
class external_pdf(render.render):
def __init__(self, pdf):
@@ -351,11 +350,11 @@ class report_custom(report_int):
new_doc.childNodes[0].appendChild(lines)
- styledoc = libxml2.parseFile(os.path.join(tools.config['root_path'],'addons/base/report/custom_new.xsl'))
- style = libxslt.parseStylesheetDoc(styledoc)
- doc = libxml2.parseDoc(new_doc.toxml())
- rml_obj = style.applyStylesheet(doc, None)
- rml = style.saveResultToString(rml_obj)
+ transform = etree.XSLT(
+ etree.parse(os.path.join(tools.config['root_path'],
+ 'addons/base/report/custom_new.xsl')))
+ rml = etree.tostring(
+ transform(etree.fromstring(new_doc.toxml())))
self.obj = render.rml(rml)
self.obj.render()
@@ -649,13 +648,11 @@ class report_custom(report_int):
new_doc.childNodes[0].appendChild(lines)
-# file('/tmp/terp.xml','w+').write(new_doc.toxml())
-
- styledoc = libxml2.parseFile(os.path.join(tools.config['root_path'],'addons/base/report/custom_new.xsl'))
- style = libxslt.parseStylesheetDoc(styledoc)
- doc = libxml2.parseDoc(new_doc.toxml())
- rml_obj = style.applyStylesheet(doc, None)
- rml = style.saveResultToString(rml_obj)
+ transform = etree.XSLT(
+ etree.parse(os.path.join(tools.config['root_path'],
+ 'addons/base/report/custom_new.xsl')))
+ rml = etree.tostring(
+ transform(etree.fromstring(new_doc.toxml())))
self.obj = render.rml(rml)
self.obj.render()
diff --git a/bin/report/interface.py b/bin/report/interface.py
index 09ea80720ac..e3804481e50 100644
--- a/bin/report/interface.py
+++ b/bin/report/interface.py
@@ -23,8 +23,6 @@
import os
import re
-import libxml2
-import libxslt
from lxml import etree
import netsvc
import pooler
@@ -145,48 +143,34 @@ class report_rml(report_int):
if not self.xsl:
return xml
- # load XSL (parse it to the XML level)
- styledoc = libxml2.parseDoc(tools.file_open(self.xsl).read())
- xsl_path, tail = os.path.split(self.xsl)
- for child in styledoc.children:
- if child.name == 'import':
- if child.hasProp('href'):
- imp_file = child.prop('href')
- _x, imp_file = tools.file_open(imp_file, subdir=xsl_path, pathinfo=True)
- child.setProp('href', urllib.quote(str(imp_file)))
+ stylesheet = etree.parse(tools.file_open(self.xsl))
+ xsl_path, _ = os.path.split(self.xsl)
+ for import_child in stylesheet.findall('./import'):
+ if 'href' in import_child.attrib:
+ imp_file = import_child.get('href')
+ _, imp_file = tools.file_open(imp_file, subdir=xsl_path, pathinfo=True)
+ import_child.set('href', urllib.quote(str(imp_file)))
#TODO: get all the translation in one query. That means we have to:
# * build a list of items to translate,
# * issue the query to translate them,
# * (re)build/update the stylesheet with the translated items
- # translate the XSL stylesheet
- def look_down(child, lang):
- while child is not None:
- if (child.type == "element") and child.hasProp('t'):
- #FIXME: use cursor
- res = service.execute(cr.dbname, uid, 'ir.translation',
- '_get_source', self.name2, 'xsl', lang, child.content)
- if res:
- child.setContent(res.encode('utf-8'))
- look_down(child.children, lang)
- child = child.next
+ def translate(doc, lang):
+ for node in doc.xpath('//*[@t]'):
+ translation = service.execute(
+ cr.dbname, uid, 'ir.translation', '_get_source',
+ self.name2, 'xsl', lang, node.text)
+ if translation:
+ node.text = translation
if context.get('lang', False):
- look_down(styledoc.children, context['lang'])
-
- # parse XSL
- style = libxslt.parseStylesheetDoc(styledoc)
- # load XML (data)
- doc = libxml2.parseMemory(xml,len(xml))
- # create RML (apply XSL to XML data)
- result = style.applyStylesheet(doc, None)
- # save result to string
- xml = style.saveResultToString(result)
-
- style.freeStylesheet()
- doc.freeDoc()
- result.freeDoc()
+ translate(stylesheet, context['lang'])
+
+ transform = etree.XSLT(stylesheet)
+ xml = etree.tostring(
+ transform(etree.fromstring(xml)))
+
return xml
def create_pdf(self, rml, localcontext = None, logo=None, title=None):
diff --git a/bin/report/printscreen/ps_form.py b/bin/report/printscreen/ps_form.py
index ac9c499dda3..be7b926de30 100644
--- a/bin/report/printscreen/ps_form.py
+++ b/bin/report/printscreen/ps_form.py
@@ -26,8 +26,6 @@ import tools
from report import render
from lxml import etree
-import libxml2
-import libxslt
import time, os
@@ -140,11 +138,11 @@ class report_printscreen_list(report_int):
lines.append(node_line)
new_doc.append(node_line)
- styledoc = libxml2.parseFile(os.path.join(tools.config['root_path'],'addons/base/report/custom_new.xsl'))
- style = libxslt.parseStylesheetDoc(styledoc)
- doc = libxml2.parseDoc(new_doc.toxml())
- rml_obj = style.applyStylesheet(doc, None)
- rml = style.saveResultToString(rml_obj)
+ transform = etree.XSLT(
+ etree.parse(os.path.join(tools.config['root_path'],
+ 'addons/base/report/custom_new.xsl')))
+ rml = etree.tostring(transform(new_doc))
+
self.obj = render.rml(rml, self.title)
self.obj.render()
return True
diff --git a/bin/report/printscreen/ps_list.py b/bin/report/printscreen/ps_list.py
index d2f946e6715..e20262a7897 100644
--- a/bin/report/printscreen/ps_list.py
+++ b/bin/report/printscreen/ps_list.py
@@ -25,8 +25,6 @@ import pooler
import tools
from lxml import etree
from report import render
-import libxml2
-import libxslt
import locale
import time, os
@@ -236,11 +234,12 @@ class report_printscreen_list(report_int):
lines.append(node_line)
new_doc.append(lines)
- styledoc = libxml2.parseFile(os.path.join(tools.config['root_path'],'addons/base/report/custom_new.xsl'))
- style = libxslt.parseStylesheetDoc(styledoc)
- doc = libxml2.parseDoc(etree.tostring(new_doc))
- rml_obj = style.applyStylesheet(doc, None)
- rml = style.saveResultToString(rml_obj)
+
+ transform = etree.XSLT(
+ etree.parse(os.path.join(tools.config['root_path'],
+ 'addons/base/report/custom_new.xsl')))
+ rml = etree.tostring(transform(new_doc))
+
self.obj = render.rml(rml, title=self.title)
self.obj.render()
return True
diff --git a/bin/tools/convert.py b/bin/tools/convert.py
index 9f8f2bc55c1..749867c3862 100644
--- a/bin/tools/convert.py
+++ b/bin/tools/convert.py
@@ -35,12 +35,6 @@ from config import config
import logging
import sys
-try:
- from lxml import etree
-except:
- sys.stderr.write("ERROR: pythonic binding for the libxml2 and libxslt libraries is missing\n")
- sys.stderr.write("ERROR: Try to install python-lxml package\n")
- sys.exit(2)
import pickle
diff --git a/setup.py b/setup.py
index f34a69bfb8b..c4b830c67a5 100755
--- a/setup.py
+++ b/setup.py
@@ -55,8 +55,6 @@ py_short_version = '%s.%s' % sys.version_info[:2]
required_modules = [
('psycopg2', 'PostgreSQL module'),
('xml', 'XML Tools for python'),
- ('libxml2', 'libxml2 python bindings'),
- ('libxslt', 'libxslt python bindings'),
('reportlab', 'reportlab module'),
('pychart', 'pychart module'),
('pydot', 'pydot module'),