Source code for rnaglib.transforms.annotate.rfam
import requests
from rnaglib.transforms import Transform
[docs]
class RfamTransform(Transform):
"""Obtain the Rfam classification of an RNA and store
as a graph attribute. If no annotation is found, stores ``None``.
"""
name = "rfam"
encoder = None
def forward(self, rna_dict: dict) -> dict:
base_url = "https://www.ebi.ac.uk/pdbe/api/nucleic_mappings/rfam/"
pdbid = rna_dict["rna"].graph["pdbid"].lower()
url = f"{base_url}{pdbid}"
try:
response = requests.get(url)
response.raise_for_status() # Raises an HTTPError for bad responses
data = response.json()
if pdbid.lower() in data and "Rfam" in data[pdbid]:
# Get the first Rfam accession number found
rfam_acc = next(iter(data[pdbid]["Rfam"].keys()), "N/A")
else:
rfam_acc = None
except requests.RequestException as e:
rfam_acc = None
except (KeyError, IndexError, ValueError) as e:
rfam_acc = None
rna_dict["rna"].graph[self.name] = rfam_acc
return rna_dict