#!/usr/bin/env python # # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # # -*- Python -*- """Transform find-fix.py output into Excellable csv.""" __date__ = "Time-stamp: <2003-10-16 13:26:27 jrepenning>"[13:30] __author__ = "Jack Repenning " import getopt try: my_getopt = getopt.gnu_getopt except AttributeError: my_getopt = getopt.getopt import inspect import os import os.path import pydoc import re import shutil import string import sys import time # Long options and their usage strings; "=" means it takes an argument. # To get a list suitable for getopt, just do # # [x[0] for x in long_opts] # # Make sure to sacrifice a lamb to Guido for each element of the list. long_opts = [ ["doc", """Optional, print pydocs."""], ["help", """Optional, print usage (this text)."""], ["verbose", """Optional, print more progress messages."""], ] help = 0 verbose = 0 me = os.path.basename(sys.argv[0]) DATA_FILE = "http://subversion.tigris.org/iz-data/query-set-1.tsv" def main(): """Run find-fix.py with arguments du jour for drawing pretty manager-speak pictures.""" global verbose try: opts, args = my_getopt(sys.argv[1:], "", [x[0] for x in long_opts]) except getopt.GetoptError, e: print("Error: %s" % e.msg) shortusage() print(me + " --help for options.") sys.exit(1) for opt, arg in opts: if opt == "--help": usage() sys.exit(0) elif opt == "--verbose": verbose = 1 elif opt == "--doc": pydoc.doc(pydoc.importfile(sys.argv[0])) sys.exit(0) # do something fruitful with your life if len(args) == 0: args = ["query-set-1.tsv", "core-history.csv"] print(("ff2csv %s %s" % args)) if len(args) != 2: print("%s: Wrong number of args." % me) shortusage() sys.exit(1) if os.system("curl " + DATA_FILE + "> " + args[0]): os.system("wget " + DATA_FILE) outfile = open(args[1], "w") outfile.write("Date,found,fixed,inval,dup,other,remain\n") totalsre = re.compile("totals:.*found= +([0-9]+) +" "fixed= +([0-9]+) +" "inval= +([0-9]+) +" "dup= +([0-9]+) +" "other= +([0-9]+) +" "remain= *([0-9]+)") for year in ("2001", "2002", "2003", "2004"): for month in ("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"): for dayrange in (("01", "08"), ("08", "15"), ("15", "22"), ("22", "28")): if verbose: print("searching %s-%s-%s to %s" % (year, month, dayrange[0], dayrange[1])) ffpy = os.popen("python ./find-fix.py --m=beta " "%s %s-%s-%s %s-%s-%s" % (args[0], year, month, dayrange[0], year, month, dayrange[1])) if verbose: print("ffpy: %s" % ffpy) line = ffpy.readline() if verbose: print("initial line is: %s" % line) matches = totalsre.search(line) if verbose: print("initial match is: %s" % matches) while line and not matches: line = ffpy.readline() if verbose: print("%s: read line '%s'" % (me, line)) matches = totalsre.search(line) if verbose: print("subsequent line is: %s" % line) ffpy.close() if verbose: print("line is %s" % line) if matches.group(1) != "0" \ or matches.group(2) != "0" \ or matches.group(3) != "0" \ or matches.group(4) != "0" \ or matches.group(5) != "0": outfile.write("%s-%s-%s,%s,%s,%s,%s,%s,%s\n" % (year, month, dayrange[1], matches.group(1), matches.group(2), matches.group(3), matches.group(4), matches.group(5), matches.group(6), )) elif matches.group(6) != "0": # quit at first nothing-done week # allows slop in loop controls break outfile.close() def shortusage(): "Print one-line usage summary." print("%s - %s" % (me, pydoc.synopsis(sys.argv[0]))) def usage(): "Print multi-line usage tome." shortusage() print('''%s [opts] [queryfile [outfile]] Option keywords may be abbreviated to any unique prefix. Option order is not important. Most options require "=xxx" arguments:''' % me) for x in long_opts: padding_limit = 18 if x[0][-1:] == '=': sys.stdout.write(" --%s " % x[0][:-1]) padding_limit = 19 else: sys.stdout.write(" --%s " % x[0]) print("%s %s" % ((' ' * (padding_limit - len(x[0]))), x[1])) if __name__ == "__main__": main()