[MERGE] OPW 572488: report sxw/odt: fix inconsistent duplicate content/meta/style...
authorXavier ALT <xal@openerp.com>
Wed, 2 Jan 2013 15:29:25 +0000 (16:29 +0100)
committerXavier ALT <xal@openerp.com>
Wed, 2 Jan 2013 15:29:25 +0000 (16:29 +0100)
bzr revid: xal@openerp.com-20130102152925-h81qv2fx300oakzv

1  2 
bin/report/report_sxw.py

@@@ -584,10 -586,9 +584,8 @@@ class report_sxw(report_rml, preprocess
          create_doc = self.generators[mime_type]
          odt = etree.tostring(create_doc(rml_dom, rml_parser.localcontext),
                               encoding='utf-8', xml_declaration=True)
-         sxw_z = zipfile.ZipFile(sxw_io, mode='a')
-         sxw_z.writestr('content.xml', odt)
-         sxw_z.writestr('meta.xml', meta)
 -        
+         sxw_contents = {'content.xml':odt, 'meta.xml':meta}
 -        
 +
          if report_xml.header:
              #Add corporate header/footer
              rml_file = tools.file_open(os.path.join('base', 'report', 'corporate_%s_header.xml' % report_type))
                      rml_parser._add_header(odt)
                  odt = etree.tostring(odt, encoding='utf-8',
                                       xml_declaration=True)
-                 sxw_z.writestr('styles.xml', odt)
+                 sxw_contents['styles.xml'] = odt
              finally:
                  rml_file.close()
-         sxw_z.close()
-         final_op = sxw_io.getvalue()
 -                
++
+         #created empty zip writing sxw contents to avoid duplication
+         sxw_out = StringIO.StringIO()
 -        sxw_z = zipfile.ZipFile(sxw_out, mode='w')
 -        
 -        zin = zipfile.ZipFile (sxw_io, 'r')
 -        for item in zin.infolist():
 -            if item.filename not in sxw_contents.keys():
 -                buffer = zin.read(item.filename)
 -                sxw_z.writestr(item.filename, buffer)
 -        for item, buffer in sxw_contents.iteritems():
 -            sxw_z.writestr(item, buffer)
 -            
 -        sxw_z.close()
++        sxw_out_zip = zipfile.ZipFile(sxw_out, mode='w')
++        sxw_template_zip = zipfile.ZipFile (sxw_io, 'r')
++        for item in sxw_template_zip.infolist():
++            if item.filename not in sxw_contents:
++                buffer = sxw_template_zip.read(item.filename)
++                sxw_out_zip.writestr(item.filename, buffer)
++        for item_filename, buffer in sxw_contents.iteritems():
++            sxw_out_zip.writestr(item_filename, buffer)
++        sxw_template_zip.close()
++        sxw_out_zip.close()
+         final_op = sxw_out.getvalue()
          sxw_io.close()
++        sxw_out.close()
          return (final_op, mime_type)
  
      def create_single_html2html(self, cr, uid, ids, data, report_xml, context=None):