66import argparse
77from argparse import RawTextHelpFormatter
88import os
9+ import logging
910
1011
1112# This function builds a parser that allows this tool to be used
@@ -30,6 +31,8 @@ def get_parser():
3031 parser .add_argument ('--replace' , default = 'no' ,
3132 choices = ['yes' , 'no' ],
3233 help = 'replace current output file' )
34+ parser .add_argument ('--logging-directory' ,
35+ help = 'directory to place logging files' )
3336
3437 return parser
3538
@@ -39,18 +42,66 @@ def main():
3942 opts = get_parser ().parse_args ()
4043 root = opts .project_root_directory
4144
45+ logging_directory = opts .logging_directory if opts .logging_directory else os .getcwd ()
46+
47+ # assume we can get lab_id and date for the log file
4248 lab_id = utils .get_lab_id (opts .old_file_path )
4349 date = utils .get_date (opts .old_file_path )
4450
45- ses_id , project = excel_lookup .excel_lookup (lab_id , date , opts .excel_file_path )
46-
47- sub_id = redcap_query .redcap_query (lab_id , project , opts .api_key )
48-
49- new_file_name = bids_transform .bids_transform (project , sub_id , ses_id )
51+ # set up the logging configuration
52+ logging_fname = '_' .join ([str (lab_id ), str (date .date ())]) + '.log'
53+ logging_path = os .path .join (logging_directory , logging_fname )
54+
55+ logger = logging .getLogger (__name__ )
56+ logger .level = 10
57+ # create file handler which logs even debug messages
58+ fh = logging .FileHandler (logging_path )
59+ fh .setLevel (logging .DEBUG )
60+ # create console handler with a higher log level
61+ ch = logging .StreamHandler ()
62+ ch .setLevel (logging .INFO )
63+ # create formatter and add it to the handlers
64+ formatter = logging .Formatter ('%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
65+ fh .setFormatter (formatter )
66+ ch .setFormatter (formatter )
67+ # add the handlers to the logger
68+ logger .addHandler (fh )
69+ logger .addHandler (ch )
70+
71+ # get session and project information
72+ try :
73+ ses_id , project = excel_lookup .excel_lookup (lab_id , date , opts .excel_file_path )
74+ except Exception as e :
75+ logger .exception ("could not lookup {} ({}) in {}" .format (
76+ lab_id , str (date ), opts .excel_file_path ))
77+ raise (e )
78+
79+ # find subject id from redcap
80+ try :
81+ sub_id = redcap_query .redcap_query (lab_id , project , opts .api_key )
82+ except Exception as e :
83+ msg = "could not get subject id from redcap for {} ({})"
84+ logger .exception (msg .format (lab_id , str (date )))
85+ raise (e )
86+ # create a new path/filename using this information
87+ try :
88+ new_file_name = bids_transform .bids_transform (project , sub_id , ses_id )
89+ except Exception as e :
90+ msg = "could not create new filename: {} ({})"
91+ logger .exception (msg .format (lab_id , str (date )))
92+ raise (e )
5093
5194 new_file_path = os .path .join (root , new_file_name )
5295
53- utils .make_directory (opts .old_file_path , new_file_path , opts .replace )
96+ # copy the file to the new project specific location
97+ try :
98+ utils .make_directory (opts .old_file_path , new_file_path , opts .replace )
99+ except Exception as e :
100+ msg = "could not copy file: {} ({})"
101+ logger .exception (msg .format (lab_id , str (date )))
102+ raise (e )
103+
104+ logger .info ("{of} -> {nf}" .format (of = opts .old_file_path , nf = new_file_path ))
54105
55106 return
56107
0 commit comments