#!/usr/bin/python import os import os.path def makeLeadXML(leads): lead_template = """ %(name)s %(user)s %(email)s %(active)s """ return "".join([lead_template % l for l in leads]) INDENT_STRING = " " def buildContentsXMLFordir(dir_or_file, roles, depth=0): """ Returns a list of strings, each of which is either a XML element for the given file or a element which contains other elements. """ try: entries = os.listdir(dir_or_file) lines = ['%s' % (INDENT_STRING * depth, os.path.basename(dir_or_file))] for entry in entries: lines += buildContentsXMLFordir(dir_or_file + os.sep + entry, roles, depth + 1) lines.append('%s' % (INDENT_STRING * depth)) return lines except OSError: try: extension = dir_or_file.split(".")[-1] except: return [] if extension in roles: # Ends in an extension we care about return ['%s' % (INDENT_STRING * depth, os.path.basename(dir_or_file), roles[extension])] else: return [] def buildContentsXML(roles, *dirs): lines = [''] for directory in dirs: lines.append("\n".join(buildContentsXMLFordir(directory, roles, 1))) lines.append('') return "\n".join(lines) if __name__ == "__main__": import sys import time try: import xmlconfig except: print "Could not import XML configuration module xmlconfig" sys.exit(1) try: template_f = open(xmlconfig.template, 'r') except Exception, e: print "Could not open template file:", str(e) sys.exit(1) # Expect sys.argv[1] to be the version number to include in the # package.xml file. try: version = sys.argv[1] except: print "Usage: %s " % (sys.argv[0]) sys.exit(2) data = xmlconfig.__dict__.copy() data['contents'] = buildContentsXML({'php': 'php'}, *xmlconfig.contents_dirs) data['leads'] = makeLeadXML(xmlconfig.leads) data['date'] = time.strftime("%Y-%m-%d") data['version'] = version template_data = template_f.read() print template_data % data