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
def get_sequencing_run(sample_sheet): """ Does local validation on the integrety of the run directory / sample sheet Throws a ValidationError with a valadation result attached if it cannot make a sequencing run :param sample_sheet: :return: SequencingRun """ # 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 parse the meta data from the sample sheet, throw validation error if errors occur validation_result = model.ValidationResult() try: run_metadata = sample_parser.parse_metadata(sample_sheet) except exceptions.SampleSheetError as error: validation_result.add_error(error) logging.error("Errors occurred while parsing metadata") raise exceptions.ValidationError( "Errors occurred while parsing metadata", validation_result) # Try to build sequencing run from sample sheet & meta data, raise validation error if errors occur try: sequencing_run = sample_parser.build_sequencing_run_from_samples( sample_sheet, 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
def get_sequencing_run(self, sample_sheet, run_data_directory=None, run_data_directory_file_list=None): """ Does local validation on the integrety of the run directory / sample sheet Throws a ValidationError with a valadation result attached if it cannot make a sequencing run :param sample_sheet: Sample Sheet File :param run_data_directory: Optional: Directory (including run directory) to data files. Can be provided for bypassing os calls when developing on cloud systems :param run_data_directory_file_list: Optional: List of files in data directory. Can be provided for bypassing os calls when developing on cloud systems :return: SequencingRun """ # get data directory and file list validation_result = model.ValidationResult() try: if run_data_directory is None: run_data_directory = Parser.get_full_data_directory( sample_sheet) if run_data_directory_file_list is None: run_data_directory_file_list = common.get_file_list( run_data_directory) 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 parse the meta data from the sample sheet, throw validation error if errors occur validation_result = model.ValidationResult() try: run_metadata = sample_parser.parse_metadata(sample_sheet) except exceptions.SampleSheetError as error: validation_result.add_error(error) logging.error("Errors occurred while parsing metadata") raise exceptions.ValidationError( "Errors occurred while parsing metadata", 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, run_data_directory_file_list) sequencing_run = common.build_sequencing_run_from_samples( sample_list, run_metadata, self.get_parser_type_name()) 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
def get_sequencing_run(self, 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: :param run_data_directory_file_list: Optional: List of files in the data directory to verify against the SampleList.csv file. This is used when deploying the parsers on a cloud environment. :return: SequencingRun """ # 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) # When running with a premade file list, verify files on sample_sheet are in file list try: if run_data_directory_file_list is not None: sample_parser.verify_sample_sheet_file_names_in_file_list( sample_sheet, run_data_directory_file_list) except (exceptions.SequenceFileError, exceptions.SampleSheetError) 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) except Exception as error: validation_result.add_error(error) logging.error("System error while building sequencing run") raise exceptions.ValidationError( "System error while building sequencing run", validation_result) # Build a list of sample objects from sample sheet try: if run_data_directory_file_list is not None: sample_list = sample_parser.build_sample_list_from_sample_sheet_no_verify( sample_sheet) else: sample_list = sample_parser.build_sample_list_from_sample_sheet_with_abs_path( sample_sheet) except (exceptions.DirectoryError, exceptions.SampleSheetError) as error: validation_result.add_error(error) logging.error("Errors occurred while parsing files") raise exceptions.ValidationError( "Errors occurred while parsing files", validation_result) except Exception as error: validation_result.add_error(error) logging.error("System error while parsing files") raise exceptions.ValidationError( "System error while parsing files", validation_result) # verify samples in sample_list are all of one type, either single or paired end if not sample_parser.only_single_or_paired_in_sample_list(sample_list): e = exceptions.SampleSheetError(( "Your sample sheet is malformed. " "SampleSheet cannot have both paired end and single end runs. " "Make sure all samples are either paired or single."), sample_sheet) validation_result.add_error(e) logging.error( "Error occurred while building file list: Sample sheet has both paired and single end reads" ) raise exceptions.ValidationError( "Errors occurred while building file list.", validation_result) # Try to build sequencing run from sample sheet & meta data, raise validation error if errors occur try: run_metadata = sample_parser.parse_metadata(sample_list) sequencing_run = common.build_sequencing_run_from_samples( sample_list, run_metadata, self.get_parser_type_name()) 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