Spaces:
Sleeping
Sleeping
# genesis/api_clients/chembl_api.py | |
import os | |
import requests | |
from typing import Dict, List, Optional | |
CHEMBL_BASE = "https://www.ebi.ac.uk/chembl/api/data" | |
CHEMBL_API_KEY = os.getenv("CHEMBL_API_KEY") # If you have API key access, else can be None (public API works without auth) | |
def search_molecule(query: str, max_results: int = 10) -> List[Dict]: | |
""" | |
Search ChEMBL for a molecule by name, synonym, or ChEMBL ID. | |
""" | |
params = {"format": "json", "limit": max_results, "molecule_synonyms__icontains": query} | |
r = requests.get(f"{CHEMBL_BASE}/molecule", params=params) | |
r.raise_for_status() | |
data = r.json() | |
return data.get("molecules", []) | |
def get_molecule_details(chembl_id: str) -> Dict: | |
""" | |
Retrieve full details for a specific molecule (properties, SMILES, InChI). | |
""" | |
r = requests.get(f"{CHEMBL_BASE}/molecule/{chembl_id}.json") | |
r.raise_for_status() | |
return r.json() | |
def get_target_details(target_chembl_id: str) -> Dict: | |
""" | |
Retrieve details about a protein target. | |
""" | |
r = requests.get(f"{CHEMBL_BASE}/target/{target_chembl_id}.json") | |
r.raise_for_status() | |
return r.json() | |
def get_bioactivities(chembl_id: str, max_results: int = 20) -> List[Dict]: | |
""" | |
Retrieve bioactivity assays for a given molecule. | |
""" | |
params = {"format": "json", "limit": max_results} | |
r = requests.get(f"{CHEMBL_BASE}/activity?molecule_chembl_id={chembl_id}", params=params) | |
r.raise_for_status() | |
return r.json().get("activities", []) | |
def get_mechanism_of_action(chembl_id: str) -> List[Dict]: | |
""" | |
Retrieve mechanism of action data for a drug. | |
""" | |
r = requests.get(f"{CHEMBL_BASE}/mechanism.json?molecule_chembl_id={chembl_id}") | |
r.raise_for_status() | |
return r.json().get("mechanisms", []) | |
def get_clinical_trials(chembl_id: str) -> List[Dict]: | |
""" | |
Retrieve clinical trial data linked to a drug. | |
""" | |
r = requests.get(f"{CHEMBL_BASE}/clinical_trial.json?molecule_chembl_id={chembl_id}") | |
r.raise_for_status() | |
return r.json().get("clinical_trials", []) | |
def get_structural_image(chembl_id: str, size: str = "500") -> Optional[str]: | |
""" | |
Retrieve PNG image of molecule from ChEMBL's structure rendering service. | |
Returns image URL. | |
""" | |
return f"https://www.ebi.ac.uk/chembl/api/utils/image/{chembl_id}?dimensions={size}" | |