root/Zope2/PortalTransforms/trunk/transforms/rtf_to_xml.py

Revision 19076, 1.6 kB (checked in by sfermigier, 6 years ago)

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 """
2 Uses the http://sf.net/projects/rtf2xml bin to do its handy work
3
4 """
5 from Products.PortalTransforms.interfaces import itransform
6 from Products.PortalTransforms.libtransforms.utils import bin_search, basename, sansext
7 from Products.PortalTransforms.libtransforms.commandtransform import commandtransform
8 from os import system
9
10 class rtf_to_xml(commandtransform):
11     __implements__ = itransform
12
13     __name__ = "rtf_to_xml"
14     inputs   = ('application/rtf',)
15     output  = 'text/xml'
16
17     binaryName = "rtf2xml"
18
19     def __init__(self):
20         commandtransform.__init__(self, binary=self.binaryName)
21
22     def convert(self, data, cache, **kwargs):
23         kwargs['filename'] = basename((kwargs.get('filename') or 'unknown.rtf'))
24
25         tmpdir, fullname = self.initialize_tmpdir(data, **kwargs)
26         xml = self.invokeCommand(tmpdir, fullname)
27         path, images = self.subObjects(tmpdir)
28         objects = {}
29         if images:
30             self.fixImages(path, images, objects)
31         self.cleanDir(tmpdir)
32         cache.setData(xml)
33         cache.setSubObjects(objects)
34         return cache
35
36     def invokeCommand(self, tmpdir, fullname):
37         # FIXME: windows users...
38         xmlfile = "%s/%s.xml" % (tmpdir, sansext(fullname))
39         cmd = 'cd "%s" && %s -o %s "%s" 2>error_log 1>/dev/null' % (
40             tmpdir, self.binary, xmlfile, fullname)
41         system(cmd)
42         try:
43             xml = open(xmlfile).read()
44         except:
45             try:
46                 return open("%s/error_log" % tmpdir, 'r').read()
47             except:
48                 return ''
49         return xml
50
51 def register():
52     return rtf_to_xml()
Note: See TracBrowser for help on using the browser.