def testSpacesMustBePreserved(self): """ If there are spaces in the query title or subject titles, the spaces must be preserved. """ mockOpener = mockOpen(read_data=DIAMOND_RECORD_WITH_SPACES) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') acc94 = list(reader.records()) self.assertEqual('ACC 94', acc94[0]['query']) self.assertEqual('IN SV', acc94[0]['alignments'][0]['title'])
def testSaveAsJSON(self): """ A DiamondTabularFormatReader must be able to save itself as JSON. """ mockOpener = mockOpen(read_data=DIAMOND_RECORDS) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') fp = StringIO() reader.saveAsJSON(fp) self.maxDiff = None self.assertEqual(DIAMOND_RECORDS_DUMPED, fp.getvalue())
def testSpacesMustBePreserved(self): """ If there are spaces in the query title or subject titles, the spaces must be preserved. """ mockOpener = mockOpen(read_data=DIAMOND_RECORD_WITH_SPACES_IN_TITLES) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') acc94 = list(reader.records()) self.assertEqual('ACC 94', acc94[0]['query']) self.assertEqual('IN SV', acc94[0]['alignments'][0]['title'])
def testDiamondInput(self): """ Test conversion of a chunk of DIAMOND output. """ mockOpener = mockOpen(read_data=DIAMOND_RECORDS) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') acc94, akav, bhav = list(reader.records()) self.assertEqual(5, len(acc94['alignments'])) self.assertEqual(2, len(akav['alignments'])) self.assertEqual(2, len(bhav['alignments']))
def testSaveAsJSONBzip2(self): """ A DiamondTabularFormatReader must be able to save itself as bzip2'd JSON. """ mockOpener = mockOpen(read_data=DIAMOND_RECORDS) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') data = BytesIO() fp = bz2file.BZ2File(data, 'w') reader.saveAsJSON(fp, writeBytes=True) fp.close() self.assertEqual(compress(DIAMOND_RECORDS_DUMPED.encode('UTF-8')), data.getvalue())
def testDiamondInputWithoutNidentOrPositives(self): """ Test conversion of a chunk of DIAMOND output that does not contain the nident or positives fields. """ mockOpener = mockOpen( read_data=DIAMOND_RECORDS_WITHOUT_NIDENT_AND_POSITIVE) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') acc94, akav, bhav = list(reader.records()) for record in acc94, akav, bhav: for alignment in record['alignments']: for hsp in alignment['hsps']: self.assertIs(None, hsp['identicalCount'])
def testSaveAsJSONBzip2(self): """ A DiamondTabularFormatReader must be able to save itself as bzip2'd JSON. """ mockOpener = mockOpen(read_data=DIAMOND_RECORDS) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') data = BytesIO() fp = bz2file.BZ2File(data, 'w') reader.saveAsJSON(fp, writeBytes=True) fp.close() self.assertEqual( compress(DIAMOND_RECORDS_DUMPED.encode('UTF-8')), data.getvalue())
def testDiamondParams(self): """ When a DIAMOND file has been read, its parameters must be present in the reader instance. """ mockOpener = mockOpen(read_data=DIAMOND_RECORDS) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') list(reader.records()) self.assertEqual('DIAMOND', reader.application) self.assertEqual( { 'application': 'DIAMOND', 'reference': ( 'Buchfink et al., Fast and Sensitive Protein ' 'Alignment using DIAMOND, Nature Methods, 12, ' '59-60 (2015)'), 'task': 'blastx', 'version': 'v0.8.23', }, reader.params)
def testDiamondParams(self): """ When a DIAMOND file has been read, its parameters must be present in the reader instance. """ mockOpener = mockOpen(read_data=DIAMOND_RECORDS) with patch.object(builtins, 'open', mockOpener): reader = DiamondTabularFormatReader('file.txt') list(reader.records()) self.assertEqual('DIAMOND', reader.application) self.assertEqual( { 'application': 'DIAMOND', 'reference': ('Buchfink et al., Fast and Sensitive Protein ' 'Alignment using DIAMOND, Nature Methods, 12, ' '59-60 (2015)'), 'task': 'blastx', 'version': 'v0.8.23', }, reader.params)
'--outfmt 6 qtitle stitle bitscore evalue qframe qseq ' 'qstart qend sseq sstart send slen btop' 'Note that only each line of the output is JSON (the full ' 'output is not valid JSON by itself).') ) parser.add_argument( '--json', metavar='JSON-output-file', help=('The JSON filename to write the converted DIAMOND file to. If ' 'omitted, standard output will be used.')) parser.add_argument( '--diamond', metavar='DIAMOND-file', default=sys.stdin, help=('The DIAMOND tabular output file to convert. If omitted, ' 'standard input will be read.')) parser.add_argument( '--bzip2', default=False, action='store_true', help='Compress output using bzip2.') args = parser.parse_args() if args.bzip2: fp = bz2file.BZ2File(args.json or sys.stdout, 'w') else: fp = open(args.json, 'w') if args.json else sys.stdout reader = DiamondTabularFormatReader(args.diamond) reader.saveAsJSON(fp, writeBytes=args.bzip2) fp.close()
'output is not valid JSON by itself).')) parser.add_argument( '--json', metavar='JSON-output-file', help=('The JSON filename to write the converted DIAMOND file to. If ' 'omitted, standard output will be used.')) parser.add_argument( '--diamond', metavar='DIAMOND-file', default=sys.stdin, help=('The DIAMOND tabular output file to convert. If omitted, ' 'standard input will be read.')) parser.add_argument('--bzip2', default=False, action='store_true', help='Compress output using bzip2.') args = parser.parse_args() if args.bzip2: fp = bz2file.BZ2File(args.json or sys.stdout, 'w') else: fp = open(args.json, 'w') if args.json else sys.stdout reader = DiamondTabularFormatReader(args.diamond) reader.saveAsJSON(fp, writeBytes=args.bzip2) fp.close()