Example #1
0
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
Example #2
0
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
Example #3
0
def _check_snp_indel_pairings(altered_file_names, args):
    if not set([len(i) for i in altered_file_names.values()]) == set([1]):
        if not args.allow_inconsistent_sample_sets:
            error = 0
            for file_names in altered_file_names.values():
                if len(file_names) % 2 != 0:
                    message = ("File {} was missing a "
                               "corresponding snp/indel file.")
                    logger.error(message, file_names)
                    error = 1
            if error:
                message = ("Not all patients were represented by the same set "
                           "of caller-VCFs. Review inputs/command options to "
                           "align file pairings or use the flag "
                           "--allow_inconsistent_sample_sets.")
                raise utils.UsageError(message)
Example #4
0
def _check_snp_indel_pairings(altered_file_names, args):
    if not set([len(i) for i in altered_file_names.values()]) == set([1]):
        if not args.allow_inconsistent_sample_sets:
            error = 0
            for file_names in altered_file_names.values():
                if len(file_names) % 2 != 0:
                    message = ("File {} was missing a "
                               "corresponding snp/indel file.")
                    logger.error(message, file_names)
                    error = 1
            if error:
                message = ("Not all patients were represented by the same set "
                           "of caller-VCFs. Review inputs/command options to "
                           "align file pairings or use the flag "
                            "--allow_inconsistent_sample_sets.")
                raise utils.UsageError(message)
Example #5
0
    def test_error(self):
        tool = "foo"
        args = Namespace(subparser_name=tool, log_file=None, verbose=None)
        logger.initialize_logger(args)
        logger.error("bar")

        root_logger = logger.logging.getLogger()

        current_time = datetime.now().strftime('%Y-%m-%d')
        output_lines = self.output.getvalue().rstrip().split("\n")

        ##nosetests overwrites logger.FileHandler
        self.assertEquals(["root: ERROR: bar"], root_logger.handlers[0].buffer)

        self.assertRegexpMatches(output_lines[0],
                                 "" + current_time + r".*\|ERROR\|foo\|bar")
Example #6
0
    def _validate_vcf_readers(prefix_by_patients):
        number_of_files = set()
        for file_names in prefix_by_patients.values():
            if len(file_names) == 1:
                for file_name in file_names:
                    if re.search("snp", file_name):
                        msg = "VarScan VCF [{}] has no indel file."
                        logger.error(msg, file_name)
                    elif re.search("indel", file_name):
                        msg = "VarScan VCF [{}] has no snp file."
                        logger.error(msg, file_name)
            number_of_files.add(len(file_names))

        if len(number_of_files) > 1:
            msg = ("Some Varscan VCFs were missing either a snp or indel file. "
                   "Review inputs/command options and try again.")
            raise utils.JQException(msg)
    def test_error(self):
        tool = "foo"
        args = Namespace(subparser_name=tool,
                         log_file=None,
                         verbose=None)
        logger.initialize_logger(args)
        logger.error("bar")

        root_logger = logger.logging.getLogger()

        current_time = datetime.now().strftime('%Y-%m-%d')
        output_lines = self.output.getvalue().rstrip().split("\n")

        ##nosetests overwrites logger.FileHandler
        self.assertEquals(["root: ERROR: bar"], root_logger.handlers[0].buffer)

        self.assertRegexpMatches(output_lines[0], ""+current_time+r".*\|ERROR\|foo\|bar")
Example #8
0
    def _validate_vcf_readers(prefix_by_patients):
        number_of_files = set()
        for file_names in prefix_by_patients.values():
            if len(file_names) == 1:
                for file_name in file_names:
                    if re.search("snvs", file_name):
                        msg = "Strelka VCF [{}] has no indels file."
                        logger.error(msg, file_name)
                    elif re.search("indels", file_name):
                        msg = "Strelka VCF [{}] has no snvs file."
                        logger.error(msg, file_name)
            number_of_files.add(len(file_names))

        if len(number_of_files) > 1:
            msg = ("Some Strelka VCFs were missing either a snvs or indels "
                   "file. Review inputs/command options and try again.")
            raise utils.JQException(msg)