src/cm/converters/oo_converters.py
author gibus
Thu, 21 Jul 2011 15:02:50 +0200
changeset 365 a478cb9786fd
parent 253 a844469257b0
child 366 98af3be91847
permissions -rw-r--r--
For some reasons, abiwords can read background style attribute but not background-color
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
# warning : oo server autolaunch is tricky
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
# make sure .qt .kde .openoffice.org2 should be writable in home directory
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
# for instance, if working user is www-data
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
#   mkdir /var/www/.openoffice.org2 ; chown www-data:www-data /var/www/.openoffice.org2
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
#   mkdir /var/www/.qt ; chown www-data:www-data /var/www/.qt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
#   mkdir /var/www/.kde ; chown www-data:www-data /var/www/.kde
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
51
321f4057eb78 enable oo
raph
parents: 24
diff changeset
     8
UNO_IMPORT = True
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
if UNO_IMPORT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
    import uno
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
# old ubuntu bug left for the record
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
#    print "#### Uno import failed ! #### "
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
#    print "#### https://bugs.launchpad.net/ubuntu/+source/openoffice.org2/+bug/139077 #### "
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
#    print "#### launch : sudo ldconfig -v /usr/lib/openoffice/program #### "
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
from cm.utils.thread import synchronized, daemonize
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
if UNO_IMPORT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    from com.sun.star.beans import PropertyValue
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
from datetime import datetime
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
from subprocess import Popen,call
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
from tempfile import mkstemp,mkdtemp
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
if UNO_IMPORT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
    from unohelper import systemPathToFileUrl, absolutize
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
from xml.dom.minidom import parseString
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
import cStringIO
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
import chardet
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
import sys
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
import magic
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
import os,re
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
import random
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
import threading
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
import time
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
import logging
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
CONN_STRING = "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
KILL = 'killall -KILL xvfb-run ; killall -KILL soffice; killall -KILL soffice.bin; killall -KILL Xvfb'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
RM = 'rm -f /tmp/.X99-lock'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
LAUNCH = 'xvfb-run soffice -headless "-accept=socket,port=2002;urp;"'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
# xvfb-run soffice -headless "-accept=socket,port=2002;urp;";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
#  soffice "-accept=socket,port=2002;urp;";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
ms = magic.open(magic.MAGIC_NONE)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
ms.load()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
def is_text(buffer):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
    type = ms.buffer(buffer)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
    return ' text, ' in type
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
def fix_text_encoding(buffer, to_encoding = 'utf-8'):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
    detected = chardet.detect(buffer)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
    encoding = detected['encoding']
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
    if encoding != to_encoding:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        return buffer.decode(encoding).encode(to_encoding)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
    return buffer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
# $$$ RBE TODO fix_content a call should be made before oo_convert call when importing text file with non utf-8 encoding todo test that to make it crash     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
def fix_content(buffer):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
    Fix content fixes :
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
    - encoding to utf8 to txt files
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        if is_text(buffer):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
            return fix_text_encoding(buffer)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        return buffer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
    except:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        return buffer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
processing = 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
# timeout : kill oo
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
PROCESSING_TIMEOUT = 20.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
def oo_process_controller(code):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
    If 'code' process is still active : kill oo 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
    global processing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
    logging.info('oo_process_controller')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
    if processing == code:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        logging.error('--> oo_process_controller : killing !')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        kill_oo()        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
def kill_oo():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
    logging.info('killing')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
    p = Popen(KILL, shell=True)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
    sts = os.waitpid(p.pid, 0)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
    p = Popen(RM, shell=True)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
    sts = os.waitpid(p.pid, 0)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
def launch_oo():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
    logging.info('launching')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
    p = Popen(LAUNCH, shell=True)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
def kill_and_relaunch_oo():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
    kill_oo()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
    launch_oo()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
get_connection_lock = threading.RLock() 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
def start_processing():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
    global processing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
    logging.info('start_processing')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
    code = random.random()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
    processing = code
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
    t = threading.Timer(PROCESSING_TIMEOUT, oo_process_controller, args = [code,])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
    t.start()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
def end_processing():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
    logging.info('end_processing')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
    global processing
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
    processing = 0 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
@synchronized(get_connection_lock)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
def get_connection(retry = 2):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    while retry > 0:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
            localContext = uno.getComponentContext()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
            resolver = localContext.ServiceManager.createInstanceWithContext(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
                            "com.sun.star.bridge.UnoUrlResolver", localContext )
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
            ctx = resolver.resolve(CONN_STRING)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
            return ctx
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
        except:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
            retry -= 1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
            kill_and_relaunch_oo()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
            time.sleep(8)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
    raise Exception('could not launch oo, please read README.txt section Openoffice for troubleshooting')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
def get_desktop():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
    ctx = get_connection()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
    smgr = ctx.ServiceManager    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
    # get the central desktop object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
    desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
    return desktop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
class FmtList:    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
    def __init__(self):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
        self._list = []
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
    def add(self, name, extension, summary, filter, export = False, mimetype = None):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
        dd = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
              'name' : name,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
              'extension' : extension,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
              'summary' : summary,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
              'filter' : filter,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
              'export' : export,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
              'mimetype' : mimetype,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
              }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
        self._list.append(dd)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
    def get_filter_by_summary(self, value):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
        return self.get_filter_by('summary', value)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
    def get_filter_by_name(self, value):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        return self.get_filter_by('name', value)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
    def get_filter_by(self, name, value):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
        res = self.get_by(name, value)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
        if res:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
            return res['filter']
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
        return None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
    def get_by_name(self, value):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        return self.get_by('name', value)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
    def get_by(self, name, value):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
        for fmt in self._list:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
            if fmt[name] == value:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
                return fmt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
        return None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
    def get_export_formats_tuple(self):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
        return [(f['summary'],f['name']) for f in self._list if f['export']]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
    def ids_by_summary(self):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
        return self.ids_by('summary')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
    def ids_by(self, name):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        return dict([(r[name],r['name']) for r in self._list])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
fmts = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
if UNO_IMPORT:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
    fmts = FmtList()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
    fmts.add('bib', 'bib', 'BibTeX', 'BibTeX_Writer')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
    fmts.add('doc', 'doc', 'Microsoft Word 97/2000/XP', 'MS Word 97', True, 'application/msword')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
    fmts.add('doc6', 'doc', 'Microsoft Word 6.0', 'MS WinWord 6.0')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
    fmts.add('doc95', 'doc', 'Microsoft Word 95', 'MS Word 95')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
    fmts.add('docbook', 'xml', 'DocBook', 'DocBook File')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
    fmts.add('html', 'html', 'HTML Document (OpenOffice.org Writer)', 'HTML (StarWriter)')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
    fmts.add('odt', 'odt', 'Open Document Text', 'writer8', True, 'application/vnd.oasis.opendocument.text')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
    fmts.add('ott', 'ott', 'Open Document Text', 'writer8_template')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
    fmts.add('ooxml', 'xml', 'Microsoft Office Open XML', 'MS Word 2003 XML')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
    fmts.add('pdb', 'pdb', 'AportisDoc (Palm)', 'AportisDoc Palm DB')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
    fmts.add('pdf', 'pdf', 'Portable Document Format', 'writer_pdf_Export', True, 'application/pdf')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
    fmts.add('psw', 'psw', 'Pocket Word', 'PocketWord File')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
    fmts.add('rtf', 'rtf', 'Rich Text Format', 'Rich Text Format', True, 'application/rtf')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
    fmts.add('latex', 'ltx', 'LaTeX 2e', 'LaTeX_Writer')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
    fmts.add('sdw', 'sdw', 'StarWriter 5.0', 'StarWriter 5.0')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
    fmts.add('sdw4', 'sdw', 'StarWriter 4.0', 'StarWriter 4.0')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
    fmts.add('sdw3', 'sdw', 'StarWriter 3.0', 'StarWriter 3.0')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
    fmts.add('stw', 'stw', 'Open Office.org 1.0 Text Document Template', 'writer_StarOffice_XML_Writer_Template')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
    fmts.add('sxw', 'sxw', 'Open Office.org 1.0 Text Document', 'StarOffice XML (Writer)')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
    fmts.add('text', 'txt', 'Text Encoded', 'Text (encoded)', True, 'application/txt')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
    fmts.add('txt', 'txt', 'Plain Text', 'Text')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
    fmts.add('vor', 'vor', 'StarWriter 5.0 Template', 'StarWriter 5.0 Vorlage/Template')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
    fmts.add('vor4', 'vor', 'StarWriter 4.0 Template', 'StarWriter 4.0 Vorlage/Template')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
    fmts.add('vor3', 'vor', 'StarWriter 3.0 Template', 'StarWriter 3.0 Vorlage/Template')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
    fmts.add('xhtml', 'html', 'XHTML Document', 'XHTML Writer File')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
THE_OUTDIR = "outdir"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
THE_OUTFILE = "outfile"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
THE_INDIR = "indir"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
THE_INFILE = "infile"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
def extract_css_body(xhtml):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
    dom = parseString(xhtml.encode('utf8'))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
    style = dom.getElementsByTagName("style")[0].toxml()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
    body = dom.getElementsByTagName("body")[0].toxml()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
    # cleanup initial/final tags
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
    style_clean = style[style.find('>')+1:style.rfind('</')]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
    body_clean = body[body.find('>')+1:body.rfind('</')]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
    return style_clean,body_clean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
convert_lock = threading.RLock() 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
def combine_css_body(body, css):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
    return """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
<html xmlns="http://www.w3.org/1999/xhtml">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
    <head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
        <style type="text/css">
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
            %s
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
        </style>    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
    </head>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
    <body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
        %s
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
    </body>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
</html>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
""" %(css,body)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
def to_string(input):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
    if type(input) == unicode:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
        input = input.encode('utf8')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
    return input
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
@synchronized(convert_lock)    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
def convert_html(input, format_name, images = None):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
    out_filter = fmts.get_filter_by_name(format_name)    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
    if not out_filter:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
        raise Exception("Unsupported format name %s" %(format_name)) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
    infile = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
    outfile = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
    out_f = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
    try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
        desktop = get_desktop()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
        start_processing()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
                        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
        # create in/out files
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
        temp_dir = mkdtemp(prefix="cm_")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
        # in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
        indir_name = os.path.join(temp_dir, THE_INDIR)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
        os.mkdir(indir_name)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
        infile_name = os.path.join(indir_name, THE_INFILE  + '.html')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
        # out
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
        outdir_name = os.path.join(temp_dir, THE_OUTDIR)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
        os.mkdir(outdir_name)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
        outfile_name = os.path.join(outdir_name, THE_OUTFILE)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
        # write infile 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
        infile = open(infile_name,'w')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
        input = to_string(input)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
        infile.write(input)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
        infile.close()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
        # fix perms
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
        # TODO: group permission should suffice
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
        os.chmod(temp_dir, 0755) # read    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
        os.chmod(indir_name, 0755) # read
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
        os.chmod(infile_name, 0755) # read
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
        os.chmod(outdir_name, 0777) # read / write
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
        inProps = PropertyValue( "Hidden" , 0 , True, 0 ),        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
        doc = desktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, inProps )
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
        text   = doc.Text
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
        cursor = text.createTextCursor()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
        fileUrl = systemPathToFileUrl(infile_name)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
        cursor.insertDocumentFromURL(fileUrl, ())
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
        properties= (PropertyValue("Hidden", 0, True, 0), PropertyValue("FilterName", 0, out_filter, 0))        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
        doc.storeToURL('file://%s' %outfile_name,tuple(properties))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
        out_f = open(outfile_name,'r')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
        output = out_f.read()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
        return output
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
    finally:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
        end_processing()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
        try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
            if out_f:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
                out_f.close()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
            if infile:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
                infile.close()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
            top = temp_dir
365
a478cb9786fd For some reasons, abiwords can read background style attribute but not background-color
gibus
parents: 253
diff changeset
   320
            #for root, dirs, files in os.walk(top, topdown=False):
a478cb9786fd For some reasons, abiwords can read background style attribute but not background-color
gibus
parents: 253
diff changeset
   321
            #    for name in files:
a478cb9786fd For some reasons, abiwords can read background style attribute but not background-color
gibus
parents: 253
diff changeset
   322
            #        os.remove(os.path.join(root, name))
a478cb9786fd For some reasons, abiwords can read background style attribute but not background-color
gibus
parents: 253
diff changeset
   323
            #    for name in dirs:
a478cb9786fd For some reasons, abiwords can read background style attribute but not background-color
gibus
parents: 253
diff changeset
   324
            #        os.rmdir(os.path.join(root, name))
a478cb9786fd For some reasons, abiwords can read background style attribute but not background-color
gibus
parents: 253
diff changeset
   325
            #os.rmdir(top)            
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
        except:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
            # TODO : warn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
            pass
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
@synchronized(convert_lock)    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
def convert(input, format_name, unicode = False):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
    logging.info('convert')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
    out_filter = fmts.get_filter_by_name(format_name)    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
    if not out_filter:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
        raise Exception("Unsupported format name %s" %(format_name)) 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
    infile = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
    outfile = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
    out_f = None
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
    try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
        desktop = get_desktop() 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
	    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
        start_processing()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
        # create in/out files
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
        temp_dir = mkdtemp(prefix="cm_")
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
        # in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
        indir_name = os.path.join(temp_dir, THE_INDIR)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
        os.mkdir(indir_name)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
        infile_name = os.path.join(indir_name, THE_INFILE)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
        # out
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
        outdir_name = os.path.join(temp_dir, THE_OUTDIR)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
        os.mkdir(outdir_name)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
        outfile_name = os.path.join(outdir_name, THE_OUTFILE)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
        # write infile 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
        infile = open(infile_name,'w')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
        input = to_string(input)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
        infile.write(input)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
        infile.close()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
        # fix perms
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
        # TODO group permission should suffice
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
        os.chmod(temp_dir, 0755) # read        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
        os.chmod(indir_name, 0755) # read        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
        os.chmod(infile_name, 0755) # read
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
        os.chmod(outdir_name, 0777) # read / write
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
        properties = PropertyValue("Hidden", 0, True, 0),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
                       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
        #import pdb;pdb.set_trace()   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
        doc=desktop.loadComponentFromURL("file://%s" % infile_name, "_blank", 0, properties)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
        properties= (PropertyValue("Hidden", 0, True, 0), PropertyValue("FilterName", 0, out_filter, 0))        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
        doc.storeToURL('file://%s' %outfile_name,tuple(properties))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
        out_f = open(outfile_name,'r')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
        output = out_f.read()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
        # load other files (useful only for html)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
        image_names = [name for name in os.listdir(outdir_name) if name != THE_OUTFILE]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
        img_res = [] 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
        for image_name in image_names:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
              img_res.append(os.path.join(outdir_name, image_name))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
        if unicode:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
            output = output.decode('utf8')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
        return output,img_res
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
    finally:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
        end_processing()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
        try:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
            if out_f:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
                out_f.close()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
            if infile:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
                infile.close()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
# Do not remove dir: we only return images path to avoid 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
# mem overload             
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
#            top = temp_dir
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
#            for root, dirs, files in os.walk(top, topdown=False):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
#                for name in files:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
#                    os.remove(os.path.join(root, name))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
#                for name in dirs:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
#                    os.rmdir(os.path.join(root, name))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
#            os.rmdir(top)            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
        except:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
            # TODO : warn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
            pass