[Erp5-report] r41090 hugo.maia - in /erp5/trunk/utils/cloudooo/cloudooo: ./ granulate/ inte...
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Dec 3 14:15:17 CET 2010
Author: hugo.maia
Date: Fri Dec 3 14:15:16 2010
New Revision: 41090
URL: http://svn.erp5.org?rev=41090&view=rev
Log:
Implement getImageItemList
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/data/granulate_test.odt
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=41090&r1=41089&r2=41090&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/CHANGES.txt [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/CHANGES.txt [utf8] Fri Dec 3 14:15:16 2010
@@ -1,5 +1,6 @@
1.0.10 (unreleased)
===================
+ - Add getImageItemList for OOGranulate
- Add OdfDocument
- Add granulate interface.
@@ -20,4 +21,3 @@
=====
- Remove entry points, treat those as ordinary files.
- Search all script files using pkg_resources.
-
Modified: erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py?rev=41090&r1=41089&r2=41090&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/granulate/oogranulate.py [utf8] Fri Dec 3 14:15:16 2010
@@ -27,6 +27,7 @@
##############################################################################
from zope.interface import implements
+from cloudooo.document import OdfDocument
from cloudooo.interfaces.granulate import ITableGranulator, \
IImageGranulator, \
ITextGranulator
@@ -38,6 +39,36 @@ class OOGranulate(object):
implements(ITableGranulator, IImageGranulator, ITextGranulator)
+ def __init__(self, file, source_format):
+ self.document = OdfDocument(file, source_format)
+
+ def _getElementsByTagName(self, xml_element, tag):
+ """Returns a list with the xml elements of the given tag
+
+ tag -- tag name with the namespace (e.g. namespace:tag_name)"""
+ return xml_element.xpath('.//%s' % tag, namespaces=xml_element.nsmap)
+
+ def _hasAncestor(self, xml_element, required_ancestor):
+ """Verifies if xml_element have an ancestor tag at a maximum level.
+
+ required_ancestor -- tag name without the namespace"""
+ for ancestor in xml_element.iterancestors():
+ actual_ancestor = ancestor.tag.split('}')[-1]
+ if actual_ancestor == required_ancestor:
+ return True
+ return False
+
+ def _getImageTitle(self, xml_element):
+ """Returns, if exists, the title of the given xml image element"""
+ if self._hasAncestor(xml_element, 'text-box'):
+ draw_frame = xml_element.getparent()
+ text_p = draw_frame.getparent()
+ title = ''
+ for word in text_p.itertext():
+ title += word
+ return title
+ return ''
+
def getTableItemList(self, file):
"""Returns the list of table IDs in the form of (id, title)."""
raise NotImplementedError
@@ -50,9 +81,16 @@ class OOGranulate(object):
"""Returns the lines of a given table as (key, value) pairs."""
raise NotImplementedError
- def getImageItemList(self, file):
- """Return the list of images in the form of (id, title)."""
- raise NotImplementedError
+ def getImageItemList(self):
+ """Return a list of tuples with the id and title of image files"""
+ xml_images = self._getElementsByTagName(self.document.parsed_content,
+ 'draw:image')
+ image_list = []
+ for image in xml_images:
+ title = self._getImageTitle(image)
+ id = image.values()[0].split('/')[-1]
+ image_list.append((id, title))
+ return image_list
def getImage(self, file, image_id, format=None, resolution=None, **kw):
"""Return the given image."""
Modified: erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py?rev=41090&r1=41089&r2=41090&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/interfaces/granulate.py [utf8] Fri Dec 3 14:15:16 2010
@@ -45,10 +45,10 @@ class ITableGranulator(Interface):
class IImageGranulator(Interface):
"""Provides methods to granulate a document into images."""
- def getImageItemList(file):
+ def getImageItemList():
"""Return the list of images in the form of (id, title)."""
- def getImage(file, image_id, format=None, resolution=None, **kw):
+ def getImage(image_id, format=None, resolution=None, **kw):
"""Return the given image."""
Modified: erp5/trunk/utils/cloudooo/cloudooo/tests/data/granulate_test.odt
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/tests/data/granulate_test.odt?rev=41090&r1=41089&r2=41090&view=diff
==============================================================================
Binary files - no diff available.
Modified: erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py
URL: http://svn.erp5.org/erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py?rev=41090&r1=41089&r2=41090&view=diff
==============================================================================
--- erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py [utf8] (original)
+++ erp5/trunk/utils/cloudooo/cloudooo/tests/testOOGranulate.py [utf8] Fri Dec 3 14:15:16 2010
@@ -34,7 +34,33 @@ from cloudooo.granulate.oogranulate impo
class TestOOGranulate(cloudoooTestCase):
def setUp(self):
- self.oogranulate = OOGranulate()
+ data = open('./data/granulate_test.odt').read()
+ self.oogranulate = OOGranulate(data, 'odt')
+
+ def testGetElementsByTagName(self):
+ """Test if _getElementsByTagName() returns right elements list"""
+ elements = self.oogranulate._getElementsByTagName(
+ self.oogranulate.document.parsed_content,
+ 'draw:image')
+ self.assertEquals(len(elements), 5)
+ for element in elements:
+ self.assertTrue(element.tag.endswith('image'))
+
+ def testHasAncertor(self):
+ images = self.oogranulate._getElementsByTagName(
+ self.oogranulate.document.parsed_content,
+ 'draw:image')
+ self.assertFalse(self.oogranulate._hasAncestor(images[0], 'text-box'))
+ self.assertTrue(self.oogranulate._hasAncestor(images[0], 'frame'))
+ self.assertTrue(self.oogranulate._hasAncestor(images[2], 'text-box'))
+
+ def testGetImageTitle(self):
+ images = self.oogranulate._getElementsByTagName(
+ self.oogranulate.document.parsed_content,
+ 'draw:image')
+ self.assertEquals(self.oogranulate._getImageTitle(images[0]), '')
+ self.assertEquals(self.oogranulate._getImageTitle(images[2]),
+ 'Illustration 1: TioLive Logo')
def testgetTableItemList(self):
"""Test if getTableItemList() returns the right tables list"""
@@ -55,8 +81,16 @@ class TestOOGranulate(cloudoooTestCase):
def testGetImageItemList(self):
"""Test if getImageItemList() returns the right images list"""
- self.assertRaises(NotImplementedError, self.oogranulate.getImageItemList,
- 'file')
+ image_list = self.oogranulate.getImageItemList()
+ self.assertEquals([
+ ('10000000000000C80000009C38276C51.jpg', ''),
+ ('10000201000000C80000004E7B947D46.png', ''),
+ ('10000201000000C80000004E7B947D46.png', 'Illustration 1: TioLive Logo'),
+ # XXX The svg image are stored into odf as svm
+ ('2000004F00004233000013707E7DE37A.svm', 'Figure 1: Python Logo'),
+ ('10000201000000C80000004E7B947D46.png',
+ 'Illustration 2: Again TioLive Logo'),
+ ], image_list)
def testGetImage(self):
"""Test if getImage() returns the right image file"""
More information about the Erp5-report
mailing list