Example #1
0
    def test_no_reverse_read(self):
        """
        The file list in the sample sheet is invalid
        :return:
        """
        directory = path.join(path_to_module, "fake_dir_data")
        file_path = path.join(directory, "list_no_reverse.csv")

        with self.assertRaises(SampleSheetError):
            res = sample_parser.parse_sample_list(file_path, directory)
Example #2
0
    def test_no_forward_read(self):
        """
        No Valid files were found with names given in sample sheet
        :return:
        """
        directory = path.join(path_to_module, "fake_dir_data")
        file_path = path.join(directory, "list_no_forward.csv")

        with self.assertRaises(SampleSheetError):
            res = sample_parser.parse_sample_list(file_path, directory)
Example #3
0
    def get_sequencing_run(sample_sheet, run_data_directory_file_list=None):
        """
        Does local validation on the integrity of the run directory / sample sheet

        Throws a ValidationError with a validation result attached if it cannot make a sequencing run

        :param sample_sheet:
        :return: SequencingRun
        """

        # get file list
        validation_result = model.ValidationResult()

        try:
            if run_data_directory_file_list is None:
                data_dir = os.path.dirname(sample_sheet)
                run_data_directory_file_list = common.get_file_list(data_dir)
        except exceptions.DirectoryError as error:
            validation_result.add_error(error)
            logging.error("Errors occurred while parsing files")
            raise exceptions.ValidationError(
                "Errors occurred while parsing files", validation_result)

        # Try to get the sample sheet, validate that the sample sheet is valid
        validation_result = validation.validate_sample_sheet(sample_sheet)
        if not validation_result.is_valid():
            logging.error("Errors occurred while getting sample sheet")
            raise exceptions.ValidationError(
                "Errors occurred while getting sample sheet",
                validation_result)

        # Try to build sequencing run from sample sheet & meta data, raise validation error if errors occur
        try:
            sample_list = sample_parser.parse_sample_list(
                sample_sheet, run_data_directory_file_list)
            run_metadata = sample_parser.parse_metadata(sample_list)
            sequencing_run = common.build_sequencing_run_from_samples(
                sample_list, run_metadata)
        except exceptions.SequenceFileError as error:
            validation_result.add_error(error)
            logging.error(
                "Errors occurred while building sequence run from sample sheet"
            )
            raise exceptions.ValidationError(
                "Errors occurred while building sequence run from sample sheet",
                validation_result)

        return sequencing_run
Example #4
0
    def test_valid_full_file_path(self, mock_parse_samples):
        """
        Given a valid sample sheet with full file paths, parse correctly
        :return:
        """
        sheet_file = path.join(path_to_module, "fake_dir_data",
                               "SampleList_simple.csv")

        file_path_1 = path.join(path_to_module,
                                "fake_dir_data", "file_1.fastq.gz")
        file_path_2 = path.join(path_to_module,
                                "fake_dir_data", "file_2.fastq.gz")

        sample_list = [
            model.Sample(
                sample_name='my-sample-1',
                description="",
                sample_number=0,
                samp_dict={
                    ('sample_project', '75'),
                    ('File_Forward', path.abspath(file_path_1)),
                    ('File_Reverse', path.abspath(file_path_2))
                }
            )
        ]

        mock_parse_samples.return_value = sample_list

        run_data_directory_file_list = ["file_1.fastq.gz", "file_2.fastq.gz"]
        res = sample_parser.parse_sample_list(sheet_file, run_data_directory_file_list)

        mock_parse_samples.assert_called_with(sheet_file)
        # Check we have 1 sample
        self.assertEqual(len(res), 1)
        # Check if data is correct
        self.assertEqual(res[0].sample_name, "my-sample-1")
        self.assertEqual(res[0].get_uploadable_dict()["sample_project"], "75")
        self.assertEqual(res[0].get_uploadable_dict()["File_Forward"], path.abspath(file_path_1))
        self.assertEqual(res[0].get_uploadable_dict()["File_Reverse"], path.abspath(file_path_2))
Example #5
0
    def test_valid(self):
        """
        Given a valid sample sheet, parse correctly
        :return:
        """
        sheet_file = path.join(path_to_module, "fake_dir_data",
                               "SampleList_simple.csv")

        file_path_1 = path.join(path_to_module,
                                "fake_dir_data", "file_1.fastq.gz")
        file_path_2 = path.join(path_to_module,
                                "fake_dir_data", "file_2.fastq.gz")

        run_data_directory_file_list = ["file_1.fastq.gz", "file_2.fastq.gz"]
        res = sample_parser.parse_sample_list(sheet_file, run_data_directory_file_list)

        # Check we have 1 sample
        self.assertEqual(len(res), 1)
        # Check if data is correct
        self.assertEqual(res[0].sample_name, "my-sample-1")
        self.assertEqual(res[0].get_uploadable_dict()["sample_project"], "75")
        self.assertEqual(res[0].get_uploadable_dict()["File_Forward"], "file_1.fastq.gz")
        self.assertEqual(res[0].get_uploadable_dict()["File_Reverse"], "file_2.fastq.gz")
Example #6
0
    def test_mixed_paired_and_single_reads(self):
        directory = path.join(path_to_module, "fake_dir_data")
        file_path = path.join(directory, "list_mixed.csv")

        with self.assertRaises(SampleSheetError):
            res = sample_parser.parse_sample_list(file_path, directory)