33from sqlalchemy import create_engine
44import argparse
55
6+ _LOG_LEVEL_STRINGS = ['CRITICAL' , 'ERROR' , 'WARNING' , 'INFO' , 'DEBUG' ]
7+
68
79def main (args ):
8- configure_logging ()
10+
11+ configure_logging (args ['log_level' ])
912 source_engine = create_engine (args ['source-engine' ])
1013 destination_engine = create_engine (args ['destination-engine' ])
1114
1215 data_load_manager = DataLoadManager (args ['configuration-folder' ])
1316 data_load_manager .start_import (source_engine , destination_engine , True )
1417
1518
16- def configure_logging ():
19+ def configure_logging (log_level ):
1720 formatter = logging .Formatter ('%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
1821 log = logging .getLogger ()
1922 console_stream_handler = logging .StreamHandler ()
2023 console_stream_handler .setFormatter (formatter )
2124 log .addHandler (console_stream_handler )
22- log .setLevel (logging . INFO )
25+ log .setLevel (log_level )
2326 return
2427
28+
29+ def _log_level_string_to_int (log_level_string ):
30+ if not log_level_string in _LOG_LEVEL_STRINGS :
31+ message = 'invalid choice: {0} (choose from {1})' .format (log_level_string , _LOG_LEVEL_STRINGS )
32+ raise argparse .ArgumentTypeError (message )
33+
34+ log_level_int = getattr (logging , log_level_string , logging .INFO )
35+ # check the logging log_level_choices have not changed from our expected values
36+ assert isinstance (log_level_int , int )
37+
38+ return log_level_int
39+
40+
2541def get_arguments ():
2642 parser = argparse .ArgumentParser (description = 'Relational Data Loader' )
2743
@@ -32,14 +48,17 @@ def get_arguments():
3248 help = 'The destination engine. Eg: postgresql+psycopg2://postgres:xxxx@localhost/dest_dw' )
3349
3450 parser .add_argument ('configuration-folder' , metavar = 'configuration-folder' ,
35- help = 'The configration folder. Eg C:\\ _dev\\ oscars-misc\\ el-pipeline-spike\\ configuraton\\ ' )
51+ help = 'The configuration folder. Eg C:\\ _dev\\ oscars-misc\\ el-pipeline-spike\\ configuraton\\ ' )
52+
53+ parser .add_argument ('--log-level' ,
54+ default = 'INFO' ,
55+ type = _log_level_string_to_int ,
56+ nargs = '?' ,
57+ help = 'Set the logging output level. {0}' .format (_LOG_LEVEL_STRINGS ))
3658
3759 return vars (parser .parse_args ())
3860
3961
4062if __name__ == "__main__" :
4163 args = get_arguments ()
4264 main (args )
43-
44-
45-
0 commit comments