6
from os.path import isfile, isdir
9
from enthought.util.updates.info_file import InfoFile
11
def build_argparser():
12
parser = argparse.ArgumentParser(
13
description = "Converts .info files into XML files compatible with " \
14
"the enthought.updates library. Supports batch " \
15
"operations on directories.")
16
parser.add_argument("filespecs", type=str, nargs="+",
17
help="Filenames and/or directories to be searched for info files")
19
parser.add_argument("-a", "--append", type=argparse.FileType("r"),
21
help = "name of output file; if it exists, append to it")
23
parser.add_argument("-o", "--output", type=argparse.FileType("w"),
25
help = "name of output file; if it exists, it is overwritten")
27
parser.add_argument("-r", "--recurse", action="store_true", default=False,
28
help = "search all subdirectories of provided dirs for .info files")
30
parser.add_argument("-l", "--location", type=str, default="",
31
help = "URI to use as the 'location' XML tag of each .info file")
36
parser = build_argparser()
37
opts = parser.parse_args(sys.argv[1:])
39
# Process all the files
41
filespecs = opts.filespecs[:]
42
for filespec in filespecs:
43
# A concrete .info file:
45
f = InfoFile.from_info_file(filespec)
46
f.location = opts.location
47
xml_strs.append(f.to_xml_str())
49
filespecs.extend(glob(os.path.join(filespec, "*.info")))
51
# Also add all the subdirectories
52
filespecs.extend(d for d in os.listdir(filespec) if isdir(d))
54
# Output appropriately
55
if getattr(opts, "append", None):
56
raise NotImplementedError
58
if opts.output is None:
59
opts.output = "updates.xml"
61
outfile = file(opts.output, "w")
62
outfile.write("\n".join(xml_strs) + "\n")
66
if __name__ == "__main__":