11#!/usr/bin/env python
2+ import sys
23import logging
34import argparse
45
56from . import core
67from . import VERSION
78from . import utils
89from .db import make
10+ from .config import settings , __doc__ as FORMAT_HELP
911
1012logger = logging .getLogger (__name__ )
1113
@@ -29,14 +31,15 @@ def db_main(args, db):
2931
3032
3133def config_main (args ):
32- print (core . settings .write_text ())
34+ print (settings .write_text ())
3335 return 0
3436
3537
3638def get_parser ():
3739 parser = argparse .ArgumentParser (
3840 description = "Convert times to and from time zones or cities" ,
3941 formatter_class = argparse .RawDescriptionHelpFormatter ,
42+ add_help = False ,
4043 )
4144
4245 parser .add_argument (
@@ -46,6 +49,14 @@ def get_parser():
4649 help = "Timestamp to parse, defaults to local time" ,
4750 )
4851
52+ parser .add_argument (
53+ "-h" ,
54+ "--help" ,
55+ action = "store_true" ,
56+ default = False ,
57+ help = "Show helpful usage information" ,
58+ )
59+
4960 parser .add_argument (
5061 "-s" ,
5162 "--source" ,
@@ -65,17 +76,12 @@ def get_parser():
6576 """ ,
6677 )
6778
79+ default_format = settings ["formats" ]["named" ]["default" ]
6880 parser .add_argument (
6981 "-f" ,
7082 "--format" ,
71- default = core .DEFAULT_FORMAT ,
72- help = """
73- Output formatting. Additionaly predefined formats by name are {}.
74- Default: {}, where %%K is timezone long name
75- """ .format (
76- ", " .join (["rfc2822, iso, " ]),
77- core .DEFAULT_FORMAT .replace ("%" , "%%" ),
78- ),
83+ default = default_format ,
84+ help = "Output formatting. Additional formats can be shown using the -v option with -h" ,
7985 )
8086
8187 parser .add_argument (
@@ -88,7 +94,11 @@ def get_parser():
8894 parser .add_argument ("--holidays" , help = "Show holidays for given country code." )
8995
9096 parser .add_argument (
91- "-v" , "--verbosity" , action = "count" , default = 0 , help = "Verbosity (-v, -vv, etc)"
97+ "-v" ,
98+ "--verbosity" ,
99+ action = "count" ,
100+ default = 0 ,
101+ help = "Verbosity (-v, -vv, etc). Use -v to show `when` extension detailed help" ,
92102 )
93103
94104 parser .add_argument (
@@ -152,15 +162,16 @@ def log_config(verbosity):
152162 log_level = logging .DEBUG if verbosity > 1 else logging .INFO
153163
154164 logging .basicConfig (level = log_level , format = log_format , force = True )
155- logger .debug ("Configuration files read: %s" , ", " .join (core . settings .read_from ))
165+ logger .debug ("Configuration files read: %s" , ", " .join (settings .read_from ))
156166
157167
158168def main (sys_args , when = None ):
159169 debug = "--pdb" in sys_args
160170 if debug :
161171 sys_args .remove ("--pdb" )
162172
163- args = get_parser ().parse_args (sys_args )
173+ parser = get_parser ()
174+ args = parser .parse_args (sys_args )
164175
165176 if debug :
166177 try :
@@ -170,15 +181,21 @@ def main(sys_args, when=None):
170181 pdb .set_trace ()
171182
172183 log_config (args .verbosity )
184+ if args .help :
185+ parser .print_help ()
186+ if args .verbosity :
187+ print (FORMAT_HELP )
188+ else :
189+ print ("\n Use -v option for details\n " )
190+ sys .exit (0 )
191+
173192 when = when or core .When ()
174193 if args .db :
175194 return db_main (args , when .db )
176195 elif args .config :
177196 return config_main (args )
178197 elif args .holidays :
179- return core .holidays (
180- args .holidays , args .timestamp [0 ] if args .timestamp else None
181- )
198+ return core .holidays (args .holidays , args .timestamp [0 ] if args .timestamp else None )
182199
183200 ts = utils .parse_source_input (args .timestamp )
184201 targets = args .target
0 commit comments