diff --git a/python/obitools3/commands/ngsfilter.pyx b/python/obitools3/commands/ngsfilter.pyx index 53d7827..89ae5ba 100644 --- a/python/obitools3/commands/ngsfilter.pyx +++ b/python/obitools3/commands/ngsfilter.pyx @@ -172,6 +172,13 @@ cdef read_info_view(info_view, max_errors=2, verbose=False, not_aligned=False): primer_list = [] i=0 for p in info_view: + + # Check primer length: should not be longer than 32, the max allowed by the apat lib + if len(p[b'forward_primer']) > 32: + raise RollbackException("Error: primers can not be longer than 32bp, rollbacking views") + if len(p[b'reverse_primer']) > 32: + raise RollbackException("Error: primers can not be longer than 32bp, rollbacking views") + forward=Primer(p[b'forward_primer'], len(p[b'forward_tag']) if (b'forward_tag' in p and p[b'forward_tag']!=None) else None, True, @@ -594,7 +601,13 @@ def run(config): pb = ProgressBar(entries_len, config, seconde=5) # Check and store primers and tags - infos, primer_list = read_info_view(info_view, max_errors=config['ngsfilter']['error'], verbose=False, not_aligned=not_aligned) # TODO obi verbose option + try: + infos, primer_list = read_info_view(info_view, max_errors=config['ngsfilter']['error'], verbose=False, not_aligned=not_aligned) # TODO obi verbose option + except RollbackException, e: + if unidentified is not None: + raise RollbackException("obi ngsfilter error, rollbacking views: "+str(e), o_view, unidentified) + else: + raise RollbackException("obi ngsfilter error, rollbacking view: "+str(e), o_view) aligner = Primer_search(primer_list, config['ngsfilter']['error']) @@ -652,11 +665,11 @@ def run(config): #print("\n\nOutput view:\n````````````", file=sys.stderr) #print(repr(o_view), file=sys.stderr) - input[0].close() - output[0].close() - info_input[0].close() + input[0].close(force=True) + output[0].close(force=True) + info_input[0].close(force=True) if unidentified is not None: - unidentified_input[0].close() + unidentified_input[0].close(force=True) aligner.free() logger("info", "Done.")