[Erp5-report] r41555 hugo.maia - in /erp5/trunk/utils/cloudooo/cloudooo: ./ granulate/ inte...
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Dec 20 19:52:45 CET 2010
Author: hugo.maia
Date: Mon Dec 20 19:52:45 2010
New Revision: 41555
URL: http://svn.erp5.org?rev=41555&view=rev
Log:
Add getTableItem
Added:
erp5/trunk/utils/cloudooo/cloudooo/granulate/template.odt (with props)
Modified:
erp5/trunk/utils/cloudooo/cloudooo/CHANGES.txt
erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py
erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py
erp5/trunk/utils/cloudooo/cloudooo/tests/testInterface.py
erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py
Modified: erp5/trunk/utils/cloudooo/cloudooo/CHANGES.txt
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/CHANGES.txt?rev=41555&r1=41554&r2=41555&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/CHANGES.txt [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/CHANGES.txt [utf8] Mon Dec 20 19:52:45 2010
@@ -1,6 +1,6 @@
1.0.10 (unreleased)
===================
- - Add getTableItemList for OOGranulate
+ - Add getTableItem and getTableItemList for OOGranulate
- Add getParagraphItemList and getParagraphItem for OOGranulate
- Add getImageItemList and getImage for OOGranulate
- Add OdfDocument
Modified: erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py?rev=41555&r1=41554&r2=41555&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py [utf8] Mon Dec 20 19:52:45 2010
@@ -27,6 +27,10 @@
##############################################################################
from zope.interface import implements
+from zipfile import ZipFile
+from StringIO import StringIO
+from lxml import etree
+from os import path
from cloudooo.document import OdfDocument
from cloudooo.interfaces.granulate import ITableGranulator, \
IImageGranulator, \
@@ -42,6 +46,19 @@ class OOGranulate(object):
def __init__(self, file, source_format):
self.document = OdfDocument(file, source_format)
+ def _odfWithoutContentXml(self, format='odt'):
+ """Returns an odf document without content.xml
+ It is a way to escape from this issue: http://bugs.python.org/issue6818"""
+ new_odf_document = ZipFile(StringIO(), 'a')
+ template_path = path.join(path.dirname(__file__), 'template.%s' % format)
+ template_file = ZipFile(template_path)
+ for item in template_file.filelist:
+ buffer = template_file.read(item.filename)
+ if item.filename != 'content.xml':
+ new_odf_document.writestr(item.filename, buffer)
+ template_file.close()
+ return new_odf_document
+
def getTableItemList(self):
"""Returns the list of table IDs in the form of (id, title)."""
xml_table_list = self.document.parsed_content.xpath('.//table:table',
@@ -56,6 +73,33 @@ class OOGranulate(object):
table_list.append((id, title))
return table_list
+ def getTableItem(self, id, format='odt'):
+ """Returns the table into a new 'format' file."""
+ try:
+ template_path = path.join(path.dirname(__file__), 'template.%s' % format)
+ template = ZipFile(template_path)
+ content_xml = etree.fromstring(template.read('content.xml'))
+ template.close()
+ table = self.document.parsed_content.xpath(
+ '//table:table[@table:name="%s"]' % id,
+ namespaces=self.document.parsed_content.nsmap)[0]
+ # Next line do this <office:content><office:body><office:text><table:table>
+ content_xml[-1][0].append(table)
+ # XXX: Next line replace the <office:automatic-styles> tag. This include a
+ # lot of unused style tags. Will be better detect the used styles and
+ # include only those.
+ content_xml.replace(content_xml[-2],
+ self.document.parsed_content[-2])
+
+ odf_document = self._odfWithoutContentXml(format)
+ odf_document.writestr('content.xml', etree.tostring(content_xml))
+ odf_document_as_string = odf_document.fp
+ odf_document.close()
+ odf_document_as_string.seek(0)
+ return odf_document_as_string.read()
+ except:
+ return None
+
def getColumnItemList(self, file, table_id):
"""Return the list of columns in the form of (id, title)."""
raise NotImplementedError
Added: erp5/trunk/utils/cloudooo/cloudooo/granulate/template.odt
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/granulate/template.odt?rev=41555&view=auto
==============================================================================
Binary file - no diff available.
Propchange: erp5/trunk/utils/cloudooo/cloudooo/granulate/template.odt
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Modified: erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py?rev=41555&r1=41554&r2=41555&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py [utf8] Mon Dec 20 19:52:45 2010
@@ -35,6 +35,9 @@ class ITableGranulator(Interface):
def getTableItemList():
"""Returns the list of table IDs in the form of (id, title)."""
+ def getTableItem(id, format):
+ """Returns the table into a new 'format' file."""
+
def getColumnItemList(file, table_id):
"""Return the list of columns in the form of (id, title)."""
Modified: erp5/trunk/utils/cloudooo/cloudooo/tests/testInterface.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/tests/testInterface.py?rev=41555&r1=41554&r2=41555&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/tests/testInterface.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/tests/testInterface.py [utf8] Mon Dec 20 19:52:45 2010
@@ -56,7 +56,10 @@ class TestInterface(unittest.TestCase):
def testITableGranulator(self):
"""Test if OOGranulate implements ITableGranulator"""
self.assertEquals(ITableGranulator.implementedBy(OOGranulate), True)
- method_list = ['getColumnItemList', 'getLineItemList', 'getTableItemList']
+ method_list = ['getTableItem',
+ 'getLineItemList',
+ 'getColumnItemList',
+ 'getTableItemList']
self.assertEquals(ITableGranulator.names(), method_list)
def testITextGranulator(self):
@@ -84,7 +87,7 @@ class TestInterface(unittest.TestCase):
method_list = ['getContentXml',
'parsed_content',
'source_format',
- 'getFile',]
+ 'getFile']
self.assertEquals(IOdfDocument.names(), method_list)
def testIFilter(self):
Modified: erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py?rev=41555&r1=41554&r2=41555&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py [utf8] Mon Dec 20 19:52:45 2010
@@ -30,6 +30,7 @@
import unittest
from zipfile import ZipFile
from StringIO import StringIO
+from lxml import etree
from cloudoooTestCase import cloudoooTestCase, make_suite
from cloudooo.granulate.oogranulate import OOGranulate
@@ -40,6 +41,18 @@ class TestOOGranulate(cloudoooTestCase):
data = open('./data/granulate_test.odt').read()
self.oogranulate = OOGranulate(data, 'odt')
+ def testOdfWithoutContentXml(self):
+ """Test if _odfWithoutContentXml() return a ZipFile instance without the
+ content.xml file"""
+ odf_without_content_xml = self.oogranulate._odfWithoutContentXml('odt')
+ self.assertTrue(isinstance(odf_without_content_xml, ZipFile))
+ complete_name_list = []
+ for item in self.oogranulate.document._zipfile.filelist:
+ complete_name_list.append(item.filename)
+ for item in odf_without_content_xml.filelist:
+ self.assertTrue(item.filename in complete_name_list)
+ self.assertTrue(item.filename != 'content.xml')
+
def testgetTableItemList(self):
"""Test if getTableItemList() returns the right tables list"""
data = open('./data/granulate_table_test.odt').read()
@@ -49,6 +62,27 @@ class TestOOGranulate(cloudoooTestCase):
('SoccerTeams', 'Tabela 2: Soccer Teams')]
self.assertEquals(table_list, oogranulate.getTableItemList())
+ def testGetTableItem(self):
+ """Test if getTableItem() returns on odf file with the right table"""
+ data = open('./data/granulate_table_test.odt').read()
+ oogranulate = OOGranulate(data, 'odt')
+ table_data_doc = oogranulate.getTableItem('Developers')
+ content_xml_str = ZipFile(StringIO(table_data_doc)).read('content.xml')
+ content_xml = etree.fromstring(content_xml_str)
+ table_list = content_xml.xpath('//table:table',
+ namespaces=content_xml.nsmap)
+ self.assertEquals(1, len(table_list))
+ table = table_list[0]
+ name_key = '{urn:oasis:names:tc:opendocument:xmlns:table:1.0}name'
+ self.assertEquals('Developers', table.attrib[name_key])
+
+ def testGetTableItemWithoutSuccess(self):
+ """Test if getTableItem() returns None for an non existent table name"""
+ data = open('./data/granulate_table_test.odt').read()
+ oogranulate = OOGranulate(data, 'odt')
+ table_data = oogranulate.getTableItem('NonExistentTable')
+ self.assertEquals(table_data, None)
+
def testGetColumnItemList(self):
"""Test if getColumnItemList() returns the right table columns list"""
self.assertRaises(NotImplementedError, self.oogranulate.getColumnItemList,
More information about the Erp5-report
mailing list