def main(argv=None): """ The main method for the tool. This method is called from the command line, processes the command line arguments and calls into the ImdTk library to do its work. This main method takes no arguments so it can be called by setuptools. """ # the main method takes no arguments so it can be called by setuptools if (argv is None): # if called by setuptools argv = sys.argv[1:] # then fetch the arguments from the system # setup command line argument parsing and add shared arguments parser = argparse.ArgumentParser( prog=TOOL_NAME, formatter_class=argparse.RawTextHelpFormatter, description='Store a catalog data table in a PostgreSQL database table' ) cli_utils.add_shared_arguments(parser, TOOL_NAME) cli_utils.add_input_file_argument(parser, TOOL_NAME) cli_utils.add_output_arguments(parser, TOOL_NAME) cli_utils.add_database_arguments(parser, TOOL_NAME) cli_utils.add_catalog_table_argument(parser, TOOL_NAME) # actually parse the arguments from the command line args = vars(parser.parse_args(argv)) # if debugging, set verbose and echo input arguments if (args.get('debug')): args['verbose'] = True # if debug turn on verbose too print("({}.main): ARGS={}".format(TOOL_NAME, args), file=sys.stderr) # if input file path given, check the file path for validity input_file = args.get('input_file') cli_utils.check_input_file( input_file, TOOL_NAME) # may system exit here and not return! # if database config file path given, check the file path for validity dbconfig_file = args.get('dbconfig_file') cli_utils.check_dbconfig_file( dbconfig_file, TOOL_NAME) # may system exit here and not return! # if database config file path given, check the file path for validity catalog_table = args.get('catalog_table') cli_utils.check_catalog_table( catalog_table, TOOL_NAME) # may system exit here and not return! # add additional arguments to args args['TOOL_NAME'] = TOOL_NAME # call the task layer to process the given, validated input file try: task = FitsCatalogFillTableSink(args) task.input_process_output() except errors.ProcessingError as pe: errMsg = "({}): ERROR: Processing Error ({}): {}".format( TOOL_NAME, pe.error_code, pe.message) print(errMsg, file=sys.stderr) sys.exit(pe.error_code)
def main(argv=None): """ The main method for the tool. This method is called from the command line, processes the command line arguments and calls into the ImdTk library to do its work. This main method takes no arguments so it can be called by setuptools. """ # the main method takes no arguments so it can be called by setuptools if (argv is None): # if called by setuptools argv = sys.argv[1:] # then fetch the arguments from the system # setup command line argument parsing and add shared arguments parser = argparse.ArgumentParser( prog=TOOL_NAME, formatter_class=argparse.RawTextHelpFormatter, description= 'Calculate values from incoming metadata, add the calculated fields to the metadata structure, and output it.' ) cli_utils.add_shared_arguments(parser, TOOL_NAME) cli_utils.add_input_file_argument(parser, TOOL_NAME) cli_utils.add_fits_file_argument(parser, TOOL_NAME) cli_utils.add_hdu_argument(parser, TOOL_NAME) cli_utils.add_collection_argument(parser, TOOL_NAME) cli_utils.add_output_arguments(parser, TOOL_NAME) # actually parse the arguments from the command line args = vars(parser.parse_args(argv)) # if debugging, set verbose and echo input arguments if (args.get('debug')): args['verbose'] = True # if debug turn on verbose too print("({}.main): ARGS={}".format(TOOL_NAME, args), file=sys.stderr) # if input file path given, check the file path for validity input_file = args.get('input_file') cli_utils.check_input_file( input_file, TOOL_NAME) # may system exit here and not return! # check the required FITS file path for validity fits_file = args.get('fits_file') cli_utils.check_fits_file( fits_file, TOOL_NAME) # may system exit here and not return! # add additional arguments to args args['TOOL_NAME'] = TOOL_NAME # call the task layer to process the given, validated files try: task = JWST_ObsCoreCalcTask(args) task.input_process_output() except errors.ProcessingError as pe: errMsg = "({}): ERROR: Processing Error ({}): {}".format( TOOL_NAME, pe.error_code, pe.message) print(errMsg, file=sys.stderr) sys.exit(pe.error_code)
def main(argv=None): """ The main method for the tool. This method is called from the command line, processes the command line arguments and calls into the ImdTk library to do its work. This main method takes no arguments so it can be called by setuptools. """ # the main method takes no arguments so it can be called by setuptools if (argv is None): # if called by setuptools argv = sys.argv[1:] # then fetch the arguments from the system # setup command line argument parsing and add shared arguments parser = argparse.ArgumentParser( prog=TOOL_NAME, formatter_class=argparse.RawTextHelpFormatter, description= 'Add aliases for column names of a catalog metadata structure and output it.' ) cli_utils.add_shared_arguments(parser, TOOL_NAME) cli_utils.add_input_file_argument(parser, TOOL_NAME) cli_utils.add_aliases_argument(parser, TOOL_NAME, default_msg=DEFAULT_CAT_ALIASES_FILEPATH) cli_utils.add_output_arguments(parser, TOOL_NAME) # actually parse the arguments from the command line args = vars(parser.parse_args(argv)) # if debugging, set verbose and echo input arguments if (args.get('debug')): args['verbose'] = True # if debug turn on verbose too print("({}.main): ARGS={}".format(TOOL_NAME, args), file=sys.stderr) # if input file path given, check the file path for validity input_file = args.get('input_file') cli_utils.check_input_file(input_file, TOOL_NAME) # may exit here and not return! # if aliases file path given, check the file path for validity alias_file = args.get('alias_file') cli_utils.check_alias_file(alias_file, TOOL_NAME) # may exit here and not return! # add additional arguments to args args['TOOL_NAME'] = TOOL_NAME # call the task layer to process the given, validated input file try: task = CatalogAliasesTask(args) task.input_process_output() except errors.ProcessingError as pe: errMsg = "({}): ERROR: Processing Error ({}): {}".format( TOOL_NAME, pe.error_code, pe.message) print(errMsg, file=sys.stderr) sys.exit(pe.error_code)
def main(argv=None): """ The main method for the pipeline. This method is called from the command line, processes the command line arguments and calls into the ImdTk library to do its work. This main method takes no arguments so it can be called by setuptools. """ # the main method takes no arguments so it can be called by setuptools if (argv is None): # if called by setuptools argv = sys.argv[1:] # then fetch the arguments from the system # setup command line argument parsing and add shared arguments parser = argparse.ArgumentParser( prog=TOOL_NAME, formatter_class=argparse.RawTextHelpFormatter, description= 'Pipeline to store catalog data in an existing PostgreSQL database table.' ) cli_utils.add_shared_arguments(parser, TOOL_NAME) cli_utils.add_input_file_argument(parser, TOOL_NAME) cli_utils.add_fits_file_argument(parser, TOOL_NAME) cli_utils.add_catalog_hdu_argument(parser, TOOL_NAME) cli_utils.add_output_arguments(parser, TOOL_NAME) cli_utils.add_database_arguments(parser, TOOL_NAME) cli_utils.add_catalog_table_argument(parser, TOOL_NAME) # actually parse the arguments from the command line args = vars(parser.parse_args(argv)) # if debugging, set verbose and echo input arguments if (args.get('debug')): args['verbose'] = True # if debug turn on verbose too print("({}.main): ARGS={}".format(TOOL_NAME, args), file=sys.stderr) # if input file path given, check the file path for validity input_file = args.get('input_file') cli_utils.check_input_file( input_file, TOOL_NAME) # may system exit here and not return! # check the required FITS file path for validity fits_file = args.get('fits_file') cli_utils.check_fits_file( fits_file, TOOL_NAME) # may system exit here and not return! # if database config file path given, check the file path for validity dbconfig_file = args.get('dbconfig_file') cli_utils.check_dbconfig_file( dbconfig_file, TOOL_NAME) # may system exit here and not return! # if database config file path given, check the file path for validity catalog_table = args.get('catalog_table') cli_utils.check_catalog_table( catalog_table, TOOL_NAME) # may system exit here and not return! # add additional arguments to args args['TOOL_NAME'] = TOOL_NAME # instantiate the tasks which form the pipeline fits_catalog_dataTask = FitsCatalogDataTask(args) fits_catalog_fillTask = FitsCatalogFillTableSink(args) # compose and call the pipeline tasks if (args.get('verbose')): print("({}): Processing FITS file '{}'.".format(TOOL_NAME, fits_file), file=sys.stderr) try: fits_catalog_fillTask.output_results( # sink to DB: nothing returned fits_catalog_dataTask.process(None)) # data source except errors.UnsupportedType as ute: errMsg = "({}): WARNING: Unsupported File Type ({}): {}".format( TOOL_NAME, ute.error_code, ute.message) print(errMsg, file=sys.stderr) sys.exit(ute.error_code) except errors.ProcessingError as pe: errMsg = "({}): ERROR: Processing Error ({}): {}".format( TOOL_NAME, pe.error_code, pe.message) print(errMsg, file=sys.stderr) sys.exit(pe.error_code) if (args.get('verbose')): print("({}): Processed FITS file '{}'.".format(TOOL_NAME, fits_file), file=sys.stderr)
def test_check_input_file(self): with pytest.raises(SystemExit) as se: utils.check_input_file(self.nosuch_tstfyl, TOOL_NAME) assert se.type == SystemExit assert se.value.code == utils.INPUT_FILE_EXIT_CODE
def main(argv=None): """ The main method for the pipeline. This method is called from the command line, processes the command line arguments and calls into the ImdTk library to do its work. This main method takes no arguments so it can be called by setuptools. """ # the main method takes no arguments so it can be called by setuptools if (argv is None): # if called by setuptools argv = sys.argv[1:] # then fetch the arguments from the system # setup command line argument parsing and add shared arguments parser = argparse.ArgumentParser( prog=TOOL_NAME, formatter_class=argparse.RawTextHelpFormatter, description= 'Read incoming metadata and attach it to an iRods file as iRods metadata.' ) cli_utils.add_shared_arguments(parser, TOOL_NAME) cli_utils.add_input_file_argument(parser, TOOL_NAME) cli_utils.add_irods_md_file_argument(parser, TOOL_NAME) # add arguments specific to this module parser.add_argument( '-rm', '--remove', dest='remove_only', action='store_true', default=False, help= 'If True, remove matching input items from iRods file metadata [default: False].' ) # actually parse the arguments from the command line args = vars(parser.parse_args(argv)) # if debugging, set verbose and echo input arguments if (args.get('debug')): args['verbose'] = True # if debug turn on verbose too print("({}.main): ARGS={}".format(TOOL_NAME, args), file=sys.stderr) # if input file path given, check the file path for validity input_file = args.get('input_file') cli_utils.check_input_file( input_file, TOOL_NAME) # may system exit here and not return! # add additional arguments to args args['TOOL_NAME'] = TOOL_NAME # get an instance of the iRods accessor class firh = FitsIRodsHelper(args) # compose and call the pipeline tasks try: task = IRodsMetadataSink(args, firh) task.input_process_output() except errors.UnsupportedType as ute: errMsg = "({}): WARNING: Unsupported File Type ({}): {}".format( TOOL_NAME, ute.error_code, ute.message) print(errMsg, file=sys.stderr) sys.exit(ute.error_code) except errors.ProcessingError as pe: errMsg = "({}): ERROR: Processing Error ({}): {}".format( TOOL_NAME, pe.error_code, pe.message) print(errMsg, file=sys.stderr) sys.exit(pe.error_code) finally: task.cleanup() # cleanup any task resources firh.cleanup() # cleanup resources opened here
def main (argv=None): """ The main method for the tool. This method is called from the command line, processes the command line arguments and calls into the ImdTk library to do its work. This main method takes no arguments so it can be called by setuptools. """ # the main method takes no arguments so it can be called by setuptools if (argv is None): # if called by setuptools argv = sys.argv[1:] # then fetch the arguments from the system # setup command line argument parsing and add shared arguments parser = argparse.ArgumentParser( prog=TOOL_NAME, formatter_class=argparse.RawTextHelpFormatter, description='Calculate ObsCore values from incoming metadata and an iRods FITS file, add the calculated fields to the metadata structure, and output it.' ) cli_utils.add_shared_arguments(parser, TOOL_NAME) cli_utils.add_input_file_argument(parser, TOOL_NAME) cli_utils.add_irods_fits_file_argument(parser, TOOL_NAME) cli_utils.add_hdu_argument(parser, TOOL_NAME) cli_utils.add_collection_argument(parser, TOOL_NAME) cli_utils.add_output_arguments(parser, TOOL_NAME) # actually parse the arguments from the command line args = vars(parser.parse_args(argv)) # if debugging, set verbose and echo input arguments if (args.get('debug')): args['verbose'] = True # if debug turn on verbose too print("({}.main): ARGS={}".format(TOOL_NAME, args), file=sys.stderr) # if input file path given, check the file path for validity input_file = args.get('input_file') cli_utils.check_input_file(input_file, TOOL_NAME) # may system exit here and not return! # add additional arguments to args args['TOOL_NAME'] = TOOL_NAME # get the iRods file path argument of the file to be opened irff_path = args.get('irods_fits_file') # the specified FITS file must have a valid FITS extension cli_utils.check_irods_fits_file(irff_path, TOOL_NAME) # may system exit here and not return! # get an instance of the iRods accessor class firh = FitsIRodsHelper(args) # instantiate the task task = IRods_JWST_ObsCoreCalcTask(args, firh) if (args.get('verbose')): print("({}): Processing iRods FITS file '{}'.".format(TOOL_NAME, irff_path), file=sys.stderr) # call task layer to process the input stream using the unvalidated remote iRods FITS file try: task.input_process_output() except errors.ProcessingError as pe: errMsg = "({}): ERROR: Processing Error ({}): {}".format( TOOL_NAME, pe.error_code, pe.message) print(errMsg, file=sys.stderr) sys.exit(pe.error_code) finally: task.cleanup() firh.cleanup() # cleanup resources opened here