diff -r 13be42829771 Lib/calendar.py --- a/Lib/calendar.py Wed Oct 28 03:15:38 2015 -0400 +++ b/Lib/calendar.py Wed Oct 28 20:34:54 2015 +0100 @@ -604,52 +604,55 @@ return seconds -def main(args): - import optparse - parser = optparse.OptionParser(usage="usage: %prog [options] [year [month]]") - parser.add_option( +def main(): + import argparse + parser = argparse.ArgumentParser(usage="usage: %(prog)s [options] [year [month]]") + parser.add_argument('year', type=int, nargs='?') + parser.add_argument('month', type=int, nargs='?') + + parser.add_argument( "-w", "--width", - dest="width", type="int", default=2, + dest="width", type=int, default=2, help="width of date column (default 2, text only)" ) - parser.add_option( + parser.add_argument( "-l", "--lines", - dest="lines", type="int", default=1, + dest="lines", type=int, default=1, help="number of lines for each week (default 1, text only)" ) - parser.add_option( + parser.add_argument( "-s", "--spacing", - dest="spacing", type="int", default=6, + dest="spacing", type=int, default=6, help="spacing between months (default 6, text only)" ) - parser.add_option( + parser.add_argument( "-m", "--months", - dest="months", type="int", default=3, + dest="months", type=int, default=3, help="months per row (default 3, text only)" ) - parser.add_option( + parser.add_argument( "-c", "--css", dest="css", default="calendar.css", help="CSS to use for page (html only)" ) - parser.add_option( + parser.add_argument( "-L", "--locale", dest="locale", default=None, help="locale to be used from month and weekday names" ) - parser.add_option( + parser.add_argument( "-e", "--encoding", dest="encoding", default=None, help="Encoding to use for output." ) - parser.add_option( + parser.add_argument( "-t", "--type", dest="type", default="text", choices=("text", "html"), help="output type (text or html)" ) - (options, args) = parser.parse_args(args) + options = parser.parse_args() if options.locale and not options.encoding: parser.error("if --locale is specified --encoding is required") @@ -667,31 +670,28 @@ encoding = sys.getdefaultencoding() optdict = dict(encoding=encoding, css=options.css) write = sys.stdout.buffer.write - if len(args) == 1: + if options.year and options.month: + write(cal.formatyearpage(options.year, **optdict)) + else: write(cal.formatyearpage(datetime.date.today().year, **optdict)) - elif len(args) == 2: - write(cal.formatyearpage(int(args[1]), **optdict)) - else: - parser.error("incorrect number of arguments") - sys.exit(1) else: if options.locale: cal = LocaleTextCalendar(locale=locale) else: cal = TextCalendar() optdict = dict(w=options.width, l=options.lines) + + args = [arg for arg in (sys.argv[0], options.year, options.month) if arg] if len(args) != 3: - optdict["c"] = options.spacing - optdict["m"] = options.months - if len(args) == 1: + optdict['c'] = options.spacing + optdict['m'] = options.months + + if options.month: + result = cal.formatmonth(options.year, options.month, **optdict) + elif options.year: + result = cal.formatyear(options.year, **optdict) + else: result = cal.formatyear(datetime.date.today().year, **optdict) - elif len(args) == 2: - result = cal.formatyear(int(args[1]), **optdict) - elif len(args) == 3: - result = cal.formatmonth(int(args[1]), int(args[2]), **optdict) - else: - parser.error("incorrect number of arguments") - sys.exit(1) write = sys.stdout.write if options.encoding: result = result.encode(options.encoding) @@ -700,4 +700,4 @@ if __name__ == "__main__": - main(sys.argv) + main()