def _handler(dummy_signum, dummy_frame): msg = "WARNING: Jacquard was interrupted before completing." try: logger.debug(msg) finally: print(msg, file=sys.stderr) exit(1)
def test_initialize_logger_notVerbose(self): tool = "foo" args = Namespace(subparser_name=tool, log_file=None, verbose=None) logger.initialize_logger(args) logger.debug("bar") output_lines = self.output.getvalue().rstrip().split("\n") root_logger = logger.logging.getLogger() self.assertEquals(["root: DEBUG: bar"], root_logger.handlers[0].buffer) self.assertEquals(output_lines[0], "")
def _move_tmp_contents_to_original(args): temp_dir = args.temp_working_dir dest_dir = os.path.dirname(args.temp_working_dir) logger.debug( "Moving files from tmp directory [{}] to output " "directory [{}]", temp_dir, dest_dir) distutils.dir_util.copy_tree(temp_dir, dest_dir) logger.debug("Output saved to [{}]", os.path.abspath(args.original_output)) logger.info("Output saved to [{}]", args.original_output) _cleanup(temp_dir)
def execute(args, dummy_execution_context): #for the moment, there is no good place to put the execution context input_file = os.path.abspath(args.input) output_file = os.path.abspath(args.output) col_spec = None if args.selected_columns_file: col_spec = args.selected_columns_file logger.debug("Expanding [{}] to [{}]", input_file, output_file) logger.info("Expanding [{}] to [{}]", args.input, args.original_output) vcf_reader = vcf.VcfReader(vcf.FileReader(input_file)) file_writer = vcf.FileWriter(output_file) file_writer.open() (columns, glossary_fields) = _get_actual_columns(vcf_reader, col_spec) file_writer.write("#" + "\t".join(columns) + "\n") line_count = 0 vcf_reader.open() for vcf_record in vcf_reader.vcf_records(): row_dict = _create_row_dict(vcf_reader.split_column_header, vcf_record) new_line = [] for col in columns: if col in row_dict: new_line.append(row_dict[col]) else: new_line.append(".") file_writer.write("\t".join(new_line) + "\n") line_count +=1 if line_count % 10000 == 0: logger.info("Expanding: {} rows processed", line_count) logger.info("Expand complete: {} rows processed", line_count) file_writer.close() glossary_writer = _get_glossary_writer(output_file) glossary_writer.open() _create_glossary(vcf_reader.metaheaders, glossary_fields, glossary_writer) glossary_writer.close() logger.info("Wrote glossary to [{}]", os.path.basename(glossary_writer.output_filepath)) vcf_reader.close() logger.debug("Wrote input [{}] to output [{}]", input_file, output_file)
def _move_tmp_contents_to_original(args): temp_dir = args.temp_working_dir dest_dir = os.path.dirname(args.temp_working_dir) logger.debug("Moving files from tmp directory [{}] to output " "directory [{}]", temp_dir, dest_dir) distutils.dir_util.copy_tree(temp_dir, dest_dir) logger.debug("Output saved to [{}]", os.path.abspath(args.original_output)) logger.info("Output saved to [{}]", args.original_output) _cleanup(temp_dir)
def log_statistics(self): cell_msg = "{}% ({}) cells were excluded because (--include_cells={})" logger.info(cell_msg, int(round(100 * self.cells_excluded / self.cell_count, 0)), self.cells_excluded, self._args.include_cells) row_msg = "{}% ({}) rows were excluded because (--include_rows={})" logger.info(row_msg, int(round(100 * self.rows_excluded / self.row_count, 0)), self.rows_excluded, self._args.include_rows) for key, count in self.excluded_breakdown.items(): msg = "{} cells were excluded with [{}]" logger.debug(msg, count, key)
def test_initialize_logger_verbose(self): tool = "foo" args = Namespace(subparser_name=tool, log_file=None, verbose=True) logger.initialize_logger(args) logger.debug("bar") root_logger = logger.logging.getLogger() current_time = datetime.now().strftime('%Y-%m-%d') output_lines = self.output.getvalue().rstrip().split("\n") self.assertRegexpMatches(output_lines[0], "" + current_time + r".*\|DEBUG\|foo\|bar") self.assertEquals(["root: DEBUG: bar"], root_logger.handlers[0].buffer) self.assertRegexpMatches(output_lines[0], r"" + current_time + "|DEBUG|foo|bar'")
def test_initialize_logger_verbose(self): tool = "foo" args = Namespace(subparser_name=tool, log_file=None, verbose=True) logger.initialize_logger(args) logger.debug("bar") root_logger = logger.logging.getLogger() current_time = datetime.now().strftime('%Y-%m-%d') output_lines = self.output.getvalue().rstrip().split("\n") self.assertRegexpMatches(output_lines[0], ""+current_time+r".*\|DEBUG\|foo\|bar") self.assertEquals(["root: DEBUG: bar"], root_logger.handlers[0].buffer) self.assertRegexpMatches(output_lines[0], r""+current_time+"|DEBUG|foo|bar'")
def execute(args, dummy_execution_context): #for the moment, there is no good place to put the execution context input_file = os.path.abspath(args.input) output_file = os.path.abspath(args.output) col_spec = None if args.selected_columns_file: col_spec = args.selected_columns_file logger.debug("Expanding [{}] to [{}]", input_file, output_file) logger.info("Expanding [{}] to [{}]", args.input, args.original_output) vcf_reader = vcf.VcfReader(vcf.FileReader(input_file)) file_writer = vcf.FileWriter(output_file) file_writer.open() (columns, glossary_fields) = _get_actual_columns(vcf_reader, col_spec) file_writer.write("#" + "\t".join(columns) + "\n") line_count = 0 vcf_reader.open() for vcf_record in vcf_reader.vcf_records(): row_dict = _create_row_dict(vcf_reader.split_column_header, vcf_record) new_line = [] for col in columns: if col in row_dict: new_line.append(row_dict[col]) else: new_line.append(".") file_writer.write("\t".join(new_line) + "\n") line_count += 1 if line_count % 10000 == 0: logger.info("Expanding: {} rows processed", line_count) logger.info("Expand complete: {} rows processed", line_count) file_writer.close() glossary_writer = _get_glossary_writer(output_file) glossary_writer.open() _create_glossary(vcf_reader.metaheaders, glossary_fields, glossary_writer) glossary_writer.close() logger.info("Wrote glossary to [{}]", os.path.basename(glossary_writer.output_filepath)) vcf_reader.close() logger.debug("Wrote input [{}] to output [{}]", input_file, output_file)
def _get_unsorted_readers(vcf_readers): unsorted_readers = [] for i, reader in enumerate(vcf_readers): logger.info("Checking sort order of [{}] ({}/{})", reader.file_name, i + 1, len(vcf_readers)) previous_record = None reader.open() for vcf_record in reader.vcf_records(): if previous_record and vcf_record < previous_record: logger.debug( "VCF file:chrom:pos [{}:{}:{}] is out of order".format( reader.file_name, vcf_record.chrom, vcf_record.pos)) unsorted_readers.append(reader) break else: previous_record = vcf_record reader.close() return unsorted_readers
def _get_unsorted_readers(vcf_readers): unsorted_readers = [] for i, reader in enumerate(vcf_readers): logger.info("Checking sort order of [{}] ({}/{})", reader.file_name, i+1, len(vcf_readers) ) previous_record = None reader.open() for vcf_record in reader.vcf_records(): if previous_record and vcf_record < previous_record: logger.debug("VCF file:chrom:pos [{}:{}:{}] is out of order" .format(reader.file_name, vcf_record.chrom, vcf_record.pos)) unsorted_readers.append(reader) break else: previous_record = vcf_record reader.close() return unsorted_readers
def _cleanup(temp_working_dir): if temp_working_dir and os.path.exists(temp_working_dir): logger.debug("Cleaning up tmp directory") shutil.rmtree(temp_working_dir)
def _dispatch(modules, arguments): try: command, args = _parse_command_line_args(modules, arguments) execution_context = _get_execution_context(arguments) logger.initialize_logger(args) logger.debug("Jacquard run begins") logger.debug("cwd|{}", os.getcwd()) logger.debug("command|{}", " ".join(arguments)) command_validator.preflight(command, args) logger.info("Jacquard begins (v{})", __version__) logger.info("Saving log to [{}]", os.path.basename(logger.log_filename)) logger.debug("Writing output to tmp directory [{}]", args.temp_working_dir) command.execute(args, execution_context) _move_tmp_contents_to_original(args) if logger.WARNING_OCCURRED: logger.info("Done. (See warnings above)") else: logger.info("Done") except utils.UsageError as usage_error: message = "Jacquard usage problem: {}".format(str(usage_error)) logger.debug(message) print(message, file=sys.stderr) try: print("See 'jacquard {} --help'.".format(args.subparser_name), file=sys.stderr) except NameError: #could not determine the command print("See 'jacquard --help'.", file=sys.stderr) sys.exit(1) except Exception as exception: #pylint: disable=broad-except logger.error(str(exception)) logger.error("Jacquard encountered an unanticipated problem. " "Please review log file and contact your sysadmin " "or Jacquard support for assistance.") logger.debug(traceback.format_exc()) sys.exit(1) finally: try: _cleanup(args.temp_working_dir) except Exception: #pylint: disable=broad-except pass #we tried