xref: /trunk/test/odf-validate/convert.py (revision 0e16a31d78a652c56c5c0fc79c752f48b9048df9)
1*0e16a31dSJim Jagielski#**************************************************************
2*0e16a31dSJim Jagielski#
3*0e16a31dSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*0e16a31dSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*0e16a31dSJim Jagielski#  distributed with this work for additional information
6*0e16a31dSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*0e16a31dSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*0e16a31dSJim Jagielski#  "License"); you may not use this file except in compliance
9*0e16a31dSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*0e16a31dSJim Jagielski#
11*0e16a31dSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*0e16a31dSJim Jagielski#
13*0e16a31dSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*0e16a31dSJim Jagielski#  software distributed under the License is distributed on an
15*0e16a31dSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*0e16a31dSJim Jagielski#  KIND, either express or implied.  See the License for the
17*0e16a31dSJim Jagielski#  specific language governing permissions and limitations
18*0e16a31dSJim Jagielski#  under the License.
19*0e16a31dSJim Jagielski#
20*0e16a31dSJim Jagielski#**************************************************************
21*0e16a31dSJim Jagielski
22*0e16a31dSJim Jagielski# usage: convert.py <port> <jobs.tsv> <done.tsv> [limit] [--version-only]
23*0e16a31dSJim Jagielski# jobs.tsv: "<source>\t<output.od?>" per line; done.tsv gets START/OK/FAIL lines and is resumable
24*0e16a31dSJim Jagielskiimport sys, os, uno
25*0e16a31dSJim Jagielskifrom unohelp import connect, odf_version, desktop, load, pv, FILTERS
26*0e16a31dSJim Jagielski
27*0e16a31dSJim Jagielskiport, jobs, donelog = int(sys.argv[1]), sys.argv[2], sys.argv[3]
28*0e16a31dSJim Jagielskictx = connect(port)
29*0e16a31dSJim Jagielskiprint("DefaultVersion =", odf_version(ctx), flush=True)
30*0e16a31dSJim Jagielskiif "--version-only" in sys.argv:
31*0e16a31dSJim Jagielski    sys.exit(0)
32*0e16a31dSJim Jagielskilimit = int(sys.argv[4]) if len(sys.argv) > 4 else 10**9
33*0e16a31dSJim Jagielskidesk = desktop(ctx)
34*0e16a31dSJim Jagielskidone = {l.split("\t")[0] for l in open(donelog)} if os.path.exists(donelog) else set()
35*0e16a31dSJim Jagielskin = 0
36*0e16a31dSJim Jagielskiwith open(donelog, "a") as log:
37*0e16a31dSJim Jagielski    for line in open(jobs):
38*0e16a31dSJim Jagielski        src, out = line.rstrip("\n").split("\t")
39*0e16a31dSJim Jagielski        if src in done:
40*0e16a31dSJim Jagielski            continue
41*0e16a31dSJim Jagielski        if n >= limit:
42*0e16a31dSJim Jagielski            break
43*0e16a31dSJim Jagielski        n += 1
44*0e16a31dSJim Jagielski        log.write(src + "\tSTART\n"); log.flush()
45*0e16a31dSJim Jagielski        try:
46*0e16a31dSJim Jagielski            doc = load(desk, src)
47*0e16a31dSJim Jagielski            os.makedirs(os.path.dirname(out), exist_ok=True)
48*0e16a31dSJim Jagielski            doc.storeToURL(uno.systemPathToFileUrl(out), (pv("FilterName", FILTERS[out.rsplit(".", 1)[1]]),))
49*0e16a31dSJim Jagielski            doc.close(True)
50*0e16a31dSJim Jagielski            log.write(src + "\tOK\n")
51*0e16a31dSJim Jagielski        except Exception as e:
52*0e16a31dSJim Jagielski            log.write(src + "\tFAIL " + repr(e).replace("\n", " ")[:200] + "\n")
53*0e16a31dSJim Jagielski            log.flush()
54*0e16a31dSJim Jagielski            if "disposed" in repr(e):
55*0e16a31dSJim Jagielski                sys.exit(3)
56*0e16a31dSJim Jagielski        log.flush()
57