import logging
from bravado.client import SwaggerClient
logger = logging.getLogger(__name__)
# courtesy of OpenCADD
POCKET_KLIFS_REGIONS = [
(1, "I"),
(2, "I"),
(3, "I"),
(4, "g.l"),
(5, "g.l"),
(6, "g.l"),
(7, "g.l"),
(8, "g.l"),
(9, "g.l"),
(10, "II"),
(11, "II"),
(12, "II"),
(13, "II"),
(14, "III"),
(15, "III"),
(16, "III"),
(17, "III"),
(18, "III"),
(19, "III"),
(20, "αC"),
(21, "αC"),
(22, "αC"),
(23, "αC"),
(24, "αC"),
(25, "αC"),
(26, "αC"),
(27, "αC"),
(28, "αC"),
(29, "αC"),
(30, "αC"),
(31, "b.l"),
(32, "b.l"),
(33, "b.l"),
(34, "b.l"),
(35, "b.l"),
(36, "b.l"),
(37, "b.l"),
(38, "IV"),
(39, "IV"),
(40, "IV"),
(41, "IV"),
(42, "V"),
(43, "V"),
(44, "V"),
(45, "GK"),
(46, "hinge"),
(47, "hinge"),
(48, "hinge"),
(49, "linker"),
(50, "linker"),
(51, "linker"),
(52, "linker"),
(53, "αD"),
(54, "αD"),
(55, "αD"),
(56, "αD"),
(57, "αD"),
(58, "αD"),
(59, "αD"),
(60, "αE"),
(61, "αE"),
(62, "αE"),
(63, "αE"),
(64, "αE"),
(65, "VI"),
(66, "VI"),
(67, "VI"),
(68, "c.l"),
(69, "c.l"),
(70, "c.l"),
(71, "c.l"),
(72, "c.l"),
(73, "c.l"),
(74, "c.l"),
(75, "c.l"),
(76, "VII"),
(77, "VII"),
(78, "VII"),
(79, "VIII"),
(80, "xDFG"),
(81, "xDFG"),
(82, "xDFG"),
(83, "xDFG"),
(84, "a.l"),
(85, "a.l"),
]
"""list[tuple[int, str]]: Mapping KLIFS pocket ID to region"""
POCKET_KLIFS_REGION_COLORS = {
"I" : "khaki",
"g.l": "green",
"II": "khaki",
"III": "khaki",
"αC": "red",
"b.l": "green",
"IV": "khaki",
"V": "khaki",
"GK": "orange",
"hinge": "magenta",
"linker": "cyan",
"αD": "red",
"αE": "red",
"VI": "khaki",
"c.l": "darkorange",
"VII": "khaki",
"VIII": "khaki",
"xDFG": "cornflowerblue",
"a.l": "cornflowerblue",
}
"""dict[str, str]: Mapping KLIFS pocket region to color"""
[docs]
class KLIFS():
"""Class to interact with the KLIFS API."""
[docs]
def __init__(self):
"""Initialize KLIFS Class object.
Upon initialization, KLIFS API is queried.
Attributes
----------
url : str
KLIFS API URL
_klifs : bravado.client.SwaggerClient
KLIFS API object
"""
self.url = "https://dev.klifs.net/swagger_v2/swagger.json"
self._klifs = self.query_klifs_api()
[docs]
def query_klifs_api(self):
"""Get KLIFS API as bravado.client.SwaggerClient object.
Returns
-------
bravado.client.SwaggerClient
KLIFS API object
"""
klifs_api = SwaggerClient.from_url(
self.url,
config={
"validate_requests": False,
"validate_responses": False,
"validate_swagger_spec": False
}
)
return klifs_api
[docs]
def get_url(self):
"""Get KLIFS API URL."""
return self.url
[docs]
def get_klifs(self):
"""Get KLIFS API object."""
return self._klifs
[docs]
class KinaseInfo(KLIFS):
"""Class to get information about a kinase from KLIFS.
"""
[docs]
def __init__(
self,
kinase_name: str,
species: str = "Human",
) -> None:
"""Initialize KinaseInfo Class object.
Upon initialization, KLIFS API is queried and kinase information for specificied kinase is retrieved.
Parameters
----------
kinase_name : str
Name of the kinase
species : str
Species of the kinase; default "Human" but can also be "Mouse"
Attributes
----------
kinase_name : str
Name of the kinase searched
species : str
Species of the kinase
_kinase_info : dict[str, str | int | None]
KLIFS API object
"""
super().__init__()
self.kinase_name = kinase_name
self.species = species
self._kinase_info = self.query_kinase_info()
[docs]
def query_kinase_info(
self
) -> dict[str, str | int | None]:
"""Get information about a kinase from KLIFS.
Returns
-------
dict[str, str | int | None]
Dictionary with information about the kinase
"""
try:
kinase_info = (
self._klifs.Information.get_kinase_ID(
kinase_name=[self.kinase_name],
species=self.species)
.response()
.result[0]
)
list_key = dir(kinase_info)
list_val = [getattr(kinase_info, key) for key in list_key]
dict_kinase_info = dict(zip(list_key, list_val))
except Exception as e:
print(f"Error in query_kinase_info for {self.kinase_name}:")
print(e)
list_key = [
"family",
"full_name",
"gene_name",
"group",
"iuphar",
"kinase_ID",
"name",
"pocket",
"species",
"subfamily",
"uniprot"
]
dict_kinase_info = dict(zip(list_key, [None]*len(list_key)))
dict_kinase_info["name"] = self.kinase_name
return dict_kinase_info
[docs]
def get_kinase_name(self):
"""Get name of the kinase."""
return self.kinase_name
[docs]
def get_species(self):
"""Get species of the kinase."""
return self.species
[docs]
def get_kinase_info(self):
"""Get information about the kinase."""
return self._kinase_info