Adding a fix for cases when the residue API returns more than one entity per chain label

This commit is contained in:
Mihaly Varadi 2019-02-20 14:39:12 +00:00
parent ada4ffc21c
commit b37b155bfc
4 changed files with 86 additions and 4 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
.idea*
.cache*
*vcs.xml
sample_data/*

View file

@ -0,0 +1,71 @@
{
"data_resource": "ProKinO",
"resource_version": "2.0",
"software_version": "2.0",
"resource_entry_url": "http://vulcan.cs.uga.edu/prokino/",
"release_date": "10/02/2017",
"pdb_id": "1yj9",
"chains": [
{
"residues": [
{
"pdb_res_label": "0",
"aa_type": "MET",
"site_data": [
{
"confidence_score": 1,
"site_id_ref": 1,
"confidence_classification": "high",
"raw_score": 1
}
]
},
{
"pdb_res_label": "1",
"aa_type": "GLY",
"site_data": [
{
"confidence_score": 1,
"site_id_ref": 2,
"confidence_classification": "high",
"raw_score": 1
}
]
},
{
"pdb_res_label": "2",
"aa_type": "ARG",
"site_data": [
{
"confidence_score": 1,
"site_id_ref": 2,
"confidence_classification": "high",
"raw_score": 1
}
]
}
],
"chain_label": "A"
}
],
"sites": [
{
"site_id": 1,
"label": "HRD motif"
},
{
"site_id": 2,
"label": "HRD motif"
},
{
"site_id": 3,
"label": "HRD motif"
}
],
"evidence_code_ontology": [
{
"eco_term": "computational combinatorial evidence",
"eco_code": "ECO_0000246"
}
]
}

View file

@ -23,6 +23,9 @@ from validator.residue_index import ResidueIndexes
with open("data/test_data.json", "r") as mock_data_file:
mock_data = json.load(mock_data_file)
with open("data/test_data_multichain.json", "r") as mock_data_file_multichain:
mock_data_multichain = json.load(mock_data_file_multichain)
mock_data_no_pdb_id = {"foo": "bar"}
mock_data_bad_numbering = {"pdb_id": "2aqa",
@ -102,3 +105,8 @@ class TestCheckResidueIndices(TestCase):
result = self.cri._process_residues(
[{"author_residue_number": 1, "residue_name": "ALA", "author_insertion_code": ""}], "1", "HIS")
self.assertFalse(result)
def test_with_multichain(self):
self.cri = ResidueIndexes(mock_data_multichain)
result = self.cri.check_every_residue()
self.assertTrue(result)

View file

@ -116,13 +116,15 @@ class ResidueIndexes(object):
:param depositor_aa_type: Residue amino acid code provided by user
:return: True is residue numbering is valid, False if not
"""
flag = None
for item in data:
sub_data = item[label]
if label == "chains":
return self._recursive_loop(sub_data, "residues", depositor_residue_number, depositor_aa_type)
flag = self._recursive_loop(sub_data, "residues", depositor_residue_number, depositor_aa_type)
elif label == "residues":
return self._process_residues(sub_data, depositor_residue_number, depositor_aa_type)
return False
if label == "chains":
return flag
def _process_residues(self, residues, depositor_residue_number, depositor_aa_type):
"""