diff options
Diffstat (limited to 'Lib/calendar.py')
| -rw-r--r-- | Lib/calendar.py | 85 | 
1 files changed, 48 insertions, 37 deletions
| diff --git a/Lib/calendar.py b/Lib/calendar.py index 5244b8d1ee..85baf2ee4a 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -12,7 +12,9 @@ import locale as _locale  __all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",             "firstweekday", "isleap", "leapdays", "weekday", "monthrange",             "monthcalendar", "prmonth", "month", "prcal", "calendar", -           "timegm", "month_name", "month_abbr", "day_name", "day_abbr"] +           "timegm", "month_name", "month_abbr", "day_name", "day_abbr", +           "Calendar", "TextCalendar", "HTMLCalendar", "LocaleTextCalendar", +           "LocaleHTMLCalendar", "weekheader"]  # Exception raised for bad input (with string parameter for details)  error = ValueError @@ -605,51 +607,63 @@ def timegm(tuple):  def main(args): -    import optparse -    parser = optparse.OptionParser(usage="usage: %prog [options] [year [month]]") -    parser.add_option( +    import argparse +    parser = argparse.ArgumentParser() +    textgroup = parser.add_argument_group('text only arguments') +    htmlgroup = parser.add_argument_group('html only arguments') +    textgroup.add_argument(          "-w", "--width", -        dest="width", type="int", default=2, -        help="width of date column (default 2, text only)" +        type=int, default=2, +        help="width of date column (default 2)"      ) -    parser.add_option( +    textgroup.add_argument(          "-l", "--lines", -        dest="lines", type="int", default=1, -        help="number of lines for each week (default 1, text only)" +        type=int, default=1, +        help="number of lines for each week (default 1)"      ) -    parser.add_option( +    textgroup.add_argument(          "-s", "--spacing", -        dest="spacing", type="int", default=6, -        help="spacing between months (default 6, text only)" +        type=int, default=6, +        help="spacing between months (default 6)"      ) -    parser.add_option( +    textgroup.add_argument(          "-m", "--months", -        dest="months", type="int", default=3, -        help="months per row (default 3, text only)" +        type=int, default=3, +        help="months per row (default 3)"      ) -    parser.add_option( +    htmlgroup.add_argument(          "-c", "--css", -        dest="css", default="calendar.css", -        help="CSS to use for page (html only)" +        default="calendar.css", +        help="CSS to use for page"      ) -    parser.add_option( +    parser.add_argument(          "-L", "--locale", -        dest="locale", default=None, +        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." +        default=None, +        help="encoding to use for output"      ) -    parser.add_option( +    parser.add_argument(          "-t", "--type", -        dest="type", default="text", +        default="text",          choices=("text", "html"),          help="output type (text or html)"      ) +    parser.add_argument( +        "year", +        nargs='?', type=int, +        help="year number (1-9999)" +    ) +    parser.add_argument( +        "month", +        nargs='?', type=int, +        help="month number (1-12, text only)" +    ) -    (options, args) = parser.parse_args(args) +    options = parser.parse_args(args[1:])      if options.locale and not options.encoding:          parser.error("if --locale is specified --encoding is required") @@ -667,10 +681,10 @@ def main(args):              encoding = sys.getdefaultencoding()          optdict = dict(encoding=encoding, css=options.css)          write = sys.stdout.buffer.write -        if len(args) == 1: +        if options.year is None:              write(cal.formatyearpage(datetime.date.today().year, **optdict)) -        elif len(args) == 2: -            write(cal.formatyearpage(int(args[1]), **optdict)) +        elif options.month is None: +            write(cal.formatyearpage(options.year, **optdict))          else:              parser.error("incorrect number of arguments")              sys.exit(1) @@ -680,18 +694,15 @@ def main(args):          else:              cal = TextCalendar()          optdict = dict(w=options.width, l=options.lines) -        if len(args) != 3: +        if options.month is None:              optdict["c"] = options.spacing              optdict["m"] = options.months -        if len(args) == 1: +        if options.year is None:              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) +        elif options.month is None: +            result = cal.formatyear(options.year, **optdict)          else: -            parser.error("incorrect number of arguments") -            sys.exit(1) +            result = cal.formatmonth(options.year, options.month, **optdict)          write = sys.stdout.write          if options.encoding:              result = result.encode(options.encoding) | 
