diff --git a/modules/bindings/pymod/clustalw.py b/modules/bindings/pymod/clustalw.py index 084fe8d3337acd235fcd6fe9453ac56af63292aa..e5400d1ac58d9d621ff27fa1b403b7e6421a7f57 100644 --- a/modules/bindings/pymod/clustalw.py +++ b/modules/bindings/pymod/clustalw.py @@ -92,6 +92,13 @@ def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, nopgap=False, LogError("WARNING: Specify either two SequenceHandles or one SequenceList") return + sequence_names = set() + for s in seq_list: + sequence_names.add(s.GetName()) + if len(sequence_names) < len(seq_list): + raise ValueError("ClustalW can only process sequences with unique identifiers!") + + new_list = seq.CreateSequenceList() for s in seq_list: ss = s.Copy() @@ -101,6 +108,7 @@ def ClustalW(seq1, seq2=None, clustalw=None, keep_files=False, nopgap=False, new_list.AddSequence(ss) seq_list = new_list + temp_dir=utils.TempDirWithFiles((seq_list,)) out=os.path.join(temp_dir.dirname, 'out.fasta') diff --git a/modules/bindings/tests/test_clustalw.py b/modules/bindings/tests/test_clustalw.py index 9aaf210f8be644f2126b7a1bff6e859c43ce3fe0..f5625ce9bc4636aa7e98071bad5021c3d22dc256 100644 --- a/modules/bindings/tests/test_clustalw.py +++ b/modules/bindings/tests/test_clustalw.py @@ -62,6 +62,13 @@ class TestClustalWBindings(unittest.TestCase): assert self.seq1_seq2_alignment_options_changed.ToString(80) == aln.ToString(80), \ "Pairwise alignment with modified gap penalties differs from precomputed one" + def testUniqueIdentifier(self): + seq1 = seq.CreateSequence('heelloo','AWESOME') + seq2 = seq.CreateSequence('heelloo','AWESOME') + + self.assertRaises(ValueError,clustalw.ClustalW,seq1,seq2) + + if __name__ == "__main__": # test if clustalw package is available on system, otherwise ignore tests try: