diff --git a/src/shmir/data/ncbi_api.py b/src/shmir/data/ncbi_api.py index 212fb29..5c95100 100644 --- a/src/shmir/data/ncbi_api.py +++ b/src/shmir/data/ncbi_api.py @@ -6,8 +6,8 @@ import re from Bio import Entrez -from designer import errors -import settings +from shmir.designer import errors +from shmir import settings def get_data( diff --git a/src/shmir/designer/validators.py b/src/shmir/designer/validators.py index 897d326..ef128e5 100644 --- a/src/shmir/designer/validators.py +++ b/src/shmir/designer/validators.py @@ -132,3 +132,15 @@ def check_input(seq_to_be_check): return check_complementary(ch_seq1[0], ch_seq2[0]) else: raise errors.InputException('{}'.format(errors.error)) + + +def calculate_gc_content(sequence): + sequence = sequence.upper() + g_count = sequence.count('G') + c_count = sequence.count('C') + + return int((float(g_count + c_count) / len(sequence)) * 100) + + +def validate_gc_content(sequence, min_percent, max_percent): + return min_percent <= calculate_gc_content(sequence) <= max_percent diff --git a/src/shmir/tests/test_ncbi_api.py b/src/shmir/tests/test_ncbi_api.py index 3d11fe4..bd7568f 100644 --- a/src/shmir/tests/test_ncbi_api.py +++ b/src/shmir/tests/test_ncbi_api.py @@ -6,8 +6,8 @@ patch ) -from data import ncbi_api -from designer import errors +from shmir.data import ncbi_api +from shmir.designer import errors class TestGetDataFromNcbi(unittest.TestCase): diff --git a/src/shmir/tests/test_validators.py b/src/shmir/tests/test_validators.py new file mode 100644 index 0000000..5e3631c --- /dev/null +++ b/src/shmir/tests/test_validators.py @@ -0,0 +1,27 @@ +import unittest + +from shmir.designer.validators import ( + calculate_gc_content, + validate_gc_content, +) + + +class TestValidators(unittest.TestCase): + + def test_calculate_gc_content(self): + seq_percent = calculate_gc_content('ACGT') + self.assertEqual(seq_percent, 50) + + seq_percent = calculate_gc_content('CCCCGGGG') + self.assertEqual(seq_percent, 100) + + seq_percent = calculate_gc_content('ACTTTTTTTA') + self.assertEqual(seq_percent, 10) + + def test_validate_gc_content(self): + is_in_range = validate_gc_content('ACGT', 40, 60) + self.assertTrue(is_in_range) + + def test_validate_gc_content_not_in_range(self): + not_in_range = validate_gc_content('ACGT', 52, 70) + self.assertFalse(not_in_range)