Source code for glideinwms.factory.tools.cat_XMLResult
#!/usr/bin/env python3
# SPDX-FileCopyrightText: 2009 Fermi Research Alliance, LLC
# SPDX-License-Identifier: Apache-2.0
"""Print out the XML Result for a glidein output file
Usage: cat_XMLResult.py [-raw] [-forcemulti] logname+
If -raw is present, do not wrap multiple XMLs into a ResultSet
If -forcemulti is present, make it a ResultSet even if only one file present
"""
import os.path
import sys
from glideinwms.factory.tools.lib import gWftLogParser
STARTUP_DIR = sys.path[0]
sys.path.append(os.path.join(STARTUP_DIR, "../../.."))
USAGE = "Usage: cat_XMLResult.py -h|[-raw] [-forcemulti] <logname>+"
[docs]
def main(args):
raw_out = False
force_multi = False
while True:
if len(args) < 1:
sys.stderr.write("Missing logname.\n")
sys.stderr.write("%s\n" % USAGE)
sys.exit(1)
if args[0] == "-h":
print(USAGE)
sys.exit(0)
elif args[0] == "-raw":
raw_out = True
args = args[1:]
elif args[0] == "-forcemulti":
force_multi = True
args = args[1:]
else:
break # looks like I found a log name
if (len(args) == 1) and (not force_multi):
# single file, just pass through
try:
fname = args[0]
out = gWftLogParser.get_XMLResult(fname)
except OSError as e:
sys.stderr.write("Error reading file: %s\n" % e)
sys.exit(1)
except:
raise
sys.stderr.write("%s\n" % USAGE)
sys.exit(1)
for line in out.split("\n"):
if raw_out and (line[:2] == "<?"):
# skip comments for raw output
continue
if line[:15] == "<OSGTestResult ":
# insert file name
line = line[:15] + ('logname="%s" ' % fname) + line[15:]
print(line)
else:
# multiple files, combine in a set
xmls = []
for i in range(len(args)):
try:
fname = args[i]
rawx = gWftLogParser.get_XMLResult(fname)
if rawx == "":
# nothing found, warn
sys.stderr.write("No XML in file %s\n" % fname)
continue
x = []
for line in rawx.split("\n"):
if line[:2] == "<?":
# skip comments
continue
if line[:15] == "<OSGTestResult ":
# insert file name
line = line[:15] + ('logname="%s" ' % fname) + line[15:]
x.append(" " + line)
if x[-1] == " ":
x = x[:-1]
xmls.append("\n".join(x))
except OSError as e:
# just warn
sys.stderr.write("Error reading file: %s\n" % e)
except:
# serious error... die
raise
pass
if len(xmls) == 0:
sys.stderr.write("Could not read a single file!")
sys.exit(1)
if not raw_out:
sys.stdout.write('<?xml version="1.0"?>\n')
sys.stdout.write("<OSGTestResultSet>\n")
for line in xmls:
sys.stdout.write(line + "\n")
if not raw_out:
sys.stdout.write("</OSGTestResultSet>\n")
if __name__ == "__main__":
main(sys.argv[1:])