[REV] Last merge by AL breaks tests
authorOlivier Dony <odo@openerp.com>
Mon, 13 Feb 2012 08:42:42 +0000 (09:42 +0100)
committerOlivier Dony <odo@openerp.com>
Mon, 13 Feb 2012 08:42:42 +0000 (09:42 +0100)
bzr revid: odo@openerp.com-20120213084242-wn07hua23owewgvm

addons/report_webkit/company.py
addons/report_webkit/company_view.xml
addons/report_webkit/webkit_report.py

index 8be9b40..eaf3c02 100644 (file)
@@ -50,6 +50,12 @@ class ResCompany(osv.osv):
                                                     'html_id',
                                                     'Available html',
                                                 ),
+                'lib_path' : fields.char('Webkit Executable Path', size=264,
+                                         help="Full path to the wkhtmltopdf executable file. "
+                                              "Version 0.9.9 is required. Install a static version "
+                                              "of the library if you experience missing header/footers "
+                                              "on Linux."),
+
     }
 ResCompany()
 
index bf4c13d..04c2103 100644 (file)
@@ -8,6 +8,7 @@
             <field name="arch" type="xml">
                 <notebook position="inside">
                     <page string="Webkit">
+                        <field name="lib_path" colspan="4"/>
                         <separator string="Images" colspan="4"/>
                         <field name="header_image" colspan="4" nolabel="1"/>
                         <separator string="Headers" colspan="4"/>
index 304fc8f..d3057e5 100644 (file)
@@ -36,7 +36,6 @@ import report
 import tempfile
 import time
 import logging
-import sys
 
 from mako.template import Template
 from mako.lookup import TemplateLookup
@@ -72,33 +71,35 @@ class WebKitParser(report_sxw):
         report_sxw.__init__(self, name, table, rml, parser,
             header, store)
 
-    def get_lib(self, cursor, uid):
+    def get_lib(self, cursor, uid, company) :
         """Return the lib wkhtml path"""
-
-        proxy = self.pool.get('ir.config_parameter')
-        webkit_path = proxy.get_param(cursor, uid, 'webkit_path')
-
-        if not webkit_path:
-            try:
-                defpath = os.environ.get('PATH', os.defpath).split(os.pathsep)
-                if hasattr(sys, 'frozen'):
-                    defpath.append(os.getcwd())
-                webkit_path = tools.which('wkhtmltopdf', path=os.pathsep.join(defpath))
-            except IOError:
-                webkit_path = None
-
-        if webkit_path:
-            return webkit_path
-
-        raise except_osv(
-                         _('Wkhtmltopdf library path is not set'),
-                         _('Please install executable on your system' \
-                         ' (sudo apt-get install wkhtmltopdf) or download it from here:' \
-                         ' http://code.google.com/p/wkhtmltopdf/downloads/list and set the' \
-                         ' path in the ir.config_parameter with the webkit_path key.' \
-                         'Minimal version is 0.9.9')
-                        )
-
+        #TODO Detect lib in system first
+        path = self.pool.get('res.company').read(cursor, uid, company, ['lib_path',])
+        path = path['lib_path']
+        if not path:
+            raise except_osv(
+                             _('Wkhtmltopdf library path is not set in company'),
+                             _('Please install executable on your system'+
+                             ' (sudo apt-get install wkhtmltopdf) or download it from here:'+
+                             ' http://code.google.com/p/wkhtmltopdf/downloads/list and set the'+
+                             ' path to the executable on the Company form.'+
+                             'Minimal version is 0.9.9')
+                            )
+        if os.path.isabs(path) :
+            if (os.path.exists(path) and os.access(path, os.X_OK)\
+                and os.path.basename(path).startswith('wkhtmltopdf')):
+                return path
+            else:
+                raise except_osv(
+                                _('Wrong Wkhtmltopdf path set in company'+
+                                'Given path is not executable or path is wrong'),
+                                'for path %s'%(path)
+                                )
+        else :
+            raise except_osv(
+                            _('path to Wkhtmltopdf is not absolute'),
+                            'for path %s'%(path)
+                            )
     def generate_pdf(self, comm_path, report_xml, header, footer, html_list, webkit_header=False):
         """Call webkit in order to generate pdf"""
         if not webkit_header:
@@ -294,8 +295,8 @@ class WebKitParser(report_sxw):
                 logger.error(msg)
                 raise except_osv(_('Webkit render'), msg)
             return (deb, 'html')
-        webkit_bin = self.get_lib(cursor, uid)
-        pdf = self.generate_pdf(webkit_bin, report_xml, head, foot, htmls)
+        bin = self.get_lib(cursor, uid, company.id)
+        pdf = self.generate_pdf(bin, report_xml, head, foot, htmls)
         return (pdf, 'pdf')